IPTables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана (брандмауэра).
Ключи для работы с цепочками:
-A — добавить новое правило.
-D — удалить правило.
-F — удалить все правила.
-R — замена правила.
-L — вывод списка всех правил.
INPUT — входящий трафик.
OUTPUT — исходящий трафик.
FORWARD — пересылаемый(транзитный) трафик.
Параметры:
-p — протокол, может быть all,icmp,tcp,udp.
-s — ip адрес/хост источника.
-d — ip адрес/хост назначения.
-i — интерфейс на который пришел пакет.
-o — интерфейс с которого уйдет пакет.
—sport — порт источника.
—dport — порт назначения.
Действия:
ACCEPT — разрешить пакеты.
REJECT — блокировать пакеты с сообщением об отказе.
DROP — блокировать пакеты (меньше нагрузка на CPU при массовых запросах, более приоритетный вариант чем REJECT).
RETURN — прекращение проверок текущей цепочки и продолжение с родительской.
MARK и CONNMARK — маркировка пакетов.
LOG — журналирование пакетов в syslog.
Примеры просмотра правил:
iptables -nvL
iptables -nvL | grep 192.168.0
iptables -n -L -v --line-numbers
iptables -L INPUT -n -v
iptables -L OUTPUT -n -v --line-numbers
iptables -L OUTPUT -n --line-numbers | less
iptables -L OUTPUT -n --line-numbers | grep 192.168.2.14
iptables -L INPUT --line-numbers
ip6tables -nvL
ip6tables -t filter -nvL
iptables -S
iptables -t raw -S
iptables -t mangle -S
iptables -L -t nat
iptables -L -t mangle
Примеры удаления правил:
iptables -D INPUT 3
iptables -D INPUT -s 192.168.2.14 -j DROP
Пример добавления правила на первое место в цепочке INPUT:
iptables -nL --line-numbers
iptables -I INPUT 1 -s 1.2.3.4/32 -m comment --comment "ixnfo.com" -j ACCEPT
Приведу пример простого NAT правила (где 10.0.0.0/24 — локальная сеть, а 10.50.50.1 смотрит в интернет):
iptables -t nat -I POSTROUTING -s 10.0.0.0/24 -j SNAT --to-source 10.50.50.1 --persistent
Пример удаления и добавления NAT правил:
iptables -t nat -D POSTROUTING -s 172.16.2.0/16 -o eth1 -j SNAT --to-source 192.168.1.251-192.168.1.254 --persistent
iptables -t nat -A POSTROUTING -s 172.16.2.0/17 -o eth1 -j SNAT --to-source 192.168.1.218-192.168.1.222 --persistent
Если настроен NAT и нужно пробросить порт к локальному IP (где 192.168.0.18 — локальный IP, а 10.50.50.2 на eth0 смотрит в интернет):
iptables -t nat -A PREROUTING -d 10.50.50.2/32 -i eth0 -p tcp -m tcp --dport 81 -j DNAT --to-destination 192.168.0.18:81
Допустим NAT для сети 192.168.0.0/24 настроен через 10.50.50.1, а 192.168.0.18 нужно пустить через 10.50.50.2:
iptables -t nat -A POSTROUTING -s 192.168.0.18/32 -o eth0 -j SNAT --to-source 10.50.50.2
Полный сброс правил:
iptables -F
Управление службой:
service iptables stop/start/restart/save
Пример разрешающих правил для pop3, pop3s:
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 995 -j ACCEPT
Пример для imap, imaps:
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 993 -j ACCEPT
Установка политик INPUT и FORWARD на отбрасывание по умолчанию:
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Чтобы разрешить ping:
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
Примеры блокировки и разблокировки IP адреса или сети:
iptables -A INPUT -s xx.xx.xx.xx -j DROP
iptables -A INPUT -s xx.xx.xx.xx/24 -j DROP
iptables -A INPUT -s xx.xx.xx.xx/24 -j REJECT --reject-with icmp-port-unreachable
iptables -D INPUT -s xx.xx.xx.xx -j DROP
При добавлении правила желательно добавить комментарий, например:
iptables -A INPUT -s xx.xx.xx.xx -m comment --comment "text" -j DROP
Ограничить количество подключений до 200 на определенный порт, например 443 и 80 (замечу что connlimit при очень большом трафике может сильно нагружать процессор):
iptables -A INPUT -p tcp -m tcp --dport 443 -m connlimit --connlimit-above 200 --connlimit-mask 32 -j DROP
iptables -A INPUT -p tcp -m tcp --dport 443 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
iptables -A INPUT -s 172.16.0.0/12 -p tcp --dport 80 -m connlimit --connlimit-above 200 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -p tcp --dport 80 -j ACCEPT
Открытие порта 80 с лимитом подключений:
iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/second -j ACCEPT
Если в правиле необходимо указать несколько портов, то нужно добавить multiport, например:
-m multiport --dports 80,8080
Пример маркировки пакетов:
iptables -t mangle -A PREROUTING -s 192.168.5.0/24 -j MARK --set-mark 38
Вариант запрета сканирования портов (блокируются IP на 300 секунд, с которых идут пакеты помимо разрешенных портов):
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -p all -i eth0 -j ACCEPT
iptables -A OUTPUT -p all -o eth0 -j ACCEPT
iptables -A INPUT -m recent --rcheck --seconds 300 --name STOPSCAN -j DROP
iptables -A INPUT -p tcp -m multiport ! --dports 80,443 -m recent --set --name STOPSCAN -j DROP
iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --syn --dport 443 -j ACCEPT
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Можно сделать резервную копию правил в файл, а также восстановить их из него командами:
iptables-save > iptables.dump
iptables-restore < iptables.dump
ip6tables-save > ip6tables.dump
ip6tables-restore < ip6tables.dump
Искать текст по правилам можно так:
iptables-save|grep 172.16.2.0/24
Так как могут быть уязвимости через RPC, то лучше закрыть порт 111 (а еще лучше открыть только нужные порты и сделать по умолчанию INPUT DROP):
rpcinfo -p localhost
/sbin/iptables -A INPUT -p tcp --dport 111 -j DROP
/sbin/iptables -A INPUT -p udp --dport 111 -j DROP
Смотрите также мои статьи:
IPTables правила для: Accel-ppp, BGP, DHCP, DNS, FreeRADIUS, WEB, Asterisk, TFTP, SSH, Samba, FTP, NTP и SNTP, SNMP, MySQL, ntopng, nprobe, Zabbix
- Как сохранить IPTables правила
- Установка и использование ipset
- Настройка nftables
- Блокировка по MAC адресу
- Прочее с тегом IPTables
- Скрипт быстрой настройки IPTables
- Журналирование активности средствами IPTables
- Решение ошибки «Another app is currently holding the xtables lock»
- Проброс портов в iptables на NAT сервере
Правила iptables для других служб ищете в моих статьях по установке этих служб.