
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 -F
löschen Sie alle Regeln, aber nicht Ihre Richtlinien! Wenn Sie das tun, policy DROP
können Sie leicht aus Ihrem System ausgesperrt werden!
Normalerweise ist es sicherer, policy ACCEPT
eine Regel DROP
als letzte Regel der Kette festzulegen. Oder richten Sie während der Fernarbeit an Ihrer Firewall einen cron
Job ein policy ACCEPT
, der iptables -F
alle 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 DROP
und es gibt keine Regeln von eth1
nach eth2
und umgekehrt. Sie müssen iptables -p FORWARD ACCEPT
der 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