Примеры написания правил для iptables
  • Категории
  • Подписка
  • Разместить статью
02/09/10 13 9491 Iptables
-

Примеры написания правил для iptables

У цепочек программы iptables существуют правила по умолчанию (политики филь­трации). Стандартная политика для iptables – директива DROP.

Выбираемое правило зависит от связки таблица/цепочка. Директива DROP необходима для цепочки filter/FORWARD. Эта цепочка исполь­зуется для фильтрации всех пакетов, проходящих через систему (т.е. маршрутизируемых). Хорошим кандидатом является также цепочка filter/ INPUT, которая используется для фильтрации пакетов, поступающих на брандмауэр. В других цепочках стандартная политика фильтрации зависит от применения цепочки. Например, если стратегия защиты системы предусматривает ограничение исходящего трафика, директива DROP подойдет и для цепочки filter/OUTPUT.

Ниже показано, как назначить цепочкам filter/FORWARD и filter/OUTPUT политику фильтрации DROP:

iptables   -P  FORWARD  -j   DROP

iptables  -P INPUT -j DROP

Базовые правила

Рассмотрим простой пример системы, в которой нужно разрешить FTP-соединения из внутренней сети во внешнюю. Нужно также разрешить FTP-доступ с ком­пьютера topcat во внешнюю сеть. Весь остальной трафик не разрешен. Система NAT в данном случае не используется. Это не совсем реалистичный пример, который далее будет усложняться.

Чтобы пропустить FTP-трафик из внутренней сети, нужно добавить соответствующие правила в цепочку filter/FORWARD. Через эту цепочку должны также проходить воз­вращаемые пакеты. Правила, разрешающие FTP-доступ с компьютера topcat во внеш­нюю сеть, добавляются в цепочки filter/INPUT и filter/OUTPUT. Необходимые правила приведены ниже (номера необходимы для удобства описания, там где «- — [расширение]«, например «- — sport», имеется ввиду все вместе без пробелов):

1. iptables -P FORWARD -j DROP

2. iptables -P INPUT -j DROP

3. iptables -P OUTPUT -j DROP

4. iptables -A FORWARD -s 10.254.10.0/24 -d 0/0 -m multiport -p tcp — — dport ftp, ftp-data -j ACCEPT

5. iptables -A FORWARD -s 0/0 -d 10.254.10.0/24 -p tcp — — sport ftp-data -j ACCEPT

6. iptables -A FORWARD -s 0/0 -d 10.254.10.0/24 -p tcp — — sport ftp ! — — syn -j ACCEPT

7. iptables -A FORWARD -j LOG — — log-prefix «iptables FORWARD: «

8. iptables -A OUTPUT -o eth0 -s 10.254.1.1 -d 0/0 -m multiport -p tcp — — dport ftp, ftp-data -j ACCEPT

9. iptables -A OUTPUT -j LOG — — log-prefix «iptables OUTPUT: «

10. iptables -A INPUT -i eth0 -s 0/0 -d 10.254.1.1 -p tcp — — sport ftp-data -j ACCEPT

11. iptables -A INPUT -i eth0 -s 0/0 -d 10.254.1.1 -p tcp — — sport ftp ! — — syn -j ACCEPT

12. iptables -A INPUT -j LOG — — log-prefix «iptables INPUT: «

Каждую из этих команд можно выполнить отдельно или поместить в сценарий. В стро­ках 1-3 задаются стандартные правила фильтрации для трех цепочек таблицы filter. В строках 4-7 записаны правила цепочки filter /FORWARD, контролирующие переад­ресацию пакетов через компьютер topcat. В частности, в строке 4 пропускаются пакеты из локальной сети по любому исходящему адресу, при условии, что целевой порт соот­ветствует службе ftp или ftp-data. В строке 5 разрешается передача FTP-данных из внешней сети во внутреннюю. В строке 6 пропускаются ответные FTP-пакеты, если толь­ко они не являются запросами на установление соединения. В строке 7 регистрируются все остальные пакеты, поступающие в цепочку FORWARD.

