Установка
apt install iptables-persistent- Вылезет псевдографика просто нажимайте Enter
Настройка
Параметры фильтрации трафика
Правила iptables имеют следующий вид: -A [Цепочка] <Параметры> -j [Действие]. Разберем необходимые нам параметры iptables:
- -p - протокол, допустимые параметры: icmp, tcp, udp
- —dport - порт, от 0 до 65535
- -m multiport - позволяет в опции —dport указать несколько портов через запятую
- -s - исходная сеть (т.е сеть из которой пришел пакет), допустимые параметры: `[адрес сети]/маска сети и для узла сети: [адрес узла сети]
- -d - удаленная сеть (т.е сеть в которую направлен пакет), параметры те же что и для прошлого параметра
- -i - входящий интерфейс, интерфейс на устройстве с которого получен пакет
- -o - исходящий интерфейс, интерфейс с которого планируется отправка пакета после маршрутизации
Действия для правила
Если все параметры подходят под параметры пакета, то с пакетом будет произведено действие описанное в параметре: -j, вот список необходимых действий:
- ACCEPT - разрешить прохождение пакета дальше по цепочке правил;
- DROP - удалить пакет;
- REJECT - отклонить пакет, отправителю будет отправлено сообщение, что пакет был отклонен;
- LOG - сделать запись о пакете в лог файл;
Настройка NAT
iptables -t nat -A POSTROUTING -o ens7 -j MASQUERADE
iptables -t nat -A POSTROUTING -o ens8 -j MASQUERADE
iptables-save > /etc/iptables/rules.v4Настройка проброса портов
Проброс портов (Port Forwarding) - механизм NAT позволяющий изменить адрес назначения пакета до того как он пройдет маршрутизацию. Применяется для обеспечения доступа к службам внутри сети из внешних сетей.
Для создания проброса вам нужно определиться с:
- Какой протокол уровня приложений вы будете транслировать, а значит и порты и протоколы транспортного уровня
- На каком интерфейсе вы будете ожидать запроса
- На какой адрес вы будете его перенаправлять
После чего создаете правило в таблице nat и цепочке PREROUTING:
iptables -t nat -A PREROUTING -i [интерфейс] -p [протокол] --dport [порт] -j DNAT --to-destination [Адрес сервера на который происходит перенаправление]Настройка PAT
В простейшем случае достаточно указать исходящий интерфейс (который смотрит в глобальную сеть, обычно) и действие MASQUERADE. Но правильнее будет явно ограничить список сетей, устройствам которых можно выходить в глобальную сеть.
# Базовый вариант
iptables -t nat -A POSTROUTING -o [Название исходящего интерфейса ] -j MASQUERADE
# Расширенный вариант
iptables -t nat -A POSTROUTING -s [Адрес сети]/[Префикс] -o [Название исходящего интерфейса ] -j MASQUERADE Включение логирования трафика
- Выберите цепочку с которой планируете работать: INPUT, OUTPUT, FORWARD, PREROUTING и POSTROUTING
- Примените правило:
# Для всего трафика
iptables -A INPUT -j LOG --log-prefix "INPUT packet: "
# Только для SSH трафика с указанием уровня логирования
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH attempt: " --log-level 4Отслеживание соединений
Отслеживание соединений iptables осуществляет на основании их состояний
- ESTABLISHED - говорит о том, что это не первый пакет в соединении. Для перехода в это состояние необходимо чтобы узел сети передал пакет и получил на него ответ от другого узла (хоста)
- RELATED - Соединение получает статус RELATED если оно связано с другим соединением, имеющим признак ESTABLISHED.
Разрешение установления соединений для трафика: RELATED,ESTABLISHED
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPTПроверка
iptables-saveПример конфига
*filter
# Запретил input и forward
:INPUT DROP [24:7007]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [3267:1774257]
# открыл доступ к ssh по консоли
-A INPUT -i ens3 -p tcp -m tcp --dport 22 -j ACCEPT
# Включил openvpn, chrony и snmpd
-A INPUT -p udp -m multiport --dports 123,161,323,1194 -j ACCEPT
# Разрешил пинговать
-A INPUT -p icmp -j ACCEPT
# Для принятия SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Разрешил отовсюду DNS, почту и сайт
-A FORWARD -p tcp -m multiport --dports 53,80,143,443,993 -j ACCEPT
-A FORWARD -p udp -m multiport --dports 53,123,323 -j ACCEPT
# Разрешил всё в локальной сети
-A FORWARD -s 192.168.0.0/16 -d 192.168.0.0/16 -p udp -j ACCEPT
-A FORWARD -s 192.168.0.0/16 -d 192.168.0.0/16 -p tcp -j ACCEPT
# Для передачи DNS
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [683:60120]
:INPUT ACCEPT [343:23988]
:OUTPUT ACCEPT [51:8530]
:POSTROUTING ACCEPT [351:34485]
# Проброс портов
-A PREROUTING -i ens7 -p tcp -m multiport --dports 53,80,143,443,993 -j DNAT --to-destination 192.168.2.1
-A PREROUTING -i ens7 -p udp -m multiport --dports 53 -j DNAT --to-destination 192.168.2.1
# Проброс портов
-A PREROUTING -i ens8 -p tcp -m multiport --dports 53,80,143,443,993 -j DNAT --to-destination 192.168.2.1
-A PREROUTING -i ens8 -p udp -m multiport --dports 53 -j DNAT --to-destination 192.168.2.1
# PAT
-A POSTROUTING -o ens7 -j MASQUERADE
-A POSTROUTING -o ens8 -j MASQUERADE
COMMIT
# Completed on Mon Feb 24 01:20:01 2025