Лабораторная работа
Фильтрация сетевого трафика в 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
Параметры пакетов
Итак, по каким параметрам можно фильтровать пакеты:
Источник пакета
Для фильтрации по источнику используется опция -s. Например, запретим все входящие пакеты с узла 192.168.133.133:
iptables -A INPUT -s 192.168.133.133 -j DROP
Можно использовать доменное имя для указания адреса хоста, то есть:
iptables -A INPUT -s test.host.jp -j DROP
Также можно указать целую подсеть (т.е. диапазон адресов):
iptables -A INPUT -s 192.168.133.0/24 -j DROP
Вы можете использовать отрицание (знак!). Например, все пакеты с хостов, отличных от 192.168.133.156 будут уничтожаться:
iptables -A INPUT! -s 192.168.133.156 -j DROP
Адрес назначения
Для этого нужно использовать опцию -d. Например, запретим все исходящие пакеты на хост 192.168.156.156:
iptables -A OUTPUT -d 192.168.156.156 -j DROP
Как и в случае с источником пакета, можно использовать адреса подсети и доменные имена. Отрицание также работает.
Протокол
Опция -p указывает на протокол. Можно использовать all, icmp, tcp, udp или номер протокола (из файла /etc/protocols).
Порт источника
Указывает на порт, с которого был прислан пакет. Синтаксис такой:
iptables -A INPUT -p tcp --sport 80 -j ACCEPT
Для указания порта необходимо указать протокол (tcp или udp). Можно использовать отрицание.
Порт назначения
Порт назначения. Синтаксис: iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Как и в случае с портом источника, нужно указать протокол. Можно использовать отрицание.
Пакеты установления ТСР-соединения
Опция –p tcp --syn дает возможность применять правила только к TCP пакетам с флагом SYN (пакетам установления соединения). Например, с целью запретить устанавливать соединение с некоторым портом. И обратное, опция –p tcp! --syn означает все пакеты, кроме пакетов установления соединения.