Ich versuche herauszufinden, wie NAT und iptables funktionieren. Während ich mich in der Trial-and-Error-Phase befinde, habe ich zwei etwas widersprüchliche Howtos gefunden.
Eine Anleitung verwendet ein Skript, um iptables
Regeln nacheinander aufzurufen . Das Skript scheint so benannt und gespeichert zu sein, dass es früh während des Systemstarts ausgeführt wird, und ich denke, ein Problem kann sein, dass andere Skripte danach aufgerufen werden und seine Absichten rückgängig machen. Ich glaube sogar, dass ich dies einmal versehentlich getan habe, als ich das ursprüngliche Skript (00-Firewall) mithilfe eines Backups (00-Firewall-alt) gespeichert und umbenannt habe. Das Beispielskript für das Howto lautet:
#!/bin/sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Don't forward from the outside to the inside.
iptables -A FORWARD -i eth1 -o eth1 -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
Ein anderes Howto verwendet kein Skript, sondern eine Datei, in der einige Filterregeln definiert sind. Es sieht aus wie das:
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
-A INPUT -p tcp -m state --state NEW --dport 30000 -j ACCEPT
# Now you should read up on iptables rules and consider whether ssh access
# for everyone is really desired. Most likely you will only allow access from certain IPs.
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Was sind die Vor- und Nachteile beider Methoden zum Einrichten von iptables? Hintergrundinformationen werden sehr geschätzt, da ich für das Ganze ziemlich neu bin. Zum Beispiel verstehe ich nicht, wer die Datei aus dem letzteren Howto liest und wie sie verarbeitet wird. Mein Gefühl sagt mir, dass das zweite Howto eine bessere Lösung vorschlägt, aber warum genau?