Пишу большей части по памяти (как писал в свое время руководство по редактору VIM), нужда заставила разобраться буквально на днях (настраивал кое-какой девайс с embedded Linux на борту) и соответственно решил сделать вот такой вот документ.
В сравнении с FreeBSD ipfw конечно более сложный путь настройки, однако “все работает” и это радует.
Итак, ниже список того, чем прийдется пользоваться в повседневной практике администратору Linux для настройки firewall
Сохранить текущую конфигурацию
iptables-save > /path/to/iptables (путь зависит от вашего дистрибутива)
Прочитать (восстановить) конфигурацию
iptables-restore < /path/to/iptables
Просмотреть список правил
iptables -L
iptables -L INPUT
INPUT - эта цепочка предназначена для входящих пакетов на сервер
Также рекомендую
iptables -L -n -v
-n не резолвить IP-адреса в DNS
-v, –verbose более информативный вывод
–line-numbers вывести нумерацию строк
Добавление правил
-A
iptables -A INPUT --dport 80 -j DROP
iptables -A INPUT --dport 80 -j ACCEPT
Удаление правил
-D, –delete
iptables -D INPUT 1
Удалить правило из правил трансляции адресов (живой пример)
iptables -L -t nat –line-numbers
….
iptables -t nat -D POSTROUTING 1
где единица - номер правила, счет начинается с единицы
-t - имя таблицы (по умолчанию filter)
или можно удалять написав все правило целиком (неудобно
iptables -D INPUT –dport 80 -j DROP
Заменить одно правило другим
-R, –replace
iptables -R INPUT 1 -s 193.0.0.193 -j DROP
меняем первое правило в списке
где -s - source ip адрес который блокируем в данном случае
Очистить все правила (flush)
-F, –flush
либо конкретную цепочку
iptables -F INPUT
*я надеюсь что всегда в iptables политика default to accept по-умолчанию?
Чуть-чуть подробнее про опции фильтрации пакетов
Заблокировать все входящие коннекты по 110 порту
iptables -A INPUT -p tcp --dport 110 -j DROP
Заблокировать входящие подключения по 80 порту на адрес 195.0.0.195
iptables -A INPUT -p tcp --dport 80 -d 195.0.0.195 -j DROP
Заблокировать входящие подключения по порту 80 tcp с адреса 193.0.0.193 на адрес 195.0.0.195
iptables -A INPUT -p tcp --dport 80 -s 193.0.0.193 -d 195.0.0.195 -j DROP
Указать интерфейс eth0
iptables -A INPUT -p tcp --dport 80 -s 193.0.0.193 -i eth0 -j DROP
Можно также использовать символ отрицания !
Блокируем все подключения по 80 порту tcp отовсюду кроме сети 192.168.0.0/16
iptables -A INPUT -p tcp 80 -s ! 192.168.0.0/16 -j DROP
Настраиваем NAT через iptables имея постоянный внешний адрес
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o eth1 -j SNAT 193.0.0.193
Где
-o или –out-interface
-t nat имя таблицы (используется для NAT, в примерах ранее мы ее не указывали и все передавалось в таблицу filter)
-A POSTROUTING имя цепочки, в нее попадают пакеты после проходждения всех других адресов
-j SNAT Source Network Address Translation и указан адрес с которого отправятся пакеты в мир
Настраиваем NAT не имея постоянного внешнего адреса (iptables MASQUERADE)
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.0/16 -j MASQUERADE
Все пакеты которые будут выходить через интерфейс eth1 и берут адрес для отNATчивания с этого интерфейса.
Также вам потребуется включенный net.ipv4.ip_forward = 1
(в моем устройстве со встроенным Linux это прописано как echo 1 > /proc/sys/net/ipv4/ip_forward)
Для более подробного изучения рекомендую прочитать Iptables Tutorial



