Мне нужно создать новую цепочку для обработки определенного IP-адреса, скажем 192.168.0.101.
В этой новой цепочке этот IP-адрес будет иметь доступ ко всем сервисам, кроме FTP.
Мое решение:
iptables -N IP1
iptables -A IP1 -p tcp --dport 20 -j DROP
iptables -A IP1 -p tcp --dport 21 -j DROP
iptables -A IP1 -j ACCEPT
iptables -A INPUT -s 192.168.0.101 -j IP1
Решение правильное? Требуются ли для входящих пакетов два правила с --sport 20, 21?
Предложенные вами правила должны работать, но могут быть случаи, когда DROP в цепочке не является правильным действием.
Например, если вам нужно какое-то более позднее правило INPUT
chain, чтобы разрешить ftp-доступ к определенному месту назначения для всех хостов в вашей сети.
В этом случае RETURN
может быть лучшим выбором. Предполагая, что политика вашей цепочки INPUT DROP
это, вероятно, также даст те же результаты.
iptables -A IP1 -p tcp --dport 20 -j RETURN
iptables -A IP1 -p tcp --dport 21 -j RETURN
iptables -A IP1 -j ACCEPT
Мне нравятся твои команды.
--sport
будет для исходного порта (тот, который клиент подключает из), который часто рандомизируется. --dport
правильно. Напомним, что соединение представляет собой набор из 4 кортежей, состоящий из адреса источника, порта источника, адреса назначения и порта назначения - iptables воздействует на набор из 4 элементов в пакете, который он видит.
Одна интересная особенность FTP заключается в том, что в пассивном режиме клиент и сервер согласовывают новый номер порта. Кроме того, я считаю, что порт 20 используется для подключения в место назначения файла независимо от того, какой сервер находится в контрольном соединении, но в этом случае не помешает заблокировать его.