Личный блог Suvan`a.

Работая и играя с Linux... И что из этого иногда получается.

Создание набора правил брандмауэра(Часть 2).

Рубрика: Безопасность -> Брандмауэр
Метки: | | | |
Понедельник, 6 апреля 2009 г.
Просмотров: 6386

     Защита нейтральной зоны (DMZ).

     Правила, заданные в сценарии nat.sh, ограничивали поток трафика в нейтральную зону, но не определяли ограничения на ис­ходящий от DMZ-серверов трафик, который может передаваться или в ло­кальную сеть, или в Интернет. В идеале нужно разрешить только ESTABLISED- и RELATED-трафик, так как DMZ-серверы будут только обрабатывать запросы клиен­тов и не будут устанавливать новых соединений.

     Но есть определенная проблема, которая заключается в том, что сервисы, в частности DNS и SMTP, будут устанавливать новые соединения. Если запретить созда­ние новых соединений для DNS-серверов, то прервется работа этих сер­висов. В этом случаем нужно написать более точные правила.


     Правила для DNS-сервера.

     Для DNS-сервера можно реализовать несколько разных конфигураций, но нередко используемая конфигурация предполагает, что DNS-сервер будет использоваться для ответов на запросы удаленных клиентов (или удаленных серверов имен) о зоне и для ответов на запросы клиентов ло­кальной сети. Посмотрим на DNS-трафик:

  • DNS-запросы удаленных клиентов/серверов имен. Порт отправителя будет в диапазоне 1024-65535, а порт получателя — 53. Протокол - TCP/UDP.
  • DNS-ответы на запросы: порт отправителя 53, порт получателя будет в диапазоне 1024-65535.
  • Некоторые версии BIND используют для запросов порт отправителя 53, поэтому нужно разрешить трафик, где порт отправителя и порт получателя равен 53.

     Напишем соответствующие правила IPTables:

$IPT -I FORWARD -о $IF_DMZ -d $DMZ_DNS -p udp --sport 1024:65535 --dport 53 -j ACCEPT

$IPT -I FORWARD -o $IF_DMZ -d $DMZ_DNS -p udp --sport 53 --dport 53 -j ACCEPT

$IPT -I FORWARD -o $IF_DMZ -d $DMZ_DNS -p udp --sport 53 --dport 1024:65535 -j ACCEPT

$IPT -I FORWARD -o $IF_DMZ -d $DMZ_DNS -p tcp --sport 1024:65535 --dport 53 -j ACCEPT

$IPT -I FORWARD -o $IF_DMZ -d $DMZ_DNS -p tcp --sport 53 --dport 53 -j ACCEPT

$IPT -I FORWARD -o $IF_DMZ -d $DMZ_DNS -p tcp --sport 53 --dport 1024:65535 -j ACCEPT

     Правила для SMTP-сервисов.

     SMTP-сервер выполняет две функции: получение почты от удаленных уз­лов и отправку почты, созданной пользователями локальной сети, удален­ным SMTP-серверам. Обе ситуации подразумевают использование ТСР-соединения между непривилегированным портом и портом 25. В этом случае получим следующие правила:

$IPT -I FORWARD -о $IF_DMZ -d $DMZ_MAIL -p tcp --sport 23 --dport 1024:65535 -j ACCEPT

$IPT -I FORWARD -o $IF_DMZ -d $DMZ_MAIL -p tcp --sport 1024:65535 --dport 1024:65535 -j ACCEPT

     Другие сервисы.

     Последние правила для DNS и SMTP будут вставлены в самое начало цепочки FORWARD, следовательно, в случае удачного совпадения обработка пра­вил цепочки будет прекращена. Это позволяет модифицировать правило из сценария nat.sh:

$IPT -A FORWARD -i $IF_DMZ -о $IF_EXT -j ACCEPT

     следующим образом:

$IPT -A FORWARD -i $IF_DMZ -o $IF_EXT -m state --state ESTABLISHED,RELATED -j ACCEPT

     так как теперь оно не касается DNS- и SMTP-трафика.

     ICMP-сообщения.

     Большинство ICMP-сообщений посылается в ответ на ТСР- или UDP-пакет (в частности, SOURCE QUENCH, если отправитель от­правляет данные быстрее, чем получатель может их принять, или PORT UNREACHABLE, если UDP-дейтаграмма посылается на закрытый порт) и отмечаются машиной состояний (так называемой, Stateful firewall) как RELATED, то есть связанные с определенным соединением.

     Состояние RELATED дает им возможность проходить через брандмауэр. Единс­твенный тип ICMP-сообщения, который не генерируется таким обра­зом, - это ECHO REQUEST (пинг). Главная задача - это ограничить его частоту:

$IPT -I INPUT -p icmp --icmp-type echo-request -m limit --limit 180/minute -j ACCEPT

     Другие ICMP-сообщения будут приняты, если они относятся к установлен­ному соединению, но их частоту тоже нужно ограничить:

$IPT -I INPUT -p icmp --icmp-type ! Echo-request -m limit --limit 180/minute -j ACCEPT

     Следующее правило будет записывать в лог все ICMP-сообщения, если будет превышен предел в 50 ICMP-сообщений за минуту:

$IPT -I INPUT -p icmp -m limit --limit 50/minute -j LOG