Колонка редактора
Как это работает
Профессионал
Новости
Вопросы и ответы
Литература


Начальная страница
E-mail


Кто не спрятался, я не виноват!

Фильтрация пакетов, firewall и маскарадинг в Линуксе




Пример настройки маскарадинга

ipchains -P forward DENY
ipchains -A forward -s 192.168.1.0/24 -j MASQ
echo 1 > /proc/sys/net/ipv4/ip_forward
Сначала отключается вся пересылка пакетов, потом включается маскарадинг в предположении, что в локальной сети используются адреса из пула 192.168.1.x.

Можно усложнить правила маскарадинга, указав адреса конкретных машин, для которых надо его осуществлять:

ipchains -P forward DENY
ipchains -A forward -s 192.168.1.2 -j MASQ
ipchains -A forward -s 192.168.1.8 -j MASQ
echo 1 > /proc/sys/net/ipv4/ip_forward
Остальные машины, кроме 192.168.1.2 и 192.168.1.8 доступа в интернет не получат.


Пример настройки фильтра пакетов

Предположим, что у вас есть PPP-соединение ('-i ppp0'). Вы читаете конференции (-p TCP -s news.virtual.net nntp) и почту (-p TCP -s mail.virtual.net pop-3). Иногда скачиваете по ftp свежее ядро для своего линукса (-p TCP -y -s ftp.kernel.org ftp-data). Бродите по www через прокси-сервер своего провайдера (-p TCP -d proxy.virtual.net 8080), но не любите рекламу с www1.reklama.ru и rb2.design.ru (-p TCP -y -d 195.46.160.46, -p TCP -y -d 212.24.32.76). Вы не возражаете против пользования ftp-сервером на вашей машине (-p TCP -d $LOCALIP ftp), но не хотите, чтобы кто-то снаружи делал вид, что он из вашей локальной сети (-s 192.168.1.0/24) - это называется IP-спуфинг (spoofing), и в ядрах 2.1.x и выше есть более правильные средства для защиты от него.

Итак:
Вы не хотите, чтобы ваши локальные процессы (в т.ч. Netscape) соединялись с www1.reklama.ru и rb2.design.ru:

ipchains -A output -d 195.46.160.46 -j REJECT
ipchains -A output -d 212.24.32.76 -j REJECT
Вы устанавливаете приоритеты для исходящих пакетов (для входящих этого делать нет смысла). Поскольку этих правил довольно много, можно выделить их в отдельную цепочку по имени ppp-out:
ipchains -N ppp-out
ipchains -A output -i ppp0 -j ppp-out
Минимальная задержка для www-трафика и telnet'а:
ipchains -A ppp-out -p TCP -d proxy.virtual.net 8080 -t 0x01 0x10
ipchains -A ppp-out -p TCP -d 0.0.0.0/0 telnet -t 0x01 0x10
Низкая стоимость для данных ftp, nntp, pop3:
ipchains -A ppp-out -p TCP -d 0.0.0.0/0 ftp-data -t 0x01 0x02
ipchains -A ppp-out -p TCP -d 0.0.0.0/0 nntp -t 0x01 0x02
ipchains -A ppp-out -p TCP -d 0.0.0.0/0 pop-3 -t 0x01 0x02
Существуют некоторые ограничения на пакеты, приходящие по интерфейсу ppp0, выделим их в отдельную цепочку по имени ppp-in:
ipchains -N ppp-in
ipchains -A input -i ppp0 -j ppp-in
Никакие пакеты, приходящие из ppp0 не должны притворяться, что они с адресов 192.168.1.*, т.е. из локальной сети. Если же таковые появятся, то их надо занести в журнал ('-l') и уничтожить:
ipchains -A ppp-in -s 192.168.1.0/24 -l -j DENY
Разрешим UDP-пакеты для DNS (поскольку у вас работает кэширующий DNS-сервер, который пересылает все запросы на 203.29.16.1, то и ответов вы ожидаете только оттуда), а также входящие ftp-пакеты и ответные ftp-data (которые должны быть с портов выше 1023, но не с портов X11 в районе 6000):
ipchains -A ppp-in -p UDP -s 203.29.16.1 -d $LOCALIP dns -j ACCEPT
ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 1024:5999 -j ACCEPT
ipchains -A ppp-in -p TCP -s 0.0.0.0/0 ftp-data -d $LOCALIP 6010: -j ACCEPT
ipchains -A ppp-in -p TCP -d $LOCALIP ftp -j ACCEPT
Ну и, наконец, все локальные пакеты на эту же машину вполне допустимы:
ipchains -A input -i lo -j ACCEPT
Политика по умолчанию для входной цепочки - DENY, то есть все остальное уничтожается:
ipchains -P input DENY
Примечание: правила не обязательно добавлять именно в таком порядке, поскольку пока вы их добавляете, некоторые нежелательные пакеты могут проскочить через фильтр. С точки зрения безопасности наиболее правильно сначала установить политику DENY для входной цепочки, а потом добавлять новые правила. Однако, если добавляемые правила потребуют разрешения символических имен с помощью DNS, у вас могут возникнуть неприятности. Я вас предупредил ;-).

<< Страница 3 Страница 5 >>