Начисление как для сервера, так и для клиента ограничительное INPUT
и открытое OUTPUT
, то есть:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
И из iptables-extensions (8) на примере FTP в активном режиме:
1. НОВЫЙ
NEW Пакет установил новое соединение или иным образом связан с соединением, которое не видело пакеты в обоих направлениях.
Клиент на порту 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