Продолжаем знакомство с iptables на примере вывода и удаления правил.
В предыдущей статье мы изучили основные команды файрвола iptables и написали первые правила. В этой статье мы продолжим знакомство с утилитой iptables, необходимой для настройки межсетевого экрана в большинстве операционных систем Linux. Утилита управляет встроенным в ядро брендмауэром netfilter. Netfilter является важным компонентом в обеспечении сетевой безопасности ОС семейства Linux. Более подробно об основных понятиях iptables вы можете почитать тут. В статье рассмотрим, как выводить, читать правила iptables, а также удалять их. Что будет освящено в этой статье:
- вывод списка правил iptables
- сброс счетчиков iptables
- удаление правила
- удаление цепочки правил
Все действия будем проводить в ОС Ubuntu 20.04.
Вывод списка правил iptables
Утилита iptables позволяет нам выводить список правил в двух форматах – в построчном и табличном.
Построчный вывод
Для вывода правил в виде последовательности строк используем команду:
user@ruvds-0hrc0:~# sudo iptables -S
В зависимости от имеющихся на сервере правил вывод может отличаться. В нашем случае он такой:
-P INPUT DROP -P FORWARD DROP -P OUTPUT ACCEPT -N ICMP -N TCP -N UDP -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A INPUT -i lo -j ACCEPT
Если нам надо отфильтровать вывод и вывести, например, все правила iptables, регламентирующие установление TCP-соединений, используем команду:
user@ruvds-0hrc0:~# sudo iptables -S TCP
Табличный вывод
Для табличного вывода вызываем утилиту с ключом -L:
user@ruvds-0hrc0:~# sudo iptables -L
Chain INPUT (policy ACCEPT) target prot opt source destination ПРАВИЛА ЦЕПОЧКИ INPUT Chain FORWARD (policy ACCEPT) target prot opt source destination ПРАВИЛА ЦЕПОЧКИ FORWARD Chain OUTPUT (policy ACCEPT) target prot opt source destination ПРАВИЛА ЦЕПОЧКИ OUTPUT
В выводе видим все правила, разбитые в блоки по цепочкам.Как видим, вывод в виде таблицы более информативный и удобен для чтения.
Чтобы вывести правила конкретной цепочки, указываем ее имя после команды. Получим все правила базовой цепочки INPUT:
user@ruvds-0hrc0:~# sudo iptables -L INPUT
Давайте на этом примере рассмотрим, как читать эти правила.
Сперва идет имя самой цепочки – в нашем случае это INPUT. Цепочка может быть базовой (PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING) и пользовательской (имя цепочки задается самим пользователем). После следует политика, применяемая к этой цепочке по умолчанию – DROP. Далее непосредственно сами правила, разбитые по заголовкам. Рассмотрим эти заголовки:
- target: тут указано основное действие, которое будет применено к пакету, если он попал под это правило. Базовые действия, доступные для всех цепочек: ACCEPT (разрешить), DROP (отбросить), QUEUE (перенаправить на анализ внешней утилите), и RETURN (вернуть на предыдущую цепочку).
- prot: анализируемый сетевой протокол. Если необходимо проверять трафик по все протоколам – указываем all.
- opt: в этом столбце указываются дополнительные параметры IP
- source: IP-адрес или подсеть отправителя (anywhere – отправитель с любым адресом)
- destination: IP-адрес или подсеть получателя (anywhere – любой адрес получателя)
- последний столбец без названия необходим для указания дополнительных опций правила (уточнение номера порта, сброс состояния и т.п.)
Сброс счетчика пакетов и их размера
Для начала разберем как вывести эти параметры, а потом рассмотрим, как их сбросить и для чего это делается.
Чтобы вывести сколько пакетов попали под конкретное правило и их суммарный размер используем команду:
user@ruvds-0hrc0:~# sudo iptables -L INPUT -v
Непосредственно сам сброс счетчиков выполняется командой:
user@ruvds-0hrc0:~# sudo iptables -Z INPUT
Если хотим сбросить счетчик только для первого правила цепочки используем:
user@ruvds-0hrc0:~# sudo iptables -Z INPUT 1
Для обнуления счетчиков и размера для всех цепочек и каждого правила:
user@ruvds-0hrc0:~# sudo iptables -Z
Сброс счетчиков может быть полезен, если необходимо узнать приходит ли попадающий под правила новый трафик на сервер или нет. По умолчанию все счетчики сбрасываются после перезагрузки системы.
Удаление правил iptables
Приведем различные способы удаления правил iptables.
Удаление по имени правила.
В этом случае используется ключ -D после которого следует имя правила в виде строки. Имя правила узнаем при помощи команды, рассмотренной выше:
user@ruvds-0hrc0:~# sudo iptables -S
Допустим в данном выводе мы нашли правило
-A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
и которое подлежит удалению.
Для этого введем:
iptables -D INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
Обратите внимание, что ключ -A при удалении правила не указывается.
Удаление по номеру правила в цепочке.
Для удаления этим способом нам необходимо знать название цепочки, к которой принадлежит правило и его порядковый номер в ней. Все это определяется командой:
user@ruvds-0hrc0:~# sudo iptables -L --line-numbers
Chain INPUT (policy DROP) num target prot opt source destination 1 ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED 2 ACCEPT all -- anywhere anywhere 3 DROP all -- anywhere anywhere ctstate INVALID 4 UDP udp -- anywhere anywhere ctstate NEW 5 TCP tcp -- anywhere anywhere tcp flags:FIN,SYN,RST,ACK/SYN ctstate NEW 6 ICMP icmp -- anywhere anywhere ctstate NEW 7 REJECT udp -- anywhere anywhere reject-with icmp-port-unreachable
user@ruvds-0hrc0:~# sudo iptables -D ИМЯ ЦЕПОЧКИ НОМЕР
Например, удалим привило с номером 5 в цепочке INPUT:
user@ruvds-0hrc0:~# sudo iptables -D INPUT 5
Удаление всех правил iptables
Мы можем удалить все правила в пределах одной цепи. Для этого используется ключ -F. Например, удалим все правила цепочки INPUT:
user@ruvds-0hrc0:~# sudo iptables -F INPUT
Для удаления правил во всех цепочках вводим команду:
user@ruvds-0hrc0:~# sudo iptables -F
Заключение
В этой статье мы продолжили изучение базовой утилиты сетевой безопасности iptables, научившись выводить, читать и удалять правила iptables, а также производить сброс счетчика пакетов.