nat iptables

Установка

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 позволяющий изменить адрес назначения пакета до того как он пройдет маршрутизацию. Применяется для обеспечения доступа к службам внутри сети из внешних сетей.
Для создания проброса вам нужно определиться с:

  1. Какой протокол уровня приложений вы будете транслировать, а значит и порты и протоколы транспортного уровня
  2. На каком интерфейсе вы будете ожидать запроса
  3. На какой адрес вы будете его перенаправлять
    После чего создаете правило в таблице 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 

Включение логирования трафика

  1. Выберите цепочку с которой планируете работать: INPUT, OUTPUT, FORWARD, PREROUTING и POSTROUTING
  2. Примените правило:
# Для всего трафика
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