Основы работы с 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 ← адрес/сеть назначения
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
*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, FORWARD и OUTPUT
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-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