Назад | Перейти на главную страницу

iptables: разница между пакетами NEW, ESTABLISHED и RELATED

Часть брандмауэра на сервере:

iptables -A INPUT -p tcp --dport 22 -m state NEW --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 100 --hitcount 10 -j DROP

Когда я ищу в Интернете, я всегда вижу, что в этом правиле используется NEW, но мне трудно понять, почему не используются ESTABLISHED и RELATED.

Как это :

iptables -A INPUT -p tcp --dport 22 -m state NEW,ESTABLISHED,RELATED --state -m recent --set

iptables -A INPUT -p tcp --dport 22 -m state --state NEW,ESTABLISHED,RELATED -m recent --update --seconds 100 --hitcount 10 -j DROP

Может ли кто-нибудь объяснить мне, когда именно НОВЫЙ пакет меняется на УСТАНОВЛЕННЫЙ и СВЯЗАННЫЙ?

Считайте НОВЫЙ пакет телефонным звонком до того, как трубка сняла трубку. Пакет ESTABLISHED - это их «Привет». И СВЯЗАННЫЙ пакет был бы, если бы вы звонили, чтобы сообщить им об электронном письме, которое вы собирались им отправить. (СВЯЗАННОЕ электронное письмо.)

Если моя аналогия не так хороша, я лично считаю, что справочные страницы справляются с этим хорошо:

НОВОЕ - означает, что пакет начал новое соединение или иным образом связан с соединением, которое не встречало пакетов в обоих направлениях, и

ESTABLISHED - означает, что пакет связан с соединением, которое принимает пакеты в обоих направлениях,

СВЯЗАННЫЙ - означает, что пакет начинает новое соединение, но связан с существующим соединением, например с передачей данных FTP или ошибкой ICMP.

iptables (8) - справочная страница Linux

Суммирование для сервера и клиента ограничительного INPUT и открыть OUTPUT, то есть:

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT

И из iptables-расширения (8) на примере FTP в активном режиме:

1. НОВИНКА

НОВОЕ Пакет начал новое соединение или иным образом связан с соединением, которое не встречало пакетов в обоих направлениях.

Клиент на порту 50000 (любой случайный непривилегированный порт) подключается к FTP-серверу через порт 21, серверу потребуется как минимум это, чтобы принять это входящее соединение:

iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT

2. СОЗДАНО

УСТАНОВЛЕН Пакет связан с соединением, которое принимает пакеты в обоих направлениях.

Теперь на стороне клиента он открыл исходящее соединение с сервером на порту 21 используя локальный порт 50000 и ему нужны следующие iptables, чтобы разрешить получение ответа от server (21) к client (50000):

sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

3. СВЯЗАННЫЕ

СВЯЗАННО Пакет запускает новое соединение, но связан с существующим соединением, например с передачей данных FTP или ошибкой ICMP.

Теперь, после того, как FTP-соединение установлено и будет выполнено соединение для передачи данных, клиент откроет сокет сервера (да, при активном FTP-клиент становится сервером для соединения для передачи данных) на порту 60000 (насколько я понимаю, клиент отметит этот порт 60000 так как RELATED к другому соединению от 50000->21) и отправит этот номер порта на сервер через FTP. PORT команда. Затем FTP-сервер откроет новое соединение со своего порта. 20 портировать 60000 на клиенте, и теперь клиенту требуется следующее, чтобы это новое соединение было успешным:

sudo iptables -A INPUT -m state --state RELATED -j ACCEPT

Наконец, чтобы это работало, вам нужно включить ip_conntrack_ftp модуль ядра, позволяющий системе отмечать соединения / пакеты как RELATED (это я так понимаю, я не слишком много копался в этом):

modprobe ip_conntrack_ftp