
Лабораторная работа Фильтрация сетевого трафика в iptables
В общем случае правила фильтрации могут использовать любые данные заголовков IP (IP-адреса источника и получателя), ICMP (type и code), UDP (порт - источник и порт – получатель), TCP (порт – источник, порт-получатель, флаги), MAC (MAC- адрес источника и получателя). Кроме того, правила фильтрации могут учитывать входной и выходной интерфейс обрабатываемого пакета.
Если обрабатываемый пакет удовлетворяет правилу фильтрации, к нему применяется «действие» (передать пакет дальше, сбросить пакет, сбросить пакет и направить источнику пакета icmp-сообщение, записать сигнатуру пакета пакет в Log). Политика фильтрации трафика может иметь строгий (запрещено все, что не разрешено явно) или не строгий характер (разрешено все, что явно не запрещено).
За фильтрацию пакетов в iptables отвечают 3 цепочки правил: INPUT, OUTPUT и FORWARD.
INPUT – пакеты, предназначающиеся Вашему узлу. То есть входящий трафик. Транзитный трафик сюда не попадает.
FORWARD – пакеты, которые предназначены для другого узла, то есть транзитный трафик.
OUTPUT - пакеты, которые уходят от узла, или исходящий трафик. Транзитный трафик сюда не попадает.
*Для передачи транзитного трафика возможно вам потребуется включить функцию маршрутизации в ядре net.ipv4.ip_forward = 1
(в Linux это делается как echo 1 > /proc/sys/net/ipv4/ip_forward)
Правила в цепочках просматриваются в порядке их следования, поэтому правила фильтрации следует вводить от частных к общим. После того, как будет найдено правило, удовлетворяющее рассматриваемому пакету, к данному пакету применяется соответствующее «действие» и последующие правила не рассматриваются.
Практически все правила можно привести к виду:
iptables -t ТАБЛИЦА -A ЦЕПОЧКА ПАРАМЕТРЫ_ПАКЕТА -j ДЕЙСТВИЕ
Создание правил
Работают с цепочками так: iptables <опция> <цепочка>
Для работы с цепочками предусмотрены следующие опции:
-A - добавление нового правила в цепочку. Правило будет добавлено в конец цепочки:
iptables -A INPUT --dport 80 -j DROP
iptables -A INPUT --dport 80 -j ACCEPT
-I - добавление правила не в конец цепочки,а туда куда вы укажите. Например, команда iptables –I INPUT 2 bla-bla-bla - сделает данное правило вторым.
-D (-delelte) - удаление правила. Например, для удаления пятого правила введите: iptables –D INPUT 5
-R (-replace) – заменить одно правило другим
iptables -R INPUT 1 -s 193.0.0.193 -j DROP (меняем первое правило в списке)
-F (-flash)- сброс правил (iptables –F INPUT – очистить все правила конкретной цепочки или iptables –F – сброс всех правил).
-N - создание пользовательской цепочки. Если не хотите создавать кашу в каждой цепочке, то создайте несколько дополнительных цепочек. Синтаксис такой: iptables –N ЦЕПОЧКА. Только русские буквы, конечно, использовать нельзя.
-X - удаление пользовательской цепочки.
-L - просмотр список правил цепочки
Например, iptables –L или iptables –L INPUT или iptables -L -n –v, где
-n не транслировать IP-адреса в DNS
-v, –verbose более информативный вывод
–line-numbers вывести нумерацию строк
*Удалить цепочки INPUT, OUTPUT и FORWARD нельзя. Если удалить все правила в такой цепочке, то цепочка окажется пустой.
*Для сохранения и восстановления цепочек правил iptables в инсталяционом пакете обычно имеется 2 скрипта:
iptables-save > /path/to/iptables
iptables-restore < /path/to/iptables