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-сообщений.

0 — echo reply (echo-ответ, пинг)
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трафик, включая пинг-запросы, но это может повлиять на корректность работы сети.

Понравилась статья, расскажи о ней друзьям, нажми кнопку!