Разрешить определенный порт через iptables

Разрешить определенный порт через iptables

Я новичок в iptables. Я создал скрипт, который сбрасывает (reset.sh) iptables, а другой скрипт (ip-chains.sh) создает цепочки, подобные цепочкам ввода-вывода. В том же scipr (ip-chains.sh) внизу я создал правило, чтобы просто проверить, разрешающее входящий и исходящий порт 2121, который я использую для FTP.

Проблема в том, что когда я запускаю скрипт сброса, я могу получить доступ к FTP-серверу, но когда я запускаю скрипт ip-chains.sh, я не могу. Я в замешательстве, потому что у меня есть правило в том же файле скрипта, разрешающее трафик на порт 2121.

Я использую eth1 для подключения к FTP-серверу 192.168.1.0 и eth2 для подключения к клиентской машине. Вот мой скрипт ip-chains.sh:

    #!/bin/bash

#Flush tables and set policies to drop

iptables -F

iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#Create Logging Chain for accepted packets on INPUT CHAIN

iptables -N accept-input

#Rules for  accept-input chain

iptables -A accept-input -j LOG --log-prefix "INPUT-ACCEPTED "
iptables -A accept-input -j ACCEPT

#Create Logging Chain for dropped packets on INPUT CHAIN

iptables -N drop-input

#Rules for  drop-input chain

iptables -A drop-input -j LOG --log-prefix "INPUT-DROPPED "
iptables -A drop-input -j DROP

#Create Logging Chain for accepted packets on OUTPUT CHAIN

iptables -N accept-output

#Rules for  accept-output chain

iptables -A accept-output -j LOG --log-prefix "OUTPUT-ACCEPTED "
iptables -A accept-output -j ACCEPT

#Create Logging Chain for dropped packets on OUTPUT CHAIN

iptables -N drop-output

#Rules for  drop-output chain

iptables -A drop-output -j LOG --log-prefix "OUTPUT-DROPPED "
iptables -A drop-output -j ACCEPT


#Allow port 2121

iptables -A INPUT -i eth1 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth1 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input

iptables -A INPUT -i eth2 -p tcp -s 0/0 --dport 2121 -m state --state NEW,ESTABLISHED,RELATED -j accept-input
iptables -A OUTPUT -o eth2 -p tcp -d 0/0 --sport 2121 -m state --state ESTABLISHED,RELATED -j accept-input

#Log all DROPPED traffic

iptables -A INPUT -j drop-input
iptables -A OUTPUT -j drop-output

iptables -L -n

решение1

Будьте осторожны, когда вы сбрасываете свои правила, iptables -Fвы сбрасываете все свои правила, но не свою политику! Так что если вы это сделаете, policy DROPвы можете легко оказаться заблокированными в своей системе!

Обычно безопаснее установить policy ACCEPTкак DROPпоследнее правило цепочки. Или пока вы работаете удаленно с вашим брандмауэром, настройте cronзадание на установку policy ACCEPTи iptables -Fкаждые пять или десять минут; таким образом вы наверняка будете иметь доступ к своей системе в любом случае.

В вашем скрипте есть iptables -p FORWARD DROPи нет правил от eth1до eth2и наоборот. Вам нужно установить iptables -p FORWARD ACCEPTили добавить некоторые правила в цепочку вперед, чтобы решить вашу проблему, например:

iptables -A FORWARD -p tcp -i eth1 -o eth2 -s 2121 -d 2121 -j ACCEPT;
iptables -A FORWARD -p tcp -i eth2 -o eth1 -s 2121 -d 2121 -j ACCEPT;

решение2

используйте -v, чтобы увидеть, куда попали пакеты...

iptables --list -n -v

Связанный контент