Original von sw33tlull4by
//edit
BTW:
Ich habe mir mal wieder die Manpages fuer iptables durchgeblaettert udn da kam mir folgende Frage in den Sinn:
Wie lange brauch ein Spezi wie du um seine Iptablesfirewall bis ins letzte zu definieren?
Für einen Standard-Client 5-10 Minuten. Beispiel:
Zuerstmal machst du alles sauber:
Code:
iptables -F
iptables -X
iptables -t nat -F
Dann machst du eingehenden Traffic dicht:
Da der übliche Client nicht routen muss, machst du auch das Forwarding dicht:
Und da ein Client üblicherweise überall hin verbinden können soll, lässt du ausgehenden Traffic zu:
Code:
iptables -P OUTPUT ACCEPT
Zu anderen Verbindungen zugehörigen Traffic und bei bestehenden Verbindungen musst du natürlich eingehenden Traffic auch zulassen
Code:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Da man das Loopback gern zum Testen von Servern nutzt und es teilweise auch Applikationen gibt, die nicht über Socket-Dateien arbeiten sondern über das Loopback, ist es kein Problem für dieses sämtlichen eingehenden Traffic zuzulassen. Die 127.0.0.1 ist ja nach aussen eh nicht erreichbar:
Code:
iptables -A INPUT -i lo -j ACCEPT
Zu guter letzt definierst du noch eine Kette, mit der du nicht erlaubten Traffic loggen kannst:
Definierst diese als "Logging-Kette", die maximal 20 Meldungen pro Minute loggt:
Code:
iptables -A LOGREJECT -m limit --limit 20/minute -j LOG --log-prefix "FIREWALL REJECT " --log-level notice --log-ip-options --log-tcp-options
Legst eine Regel für diese fest, nämlich das Zurückschicken des geloggten Pakets:
Code:
iptables -A LOGREJECT -j REJECT --reject-with icmp-port-unreachable
Und setzt sie auf die INPUT und FORWARD-Kette, wobei du nur TCP-Kram loggst, denn sonst würde es auf sämtliches Hintergrund-UDP-Rauschen anspringen und würde nur Bruchteile loggen:
Code:
iptables -A INPUT -p tcp -j LOGREJECT
iptables -A FORWARD -p tcp -j LOGREJECT
Zum Schluss noch das übliche Procfs-Tuning:
Code:
# auf Broadcast-Pings nicht antworten
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# halt die Klappe bei komischen ICMP Nachrichten
echo 0 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
# Kicke den ganzen IP Spoofing Shit
# (Source-Validierung anschalten)
echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
# Setze Default-TTL auf 61 (Default fuer Linux ist 64)
echo 61 > /proc/sys/net/ipv4/ip_default_ttl
# sende RST-Pakete wenn der Buffer voll ist
echo 1 > /proc/sys/net/ipv4/tcp_abort_on_overflow
# warte max. 30 secs auf ein FIN/ACK
echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
# unterbreche Verbindungsaufbau nach 3 SYN-Paketen
# Default ist 6
echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
# unterbreche Verbindungsaufbau nach 3 SYN/ACK-Paketen
# Default ist 6
echo 3 > /proc/sys/net/ipv4/tcp_synack_retries
Und fertig ist eine grundlegende Client-Firewall, die sicher nicht das Non-plus-ultra ist, aber nur die Sachen zulässt die vom Client selbst angefordert wurden. Weiterem Ausbauen steht ja nichts im Weg.

Auf Servern wird das ganze dann allerdings schon etwas komplexer und zu Routern findet man ja was entsprechendes von mir im Wiki, wird aber je nach Anforderungen natürlich da auch komplexer.
Edit: Ist ja nen richtig kleiner Crash-Kurs geworden. *gradseh*
