Здрасте!!!
Встал передо мной вопрос безопасности серверов, решил я как то ограничить доступ для таких сервисов как SSH, PROXY, HTTP/S, и конечно же терминальный сервер, КСТАТИ, скажете вы, есть интересная программа называется TeamViewer:
TeamViewer представляет собой пакет программного обеспечения для удаленного контроля компьютеров, обмена файлами между управляющей и управляемой машинами. TeamViewer работает на операционных системах Microsoft Windows и Mac OS X, Кроме прямого соединения, доступ возможен через брандмауэр, прокси, NAT, возможно получение доступа к удалённой машине посредством веб-браузера
Подробнее: http://ru.wikipedia.org/wiki/TeamViewer
ссылка на сайт: http://www.teamviewer.com/index.aspx
Так вот эта зараза прошибает НАТ на ура, и поэтому любой установивший данную утилиту может получить доступ к терминалу - это же говно какое получается...
Итак, берем iptables и начинаем готовить....
Что нам нужно:
Ограниченный доступ к ssh, http, proxy, RDP, ну и icmp еще отрежем на фиг с наружи, далее нам нужен проброс портов, маскарадинг, собственно сам нат, ну и так по мелочи... далее будет листинг моих правил с комментариями
сначала мы опишем некоторые переменные
#!/bin/sh
ipt="/sbin/iptables" #расположение файла iptables
inet_iface="eth1" # внешний интерфейс
loc_iface="eth0" # внутренний интерфейс
$ipt -F # сбрасываем правила
$ipt -X # удалить все старые правила
$ipt -P INPUT DROP #
$ipt -P FORWARD ACCEPT # тут задаем политику по умолчанию
$ipt -P OUTPUT DROP #
# это правило для NAT оно заворачивает все соеденения по TCP/UDP идущие на перечисленные порты на наш порт прокси сервера
$ipt -t nat -A PREROUTING -p tcp -m multiport --dports 80,81,82,83,88,8000,8001,8002,8080,8081 -j REDIRECT --to-ports 3128
$ipt -t nat -A PREROUTING -p udp -m multiport --dports 80,81,82,83,88,8000,8001,8002,8080,8081 -j REDIRECT --to-ports 3128
# это правило пробрасывает нужный нам порт на порт локальной машины за NAT'ом
# в моем случае, нужно дать доступ к базе 1с нашей сотруднице которая сейчас сидит #дома в дикрете, таким образом я открыл доступ к терминальному серверу из "вне" #только ее ip адресу
#все коннекты на порт 3389 внешнего интерфейса будут перенаправляться на внутреннюю #машину за натом на тот же порт, в нашем случае RDP
$ipt -t nat -A PREROUTING -p tcp -s 85.234.xx.xx/32 -d 95.83.xxx.xxx --dport 3389 -j DNAT --to-destination 192.168.0.15:3389
# ну а тут собственно маскарадинг для локальной сети, все просто
# нужно чтобы локальные машины имели доступ в интернет
$ipt -t nat -A POSTROUTING -o eth1 -j MASQUERADE
$ipt -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
# пошли сами цепочки правил iptables (FILTER)
# разрешаем ВСЕ к 127.0.0.1
$ipt -A INPUT -p ALL -d 127.0.0.1 -j ACCEPT
# разрешаем все что идет через lo (петлю)
$ipt -A INPUT -i lo -j ACCEPT
$ipt -A OUTPUT -o lo -j ACCEPT
# разрешаем все что идет через eth0 (локальная сеть)
$ipt -A INPUT -i $loc_iface -j ACCEPT
$ipt -A OUTPUT -o $loc_iface -j ACCEPT
# разрешаем уже установленные соеденения
$ipt -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ipt -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# что касается echo запросов
# дропаем все фрагментированные пакеты
#ICMP
$ipt -A INPUT --fragment -p icmp -j DROP
$ipt -A OUTPUT --fragment -p icmp -j DROP
#Далее идут правила, и в них фигурирует значение $inet_iface и $loc_iface, это нужно #чтобы фаервол знал на каком интерфейсе следует применять правила
#разрешаем НАМ пинг ВСЕХ, ВСЕМ остальным из вне - нельзя
$ipt -A OUTPUT -p icmp -m icmp -o $inet_iface -j ACCEPT
#разрешаем (DNS) запросы на 53/tcp, на ведь нужно чтобы имена резолвились
#DNS
$ipt -A OUTPUT -p udp -m udp -o $inet_iface --dport 53 -j ACCEPT
#тут все просто, ssh открыт из вне только моему ip адресу, остальных политика по умолчанию дропнет
#SSH
$ipt -A INPUT -p tcp -m tcp -s 92.246.xxx.xxx/32 -i $inet_iface --dport 22 -j ACCEPT
#почтовый сервачок, сервер должен принимать/отправлять почту из/в интернет(а)
#значит разрешаем 25 и 110 порты
#MAIL
$ipt -A INPUT -p tcp -m tcp -i $inet_iface --dport 25 -j ACCEPT
$ipt -A OUTPUT -p tcp -m tcp -o $inet_iface --dport 25 -j ACCEPT
$ipt -A INPUT -p tcp -m tcp -i $inet_iface --dport 110 -j ACCEPT
$ipt -A OUTPUT -p tcp -m tcp -o $inet_iface --dport 110 -j ACCEPT
#ну тут все ясно, разрешаем HTTP/S,PROXY и AUTH запросы, о них напишу чуть ниже
#HTTP/HTTPS/PROXY/AUTH
$ipt -A OUTPUT -p tcp -m tcp -m multiport -o $inet_iface -j ACCEPT --dports 80,443,3128,113
$ipt -A INPUT -p tcp -m tcp -m multiport -i $inet_iface -j ACCEPT --sports 80,443,3128,113
#доступ к прокси из вне, я разрешил только себе... для просмотра статистики в SAMS ну и для phpmyadmin
$ipt -A INPUT -p tcp -m tcp -s 92.246.xxx.xxx/32 -i $inet_iface --dport 3128 -j ACCEPT
Запросы AUTH, это запросы отправляемые сервером где используются авторизация пользователя, подробнее об AUTH 113/tcp читайте в RFC: http://www.ietf.org/rfc/rfc0931.txt
Ну вот собственно все, я думаю они помогут хоть немного разобраться в iptables и nat тем людям кто впервые столкнулся с данным фаерволом.
почитать дополнительно можно http://www.opennet.ru/docs/RUS/iptables/
На все вопросы буду рад ответить нашем сайте или форуме.
данная запись так же в моем ЖЖ: http://hellname.livejournal.com/5447.html
Комментарии
10 лет 29 недель назад
10 лет 30 недель назад
10 лет 30 недель назад
10 лет 30 недель назад
10 лет 32 недели назад
10 лет 32 недели назад
10 лет 32 недели назад
10 лет 42 недели назад
10 лет 42 недели назад
10 лет 43 недели назад