В строках 8-12 заданы правила цепочек filter/OUTPUT и filter/INPUT. По су­ти, они эквивалентны предыдущим правилам цепочки filter/FORWARD, но применяют­ся к исходящим пакетам, которые генерируются локальными процессами на компьютере topcat (filter/OUTPUT), а также к пакетам, поступающим на компьютер topcat (filter/INPUT). Указан только интерфейс eth0, поэтому FTP-доступ разрешен только во внешнюю сеть. Кроме ответных FTP-пакетов, весь остальной трафик, поступающий на компьютер topcat, игнорируется. Никакой трафик во внутреннюю сеть не пропускается.

Далее будут рассмотрены средства контроля соединений, позволяющие ми­нимизировать правила и повысить общую безопасность системы.

Контроль соединений

Сейчас будем упрощать правила цепочки filter/FORWARD, показанные в предыдущем листинге, включив контроль соединений. Обновленные правила приведены ниже:

1. modprobe ip_conntrack

2. modprobe ip_conntrack_ftp

3. iptables -P FORWARD -j DROP

4. iptables -P INPUT -j DROP

5. iptables -P OUTPUT -j DROP

6. iptables -A FORWARD -m state — — state ESTABLISHED, RELATED -j ACCEPT

7. iptables -A FORWARD -m state — — state NEW -s 10.254.10.0/24 -d 0/0 -p tcp — — dport ftp -j ACCEPT

8. iptables -A FORWARD -m limit -j LOG — — log-prefix «iptables FORWARD: «

9. iptables -A OUTPUT -o eth0 -s 10.254.1.1 -d 0/0 -m state — — state ESTABLISHED,RELATED -j ACCEPT

10. iptables -A OUTPUT -m state — — state NEW -o eth0 -s 10.254.1.1 -d 0/0 -p tcp — — dport ftp -j ACCEPT

11. iptables -A OUTPUT -m limit -j LOG — — log-prefix «iptables OUTPUT: «

12. iptables -A INPUT -i eth0 -s 0/0 -d 10.254.1.1 -m state — — state ESTABLISHED,RELATED -j ACCEPT

13. iptables -A INPUT -m limit -j LOG — — log-prefix «iptables INPUT: «

Сразу бросается в глаза использование расширения state. Благодаря контролю со­стояния RELATED пропадает необходимость создавать отдельные правила для обработки ответных пакетов службы ftp-data. Обратите внимание на строки 1 и 2, в которых загружаются модули ip_conntrack и ip_conntrack_ftp. Они необходимы, что­бы можно было использовать расширение state. В строках 3-5 задаются стандартные правила фильтрации для цепочек таблицы filter.

В цепочке filter/FORWARD теперь не четыре правила, а три. Строка 6 — это пра­вило, пропускающее любые пакеты, посылаемые в рамках существующего соединения (состояние ESTABLISHED). Ключевое слово RELATED разрешает все связанные соеди­нения, включая пакеты ICMP и запросы службы ftp-data. В строке 7 указано, что исходящие соединения могут устанавливаться только службой ftp. Конечно, сокраще­ние числа правил с четырех до трех не слишком существенно в данном случае, но если бы было разрешено большее число соединений, эффект получился бы значительным. На­пример, если нужно разрешить службы ftp, www и telnet, изменению подвергнется только строка 7:

iptables  -A FORWARD -m state  — — state NEW -m multiport

-s  10.254.10.0/24 -d 0/0 -p tcp — — dport  ftp,www,telnet -j  ACCEPT

Правила цепочек filter/OUTPUT и filter/INPUT подвергаются аналогичным изменениям. Обратите внимание на то, что правила, включающие журнальную регистра­цию, содержат опцию -m limit. Это позволяет сократить число регистрируемых паке­тов и противостоять атакам типа «отказ от обслуживания» (DOS), нацеленным на переполнение журнальных файлов.

Как и в предыдущем примере, все правила можно выполнять вручную или поместить сценарий.

Правила таблицы nat

Теперь рассмотрим более реалистичный пример. Предположим, что ком­пьютер topcat имеет IP-адрес 199.2.8.17/28, связанный с интерфейсом eth0, и до­ступен целый диапазон адресов от 199.2.8.18 до 199.2.8.29. Эти адреса назначены провайдером, маршрутизатор которого имеет адрес 199.2.8.30.

