Debian Ubuntu iptables настройка
Для настройки правил iptables существуют различные виды таблиц:
Mangle –для изменения заголовков пакетов
Nat – необходима для настройки трансляции сетевых адресов.
Filter – в данной таблице указываются правила для фильтрации трафика. Данная таблица задействована по умолчанию.
Для настройки маршрутизации пакетов используем таблицу Filter
В таблицах присутствуют цепочки и действия.
основные цепочки:
FORWARD — для проходящих через данную машину пакетов.
OUTPUT – цепочка для исходящих пакетов.
INPUT – цепочка для входящих пакетов
действия:
ACCEPT – пакет пропускается
DROP – пакет не пропускается
REJECT – отклонение пакета с уведомлением отправителю
iptables [-t table] command [match] [target/jump]
Добавление правила:
iptables -A INPUT rule_name
В данном случае правило добавляется в цепочку для входящих пакетов таблицы Filter
ключи:
— p, --protocol
Указывается тип протокола из /etc/protocols
Примеры:
iptables -A INPUT -p tcp
iptables -A INPUT -p udp
— s, --source
IP-адрес(а) источника пакета
Примеры:
iptables -A INPUT -s 192.168.100.1
iptables -A INPUT -s 192.168.100.0/100 #диапазон адресов
— d, --destination
IP-адрес(а) получателя
Примеры:
iptables -A INPUT -d 192.168.200.1
iptables -A INPUT -d 192.168.200.0/100 #диапазон адресов
— i, --in-interface
Интерфейс с которого был получен пакет
Пример:
iptables -A INPUT -i eth0
— o, --out-interface
Интерфейс с которого пакет отправлен
Пример
iptables -A OUTPUT -o eth0
— sport, --source-port
Порт с которого был отправлен пакет
Пример
iptables -A INPUT -p tcp --sport 80
— dport, --destination-port
Порт на который адресован пакет
Пример:
iptables -A INPUT -p tcp --dport 22
— tcp-flags
tcp флаги которые следует проверить и флаги которые должны быть установлены
Пример
iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
— syn
аналогичен --tcp-flags SYN,ACK,FIN SYN и поэтому для установки правила используется с протоколом tcp
Пример
iptables -p tcp –syn
— state
iptables -A INPUT -m state --state NEW,ESTABLISHED
Проверяется состояние соединения:
NEW – пакеты инициирующие новое соединение
ESTABLISHED – пакеты, принадлежащие к уже установленному соединению
INVALID – пакет связан с неизвестным соединением или содержит ошибку в заголовке
RELATED – пакет принадлежит к существующему соединению, но при этом открывает новое соединение.
Примеры правил:
Открываем 80 порт
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
Разрешение входящих пакетов для loopback адаптер:
# iptables -A INPUT -i lo -j ACCEPT
Разрешаем трафик с IP адреса 192.168.1.99
# iptables -A INPUT -p tcp –source 192.168.1.99 -j ACCEPT
Проверка правил
iptables -L -n -v --line-numbers
Для удаления 11 правила в цепочке INPUT
# iptables -D INPUT 11
Для многократного использования настроек iptables необходимо поместить их в скрипт.
Пример скрипта:
#!/bin/bash #Сбрасываем текущие настройки iptables /sbin/iptables -F #Политики маршрутизации по умолчанию /sbin/iptables -P INPUT DROP /sbin/iptables -P FORWARD ACCEPT /sbin/iptables -P OUTPUT ACCEPT #Разрешение трафик через loopback адаптер /sbin/iptables -A INPUT -i lo -j ACCEPT #Разрешение пакетам создающим новые tcp и udp соединения /sbin/iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT /sbin/iptables -A INPUT -p udp -m state --state RELATED,ESTABLISHED -j ACCEPT #Открываем необходимые порты /sbin/iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT /sbin/iptables -A INPUT -i eth0 -p tcp --dport 443 -j ACCEPT
Для запуска скрипта с настройками iptables при старте системы помещаем его в /etc/network/if-up.d/
Даем права на выполнение:
# chmod +x /etc/network/if-up.d/iptables
Запрет Icmp-сообщений.
Хорошей практикой также является запрет ICMP-сообщений, которые могут выдать дополнительную информацию о хосте или быть использованы для выполнения различных злонамеренных действий (например, модификации таблицы маршрутизации). Ниже приведена таблица со списком возможных типов ICMP-сообщений:
Типы ICMP-сообщений.
3 — destination unreachable (адресат недосягаем)
4 — source quench (подавление источника, просьба посылать пакеты медленнее)
5 — redirect (редирект)
8 — echo request (echo-запрос, пинг)
9 — router advertisement (объявление маршрутизатора)
10 — router solicitation (ходатайство маршрутизатора)
11 — time-to-live exceeded (истечение срока жизни пакета)
12 — IP header bad (неправильный IPзаголовок пакета)
13 — timestamp request (запрос значения счетчика времени)
14 — timestamp reply (ответ на запрос значения счетчика времени)
15 — information request (запрос информации)
16 — information reply (ответ на запрос информации)
17 — address mask request (запрос маски сети)
18 — address mask reply (ответ на запрос маски сети)
Как видишь, ответ на некоторые ICMP-сообщения может привести к разглашению некоторой информации о хосте, в то время как другие — привести к модификации таблицы маршрутизации, поэтому их необходимо запретить.
Обычно выход во внешний мир разрешают ICMP-сообщениям 0, 3, 4, 11 и 12, в то время как на вход принимают только 3, 8 и 12. Вот как это реализуется в различных брандмауэрах:
Запрет опасных ICMP-сообщений.
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 12 -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 3 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 4 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 11 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 12 -j ACCEPT
При желании ты можешь запретить весь ICMPтрафик, включая пинг-запросы, но это может повлиять на корректность работы сети.