Linux Firewall: команды и подсказки

Main

Оценка: 95.59% - 20 Голосов

Общая

Статья из себя представляет простейшее руководство к работе с IPTables в Linux

Все примеры выполняются в Debian

iptables — утилита командной строки, является стандартным интерфейсом управления работой межсетевого экрана Linux. Для использования утилиты iptables требуются привилегии суперпользователя (root).

Разные сервисы используют разные протоколы:

iptables используется для работы с IP версии 4;

ip6tables используется для работы с IP версии 6;

arptables используется для работы с ARP;

ebtables используется для работы с Ethernet-кадрами.

Последние два сервиса не идут по умолчанию в Debian. Для их установки вводим apt install arptables ebtables

В системе имеется 6 таблиц:

1. NAT - Предназначена для операций преобразования сетевых адресов и портов обрабатываемых пакетов;

2. Filter - Предназначена для фильтрации трафика, то есть разрешения и запрещения пакетов и соединений;

3. Mangle - Предназначена для операций по классификации и маркировке пакетов и соединений, а также модификации заголовков пакетов;

4. Security - Предназначена для изменения маркировки безопасности (меток SELinux) пакетов и соединений;

5. RAW - Предназначена для выполнения действий с пакетами до их обработки системой conntrack;

6. RAWPOST - предназначена для выполнения операций преобразования адресов без использования информации о соединениях, которые не могут быть реализованы в рамках таблицы raw, а именно, для операции маскарадинга.

 

Каждая таблица имеет цепочки схожие по названию, но разные по назначению:

  NAT Filter Mangle Security RAW RAWPOST
INPUT - эта цепочка обрабатывает трафик, поступающий непосредственно самому хосту позволяет модифицировать пакет, предназначенный самому хосту эта цепочка обрабатывает трафик, поступающий непосредственно самому хосту  -  -
OUTPUT через эту цепочку проходят пакеты, сгенерированные процессами самого хоста эта цепочка позволяет фильтровать трафик, исходящий от самого хоста позволяет модифицировать пакеты, исходящие от самого хоста эта цепочка позволяет обрабатывать трафик, исходящий от самого хоста аналогично для пакетов, сгенерированных самим хостом  -
FORWARD - позволяет фильтровать транзитный трафик цепочка, позволяющая модифицировать транзитные пакеты через эту цепочку проходит транзитный трафик  -  -
PREROUTING в эту цепочку пакеты попадают до принятия решения о маршрутизации. По сути, термин «решение о маршрутизации» подразумевает деление трафика на входящий и транзитный  - позволяет модифицировать пакет до принятия решения о маршрутизации  - в эту цепочку входящие пакеты попадают раньше, чем в любую другую из цепочек iptables, и до обработки их системой conntrack  -
POSTROUTING через эту цепочку проходят все исходящие пакеты, поэтому именно в ней целесообразно проводить операции маскарадинга  - дает возможность модифицировать все исходящие пакеты, как сгенерированные самим хостом, так и транзитные  -  - обрабатывает весь исходящий трафик

 

Так же каждая таблица имеет разные действия:

1. Действия для таблицы NAT:

Действие Описание
MASQUERADE подменяет адрес источника для исходящих пакетов адресом того интерфейса, с которого они исходят, то есть осуществляет маскарадинг. Такая операция позволяет, например, предоставлять доступ в Интернет целым локальным сетям через один шлюз.
SNAT работает аналогично MASQUERADE, однако позволяет указать адрес «внешнего» интерфейса
DNAT подменяет адрес назначения для входящих пакетов, позволяя «пробрасывать» адреса или отдельные порты внутрь локальной сети
REDIRECT подменяет номер порта в TCP- или UDP-пакете, а также подменяет адрес назначения на свой собственный
SAME в зависимости от цепочки (PREROUTING или POSTROUTING) может работать как DNAT или SNAT
NETMAP позволяет «пробросить» целую сеть

2. Действия для таблицы Filter:

Действие Описание
ACCEPT пропуск пакета
REJECT заблокировать пакет и сообщить его источнику об отказе
DROP заблокировать пакет, не сообщая источнику об отказе
STEAL аналогично DROP, но в случае использования в цепочке OUTPUT при блокировании исходящего пакета не сообщает об ошибке приложению, пытавшемуся отправить этот пакет
TARPIT «подвесить» TCP-соединение. Используется лишь в самых крайних случаях, например, при борьбе с DoS-атаками
DELUDE создать видимость открытого TCP-порта
CHAOS для каждого нового TCP-соединения случайно выбрать одно из двух действий. Первое из них — REJECT, второе, в зависимости от выбранной опции, либо TARPIT (--tarpit), либо DELUDE (--delude)

3. Действия для таблицы Mangle:

Действие Описание
TOS изменяет поле TOS данного пакета
DSCP изменяет поле DSCP (класс DiffServ) в заголовке пакета
TTL изменяет поле TTL данного пакета
HL изменяет поле Hop Limit в заголовке IPv6-пакета
MARK устанавливает или изменяет маркировку пакета
CONNMARK устанавливает или изменяет маркировку соединения
CLASSIFY устанавливает CBQ-класс пакета для его последующей обработки шейпером
TCPMSS устанавливает максимальный размер TCP-сегмента
ECN обеспечивает обнуление ECN-битов (флаги CWR и ECE) в TCP-заголовке
TCPOPTSTRIP выполняет удаление заданных TCP-опций из заголовка TCP-пакета
TPROXY реализует механизм полностью прозрачного проксирования

4. Действия для таблицы Security:

Действие Описание
SECMARK устанавливает для пакета контекст безопасности SELinux
CONNSECMARK позволяет скопировать контекст безопасности SELinux с отдельного пакета на соединение в целом

5. Действия для таблицы RAW:

Действие Описание
NOTRACK позволяет предотвратить обработку пакетов системой conntrack
CT позволяет задать различные настройки conntrack, в соответствии с которыми будет обрабатываться соединение, открытое данным пакетом
RAWDNAT позволяет выполнять «проброс» адресов и портов «сырым» методом — без использования системы conntrack, то есть без учета состояний соединений

6. Действия для таблицы RAWPOST:

Действие Описание
RAWSNAT позволяет выполнить операцию «сырой» подмены исходного адреса

 

Работа с службой IPTables:

В Debian-like системах работа с службой не отличается ничем от работы с любой другой службой


service iptables start/stop/restart

 

Автозапуск при старте системы:


update-rc.d iptables defaults

 

Проверяем доступность портов:


netstat -tulpn

 

Проверяем одоступность определенного порта:


netstat -tulpn | grep :53

 

Проверим, что iptables разрешает соединение с 53 портом:


iptables -L INPUT -v -n | grep 53

 

Отображение имеющихся правил:


iptables -n -L -v --line-numbers

 

Отображение имеющихся правил в нужной таблице:


iptables -L INPUT -n --line-numbers
iptables -L OUTPUT -n --line-numbers

 

Удаление всех записей таблиц:


iptables -F

 

Пример удаления 3 номера записей таблиц:


iptables -D INPUT 3

 

Пример вставки записи OUTPUT между 2 и 3 номерами:


iptables -I OUTPUT 3 -s ipaddress -j DROP

 

Пример блокировки определенного IP-адреса:


iptables -A INPUT -s 1.2.3.4 -j DROP

 

Пример блокировки входящего порта:


iptables -A INPUT -p tcp --dport 80 -j DROP

 

Пример блокировки входящего порта от определенного IP-адерса:


iptables -A INPUT -p tcp -s 1.2.3.4 --dport 80 -j DROP

 

Блокировка доступа к определенной сети:


iptables -A OUTPUT -p tcp -d 1.2.3.0/24 -j DROP

 

Запрет ICMP запросов:


iptables -A INPUT -p icmp --icmp-type echo-request -j DROP

 

Пример открытия диапазона портов:


iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 5000:6000 -j ACCEPT

 

Пример открытия портов разных служб:
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -m state --state NEW -p udp --dport 123 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -m state --state NEW -p udp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

Для их закрытия достаточно заменить ACCEPT на DROP

Более подробная информация доступна тут.

Добавить комментарий


Logo