В данном примере имеются общедоступные Web- и FTP-сервер, которым назначены внешние адреса 199.2.8.18 и 199.2.8.19. Для обработки этих адресов придется использовать систему NAT и написать соответствующие правила программы iptables. Предположим также, что стратегия безопасности организации разрешает всем компьюте­рам локальной сети получать доступ в Internet. Доступ к локальным системам из Internet запрещен, за исключением Web- и FTP-серверов, а также ответных пакетов.

Ниже в листинге показаны правила конфигурирования компьютера topcat (без правил журнальной регистрации):

14. modprobe iptable_nat

15. modprobe ip_nat_ftp

16. modprobe ip_conntrack

17. modprobe ip_conntrack ftp

18. iptables -P INPUT -j DROP

19. iptables -P FORWARD -j DROP

20. iptables -P OUTPUT -j DROP

21. iptables -t nat -A PREROUTING -d 199.2.8.18 -j DNAT — — to-destination 10.254.1.10

22. iptables -t nat -A PREROUTING -d 199.2.8.19 -j DNAT — — to-destination 10.254.1.20

23. iptables -t nat -A POSTROUTING -s 10.254.1.10 -j SNAT — — to-source 199.2.8.18

24. iptables -t nat -A POSTROUTING -s 10.254.1.20 -j SNAT — — to-source 199.2.8.19

25. iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -j SNAT

26. iptables -A FORWARD -m state — — state ESTABLISHED, RELATED -j ACCEPT

27. iptables -A FORWARD -s 10.0.0.0/8 -d 0/0 -m state — — state NEW -j ACCEPT

28. iptables -A FORWARD -s 0/0 -d 10.254.1.10 -m state — — state NEW, ESTABLISHED, RELATED -p tcp — — dport www -j ACCEPT

29. iptables -A FORWARD -s 0/0 -d 10.254.1.20 -m state — — state NEW, ESTABLISHED, RELATED -p tcp — — dport ftp -j ACCEPT

30. iptables -A OUTPUT -m state — — state NEW, ESTABLISHED, RELATED -j ACCEPT

31. iptables -A INPUT -m state — — state ESTABLISHED, RELATED -j ACCEPT

32. iptables -A INPUT -i eth1 -s 10.0.0.0/8 -d 10.254.1.1 -m state — — state NEW -j ACCEPT

В строках 14 и 15 загружаются модули ядра, необходимые для функционирования си­стемы NAT. Строки 16-20 были описаны выше. Строки 21-24 описывают правила досту­па к Web- и FTP-серверам. Правила цепочки PREROUTING транслируют Internet-адреса входящих пакетов в локальные адреса, а правила цепочки POSTROUTING транслируют исходные адреса исходящих пакетов. Порядок обработки этих цепочек позволяет исполь­зовать в цепочке FORWARD реальные IP-адреса (а не транслированные, как в программе ipchains).

Строка 25 содержит правило, транслирующее исходный IP-адрес всех внутренних уз­лов (кроме Web- и FTP-серверов). Здесь используется директива SNAT, поскольку внеш­ний адрес 199.2.8.17 фиксирован (т.е. протокол DHCP или его аналог не используется).

Все пакеты, передаваемые в Internet из внутренней сети, будут казаться отправленными с компьютера 199.2.8.17. Обратная трансляция выпол­няется автоматически.

Остальные правила напоминают соответствующие правила предыдущего примера.

Недостаточно задать правила NAT для трансляции адреса 10.254.1.10 в 199.2.8.18 и адреса 10.254.1.20 в 199.2.8.19. Это объясняется тем, что компьютер topcat по умолчанию не сконфигурирован на обработку адресов 199.2.8.18 и 199.2.8.19. Проще всего решить эту проблему, создав IP-псевдонимы для этих адресов и связав их с интер­фейсом eth0 компьютера topcat.


13 комментариев на «“Примеры написания правил для iptables”»

  1. iptables прекрасен и гибок в настройке, но я до сих пор не осилил решение типа как в керио, монитор установленных соединений и разрыв ручками нежелательных, а это очень печально.

  2. Автору спасибо, все четко и по полочкам разложил.

Добавить комментарий

Яндекс.Метрика