Часть брандмауэра на сервере:
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.
Суммирование для сервера и клиента ограничительного 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