Основы работы с iptables

A. Теория.
https://ru.wikibooks.org/wiki/Iptables
http://www.opennet.ru/man.shtml?topic=iptables&category=8&russian=0
P.S. По этим линкам найдёте ОЧЕНЬ МНОГА БУКАВмного подробной полезной информации, вам понадобится много сигарет и кофевремени на обдумывания и размышления, но это полезно :-)

Для ipv6 используются аналогичные тулзы, как и для ipv6 (ip6tables,ip6tables-restore,ip6tables-apply)

Если вам было лень читать многа букавговорить коротко, то основные таблицы, с которыми мы будем работать, это filter и nat (с таблицей mangle, которая используется для модификации полей TTL,TOS,TCP MSS и MARKпакетов, мы практически не будем работать, так как в работе она вам редко когда понадобится ) и их основными цепочками: INPUT,OUTPUT,FORWARD, POSTROUTING и PREROUTING

Цепочки:
1. INPUT ← используется для фильтрации входящих пакетов
2. OUTPUT ← используется для фильтрации исходящих пакетов
3. FORWARD ← используется для фильтрации проходящих через наш хост пакетов
4. PREROUTING ← в эту цепочку пакеты сначала попадают, перед тем как отправиться на обработку в другие цепочки. Часто используется для перенаправления на другой порт, либо пробросов портов
5. POSTROUTING ← используется для натирования и обработки исходящего через нас пакетов

Таблицы:
1. filter ← основная таблица, которая отвечает за фильтрацию трафика по критериям: разрешить, отклонить, залогировать и т.п.
2. nat ← собственно отвечает за натирование и обработку проходящего и входящего трафика. Задействуется перед таблицей filter
3. mangle ← используется для модификации полей в пакете

Действия:
1. ACCEPT ← разрешить
2. DROP ← строгое запрещение
3. REJECT ← запретить дальнейшую обработку пакета и «отрыгнуть» icmp сообщение о том, что порт закрыт (может использоваться для отладки)
4. LOG ← логировать пакет стандартным средством syslog (крайне не рекомендуется, если вы конечно не хотите засрать все логи срабатываниями фаервола)
5. ULOG ← более кошерный,правильныйпродвинутый вариант LOG (не гадит в syslog а будет писать только в нужный вам текстовый файл, бинарный файл или даже БД. Требует установленного пакета ulogd )
6. MASQUERADE ← маскарадинг
7. DNAT ← подмена IP назначения, используется для проброса портов
8. SNAT ← подмена исходящего IP, используется для натирования
9. REDIRECT ← перенаправить на другой порт

Модули и параметры:
1. -p ← выбор протокола (tcp, udp, icmp, esp, sctp, ah, udplite и all)
2. -i ← входящий интерфейс
3. -o ← исходящий интерфейс
4. -m ← выбор модуля (tcp, udp, icmp, state, comment, limit, multiport, owner, string, conntrack, mac)
5. -j ← действие (см. сноску «Действия»)
6. -s ← исходящий адрес/сеть
7. -d ← адрес/сеть назначения
8. -A ← указать цепочку

Мы рассмотрим правила iptables на примере пограничного фаервола, между офисом и внешним миром.

Легенда:

  1. eth0 ← это наш внешних интерфейс, который смотрит в «мир» у него будет IP 188.67.53.23
  2. eth1 ← интерфейс смотрит в офисную сеть 172.16.5.0/24
  3. eth2 ← интерфейс смотрит в сеть где находятся тестовые веб-сервера, сеть 172.17.1.0/28
  4. eth3 ← интерфейс за которым находятся наши боевые сервера, будут иметь сеть 188.67.13.0/24
  5. 172.17.1.10 ← IP нашего почтового сервера
  6. 188.251.148.31 ← внешний IP нашего админа
  7. 172.16.5.7 ← рабочий комп мудакадиректора

B. Пишем правила.

1. Для начала создадим наш файл с конфигом для загрузки правил в iptables
cd /etc && mkdir firewall && chmod 0700 firewall && cd firewall && touch rc.firewall && chmod 0600 firewall
2. Заранее запишем наш конфиг в /etc/network/interfaces, для того, что бы после ребута у нас не оказался сервер без фаерволла.
echo «up /sbin/iptables-restore < /etc/firewall/rc.firewall» » /etc/network/interfaces

  1. Открываем наш конфиг
    vim rc.firewall
  2. Теперь нам необходимо написать правила в основную таблицу filter

*nat

:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -p tcp -m state –state NEW -m tcp –dport 443 -j REDIRECT –to-ports 9001
-A PREROUTING -p tcp -m state –state NEW -m tcp –dport 80 -j REDIRECT –to-ports 9030
COMMIT

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
← В этих трёх правилах мы задаём политики по умолчанию для цепочек INPUT, FORWARD и OUTPUT
-INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-INPUT -i lo -j ACCEPT
-A INPUT -m state –state INVALID -j DROP
-A INPUT -s 54.214.49.70/32 -j DROP -m comment –comment «rapid7 scan network»
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK -j DROP
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN FIN,SYN -j DROP
-A INPUT -p tcp -m tcp –tcp-flags SYN,RST SYN,RST -j DROP
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
← В этих правилах мы запрещаем проход новых пакетов с указанной последовательностью флагов
-A INPUT -i eth0 -s 188.251.148.31/32 -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
-OUTPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-OUTPUT -o lo -j ACCEPT
-A OUTPUT -m state –state INVALID -j DROP
-A OUTPUT -o eth0 -p udp -m state –state NEW -m owner –uid-owner 0 -m udp –dport 33434:33524 -j ACCEPT -m comment –comment «traceroute»
-A OUTPUT -o eth1 -p icmp -m owner –gid-owner 4 -m icmp –icmp-type 8 -m state –state NEW -j ACCEPT
-A OUTPUT -p icmp -m owner –uid-owner 0 -m icmp –icmp-type 8 -m state –state NEW -j ACCEPT -m comment –comment «just ping»
COMMIT

DokuWiki Appliance - Powered by TurnKey Linux