Bestimmten Port durch iptables zulassen

Bestimmten Port durch iptables zulassen

Ich bin neu bei iptables. Ich habe ein Skript erstellt, das iptables zurücksetzt (reset.sh), und ein anderes Skript (ip-chains.sh) erstellt Ketten wie Eingabe-/Ausgabeketten. Im selben Skript (ip-chains.sh) habe ich unten eine Regel erstellt, nur um zu testen, ob eingehender und ausgehender Port 2121 zugelassen wird, den ich für FTP verwende.

Das Problem ist, dass ich beim Ausführen des Reset-Skripts auf den FTP-Server zugreifen kann, beim Ausführen des Skripts ip-chains.sh jedoch nicht. Ich bin verwirrt, weil ich in derselben Skriptdatei die Regel habe, den Datenverkehr auf Port 2121 zuzulassen.

Ich verwende eth1 für die Verbindung zum FTP-Server 192.168.1.0 und eth2 für die Verbindung zum Client-Rechner. Hier ist mein ip-chains.sh-Skript:

    #!/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

Antwort1

Seien Sie vorsichtig, wenn Sie Ihre Regeln löschen, iptables -Flöschen Sie alle Regeln, aber nicht Ihre Richtlinien! Wenn Sie das tun, policy DROPkönnen Sie leicht aus Ihrem System ausgesperrt werden!

Normalerweise ist es sicherer, policy ACCEPTeine Regel DROPals letzte Regel der Kette festzulegen. Oder richten Sie während der Fernarbeit an Ihrer Firewall einen cronJob ein policy ACCEPT, der iptables -Falle fünf oder zehn Minuten aktiviert wird. Auf diese Weise können Sie sicher sein, dass Sie in jedem Fall Zugriff auf Ihr System haben.

In Ihrem Skript haben Sie iptables -p FORWARD DROPund es gibt keine Regeln von eth1nach eth2und umgekehrt. Sie müssen iptables -p FORWARD ACCEPTder Vorwärtskette einige Regeln hinzufügen oder hinzufügen, um Ihr Problem zu lösen, zum Beispiel:

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;

Antwort2

verwenden Sie -v, um zu sehen, wo Pakete gelandet sind ...

iptables --list -n -v

verwandte Informationen