iptables alle udp´s sperren[Geloest]

  • Themenstarter Themenstarter sw33tlull4by
  • Beginndatum Beginndatum
S

sw33tlull4by

Guest
Hi!
Ich habe eine ganz einfache Frage:
Ich habe mit dem Befehl

iptale -A INPUT -p udp -j DROP

Alle UDP-Packete ausgesperrt.
So, nun wollte ich wieder ins Internet, und mein Browser konnte nichts laden.
Nun wollte ich mal wissen, wiso, denn ich denke ein Browser laeuft ueber TCP/IP.
Vorher waren es nur alle ausser den Well-known ports die ich ausgesperrt habe und alles lief aber nun nicht mehr, wiso.
mfg

sw33t
 
iptables -P INPUT DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

Das dürfte die bessere Möglichkeit sein, wenn du deine INPUT-Chain effektiv sperren willst. Dein Browser hat einfach Probleme damit die Domains aufzulösen. DNS-Queries können und werden meist via UDP gemacht und du hast, dadurch, dass du die ESTABLISHED und RELATED auch ausgesperrt hast, dir die Möglichkeit verbaut via UDP eingehende DNS-Antworten zu erhalten.
 
Lang und steinig ist der Weg zu Erleuchtung....
Wusste gar nicht das DNS-Aufloesung per UDP vollzogen wird.
Naja, jetzt bin ich schlauer.
Danke.
mfg


sw33t

//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?
 
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:
Code:
iptables -P INPUT DROP

Da der übliche Client nicht routen muss, machst du auch das Forwarding dicht:
Code:
iptables -P FORWARD DROP

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:
Code:
iptables -N LOGREJECT

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* ;)
 
kleier Hinweis zum schluss

Lecker, Wissen!
Vielen dank.
mfg

sw33t

//edit
Was mir heute morgen auch noch aufgefallen ist:
Wenn ihr euch immer ins Internet einwaehlt dann gibt es unter /etc/ppp/
ein skript welche die iptables neu schreibt,w as ziemlich bescheiden ist, da man genau dann seine eigenen braucht.
Ich habe das dingen einfach umbenannt und eie leere Datei mit dem vorherigen Namen erstellt.
ich bin zufirenden^^
 
Zurück
Oben