Linux Firewall: команды и подсказки
Общая
Статья из себя представляет простейшее руководство к работе с 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
Более подробная информация доступна тут.
- Просмотров: 10621