Комментарии

Галерея

Опрос

Из каких стран идет больше всего спама, попыток взлома на ваши серверы?:

iptables, два интерфейса, настроим?

Аватар пользователя maximum
     

Здрасте!!!
Встал передо мной вопрос безопасности серверов, решил я как то ограничить доступ для таких сервисов как 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