iptables mit vielen offenen Fragen

Dieses Thema im Forum "Firewalls" wurde erstellt von zander, 24.05.2010.

  1. zander

    zander Grünschnabel

    Dabei seit:
    24.05.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo zusammen,

    ich habe meine neue FritzBox mit iptables aufgerüstet und würde nun gerne mit folgendem Script:

    Code:
    #!/bin/sh
    # # # FIREWALL RULES
    # Tabelle flushen
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -X
    iptables -t nat -X
    iptables -t mangle -X
    
    # Default-Policies setzen
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    
    # loopback device oeffnen
    iptables -A INPUT -s 127.0.0.1 -i lo -j ACCEPT
    iptables -A OUTPUT -s 127.0.0.1 -o lo -j ACCEPT
    
    iptables -t nat -A PREROUTING -i dsl -p tcp --dport 443 -j DNAT --to-destination 192.168.2.10
    iptables -A FORWARD -i dsl -m state --state NEW -p tcp -d 192.168.2.10 --dport 443 -j ACCEPT
    # Benutze Source NAT (SNAT) fuer die aktuelle Verbindung in das LAN
    iptables -t nat -A POSTROUTING -o lan -p tcp --dport 443 -j SNAT --to-source 192.168.2.254
    
    #iptables -t nat -A POSTROUTING -j MASQUERADE -o dsl
    
    # allow voip
    SIPPORT="5004 5005 5006 5007 5008 5009 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 7077 7078 7079 7080 7081 70
    for pt in $SIPPORT; do
    iptables -A FORWARD -s 127.0.0.1 -p udp --dport $pt -j ACCEPT
    iptables -A FORWARD -s 192.168.2.254 -p udp --dport $pt -j ACCEPT
    done
    iptables -A FORWARD -i 127.0.0.1 -o dsl -j ACCEPT
    iptables -A FORWARD -i 192.168.2.0/24 -o dsl -j ACCEPT
    
    # Ausgehende Regeln für Internet Surfen:
    iptables -N TRANS
    iptables -A TRANS -p tcp  -s 192.168.2.0/24 -m multiport --dport 20,21,22,25,80,81,82,83,110,443,465,993,995,5060 -j
    iptables -A TRANS -p udp  -s 192.168.2.0/24 -m multiport --dport 53,67,68,80,123,5060:5069,5004:5009,7077:7097,10000
    iptables -A TRANS -p icmp -s 192.168.2.0/24 -j ACCEPT
    
    # conntrack für eingehende Antwortpakete:
    iptables -A TRANS -m state --state RELATED,ESTABLISHED -j ACCEPT
    
    # ... Eigene Regeln für bekannte hosts
    # ...
    
    iptables -A TRANS -j LOG --log-prefix "[IPT] DENY-LAN-ACCESS "          # abgewiesene Pakete Loggen
    iptables -A TRANS -j DROP                                               # PARANOIA LINK
    
    
    # # # Rules for Fritz Device
                
    iptables -A INPUT -p udp -s 0.0.0.0 -d 255.255.255.255 --sport 68 --dport 67 -j ACCEPT                              
    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT                 # LOCALHOST
    iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT                         # LAN
    iptables -A INPUT -s 169.254.0.0/16 -i lan -j ACCEPT                  # EMERGENCY LAN
    iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -A INPUT -p tcp --dport 5060 -j ACCEPT                       # VoIP
    for pt in $SIPPORT; do                                
    iptables -A INPUT -p udp --dport $pt -j ACCEPT
    done                                     
    iptables -A INPUT -p udp --dport 5060 -j ACCEPT                       # VoIP
    iptables -A INPUT -j LOG --log-prefix "[IPT] DENY-FRITZ-ACCESS "      # Log other traffic                           
    iptables -A INPUT -j DROP                                             # PARANOIA IN                                 
    iptables -P INPUT DROP                                                # Default policy DROP
    iptables -A OUTPUT -d 192.168.2.0/24 -j ACCEPT                        # Allow LAN
    iptables -A OUTPUT -d 224.0.0.1/24 -j ACCEPT                          # UPnP
    iptables -A OUTPUT -d 239.255.255.250 -j ACCEPT                 
    iptables -A OUTPUT -d 127.0.0.1 -j ACCEPT                             # Local Host
    iptables -A OUTPUT -p udp -m multiport --dport 53,123,5060:5069,7077:7097,10000 -j ACCEPT  # DNS, TIME, VoIP
    iptables -A OUTPUT -p tcp --dport 5060 -j ACCEPT                      # VoIP
    iptables -A OUTPUT -p udp -j ACCEPT
    #iptables -A OUTPUT -p tcp --dport 443 -d dyndns.strato.com -j ACCEPT  # DynDNS                    
    iptables -A OUTPUT -d post.strato.de -j ACCEPT                        # e-Mail OUT     
    iptables -A OUTPUT -d mail.gmx.net -j ACCEPT                          # e-Mail OUT
    iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT     # stateful conntrack
    iptables -A OUTPUT -d 212.42.244.73 -p tcp --dport 80 -j ACCEPT       # Plugins Server AVM
    
    iptables -A OUTPUT -d www.dasoertliche.de    -p tcp --dport 80 -j ACCEPT # Für Telefonbuch Abfrage durch die Box
    iptables -A OUTPUT -d www.dastelefonbuch.de  -p tcp --dport 80 -j ACCEPT         
    iptables -A OUTPUT -d www.goyellow.de        -p tcp --dport 80 -j ACCEPT   
    iptables -A OUTPUT -d www.11880.com          -p tcp --dport 80 -j ACCEPT             
    iptables -A OUTPUT -d www.google.de          -p tcp --dport 80 -j ACCEPT
    iptables -A OUTPUT -d www.das-telefonbuch.at -p tcp --dport 80 -j ACCEPT    
    iptables -A OUTPUT -d www.search.ch          -p tcp --dport 80 -j ACCEPT
    iptables -A OUTPUT -d www.anywho.com         -p tcp --dport 80 -j ACCEPT
        
    iptables -A OUTPUT -j LOG --log-prefix "[IPT] WARNING-CALL-HOME "      # Nicht Erlaubten ausgehenden Traffic Loggen
    iptables -P OUTPUT DROP                                                # und Sperren     
                                                                                       
    # # # Rules for FORWARD                                                                    
                                                                                     
    #Endgerät freischalten                                                     P
    iptables -P FORWARD DROP                       
    iptables -A FORWARD -j TRANS                                           # Regeln für LAN - WAN Verkehr
    iptables -A FORWARD -j LOG --log-prefix "[IPT] DENY-FWD-ACCESS "  
    folgendes erreichen, was teilweise geht, aber bestimmt noch fehlerbehaftet oder verbesserungswürdig wäre:

    1) VOIP geht damit. Sind aber häßlich viele Ports offen. Außerdem geht keine VOIP Verbindung vom via DECT angemeldeten Telefon an ein per IP angemeldetes Telefon. Besser gesagt, die Verbindung geht, aber leider nur in eine Richtung. Die andere ist stumm.

    2) Meine Freigabe des Rechners 192.168.2.10 geht irgendwie überhaupt nicht.

    3) Und zu guter Letzt. Wie kann ich die Firewall noch verbessern. D.h. Abwehr von Brute-Force Angriffen und/oder alles so sicher wie möglich machen

    Danke schon mal für jegliche Hilfe!

    Viele Grüße
    Jo
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. zander

    zander Grünschnabel

    Dabei seit:
    24.05.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,

    habe mir jetzt mal von dem hier im Board verlinkten iptables Generator folgendes File mit den gewünschten Funktionen erstellen lassen:

    Code:
        # Tabelle flushen
        iptables -F
        iptables -t nat -F
        iptables -t mangle -F
        iptables -X
        iptables -t nat -X
        iptables -t mangle -X
    
        # Default-Policies setzen
        iptables -P INPUT DROP
        iptables -P OUTPUT DROP
        iptables -P FORWARD DROP
    
        # MY_REJECT-Chain
        iptables -N MY_REJECT
    
        # MY_REJECT fuellen
        iptables -A MY_REJECT -p tcp -m limit --limit 7200/h -j LOG --log-prefix "REJECT TCP "
        iptables -A MY_REJECT -p tcp -j REJECT --reject-with tcp-reset
        iptables -A MY_REJECT -p udp -m limit --limit 7200/h -j LOG --log-prefix "REJECT UDP "
        iptables -A MY_REJECT -p udp -j REJECT --reject-with icmp-port-unreachable
        iptables -A MY_REJECT -p icmp -m limit --limit 7200/h -j LOG --log-prefix "DROP ICMP "
        iptables -A MY_REJECT -p icmp -j DROP
        iptables -A MY_REJECT -m limit --limit 7200/h -j LOG --log-prefix "REJECT OTHER "
        iptables -A MY_REJECT -j REJECT --reject-with icmp-proto-unreachable
    
        # MY_DROP-Chain
        iptables -N MY_DROP
        iptables -A MY_DROP -j DROP
    
        # Alle Pakete protokollieren
        iptables -A INPUT -j LOG --log-prefix "INPUT LOG "
        iptables -A OUTPUT -j LOG --log-prefix "OUTPUT LOG�"
        iptables -A FORWARD -j LOG --log-prefix "FORWARD LOG "
    
        # Korrupte Pakete zurueckweisen
        iptables -A INPUT -m state --state INVALID -j DROP
        iptables -A OUTPUT -m state --state INVALID -j DROP
        iptables -A FORWARD -m state --state INVALID -j DROP
    
        # Stealth Scans etc. DROPpen
        # Keine Flags gesetzt
        iptables -A INPUT -p tcp --tcp-flags ALL NONE -j MY_DROP
        iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j MY_DROP
    
        # SYN und FIN gesetzt
        iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
        iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j MY_DROP
    
        # SYN und RST gleichzeitig gesetzt
        iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
        iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j MY_DROP
    
        # FIN und RST gleichzeitig gesetzt
        iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
        iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j MY_DROP
    
        # FIN ohne ACK
        iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
        iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j MY_DROP
    
        # PSH ohne ACK
        iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
        iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j MY_DROP
    
        # URG ohne ACK
        iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j MY_DROP
        iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j MY_DROP
    
        # Loopback-Netzwerk-Kommunikation zulassen
        iptables -A INPUT -i lo -j ACCEPT
        iptables -A OUTPUT -o lo -j ACCEPT
    
        # Maximum Segment Size (MSS) f�r das Forwarding an PMTU anpassen
        iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    
        # Connection-Tracking aktivieren
        iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
        iptables -A FORWARD -i ! dsl0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
        iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    
        # IP-Adresse des LAN-Interfaces ermitteln
        LAN_IP=$(ifconfig lan0 | head -n 2 | tail -n 1 | cut -d: -f2 | cut -d" " -f 1)
    
        # NAT fuer HTTPS
        iptables -t nat -A PREROUTING -i dsl0 -p tcp --dport 443 -j DNAT --to-destination 192.168.2.10
        iptables -A FORWARD -i dsl0 -m state --state NEW -p tcp -d 192.168.2.10 --dport 443 -j ACCEPT
        # Benutze Source NAT (SNAT) fuer die aktuelle Verbindung in das LAN
        iptables -t nat -A POSTROUTING -o lan0 -p tcp --dport 443 -j SNAT --to-source $LAN_IP
    
        # Default-Policies mit REJECT
        iptables -A INPUT -j MY_REJECT
        iptables -A OUTPUT -j MY_REJECT
        iptables -A FORWARD -j MY_REJECT
    
        # Forwarding/Routing
        echo "Aktiviere IP-Routing"
        echo 1 > /proc/sys/net/ipv4/ip_forward 2> /dev/null
    
        # Masquerading
        iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE
    
        # SYN-Cookies
        echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null
    
        # Reverse-Path-Filter
        for i in /proc/sys/net/ipv4/conf/*; do echo 2 > $i/rp_filter 2> /dev/null; done
    
        # Log Martians
        for i in /proc/sys/net/ipv4/conf/*; do echo 1 > $i/log_martians 2> /dev/null; done
    
        # BOOTP-Relaying ausschalten
        for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/bootp_relay 2> /dev/null; done
    
        # Proxy-ARP ausschalten
        for i in /proc/sys/net/ipv4/conf/*; do echo 0 > $i/proxy_arp 2> /dev/null; done
    
        # Ung�ltige ICMP-Antworten ignorieren
        echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 2> /dev/null
    
        # ICMP Echo-Broadcasts ignorieren
        echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null
    
        # Max. 500/Sekunde (5/Jiffie) senden
        echo 5 > /proc/sys/net/ipv4/icmp_ratelimit
    
        # Speicherallozierung und -timing f�r IP-De/-Fragmentierung
        echo 262144 > /proc/sys/net/ipv4/ipfrag_high_thresh
        echo 196608 > /proc/sys/net/ipv4/ipfrag_low_thresh
        echo 30 > /proc/sys/net/ipv4/ipfrag_time
    
        # TCP-FIN-Timeout zum Schutz vor DoS-Attacken setzen
        echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
    
        # Maximal 3 Antworten auf ein TCP-SYN
        echo 3 > /proc/sys/net/ipv4/tcp_retries1
    
        # TCP-Pakete maximal 15x wiederholen
        echo 15 > /proc/sys/net/ipv4/tcp_retries2
    Aber irgendwie will der externe Link einfach nicht auf meinen internen Host zugegriffen werden. Woran könnte dass denn liegen? Routing ist übrigens in meiner Fritzbox aktiviert. Oder muß ich das abschalten und alles iptables übernehmen lassen? Bin echt ratlos. :-(

    Viele Grüße
    Jo
     
  4. #3 aspire_5652, 26.05.2010
    aspire_5652

    aspire_5652 Tripel-As

    Dabei seit:
    02.01.2008
    Beiträge:
    198
    Zustimmungen:
    0
    Wie ich sehe, hast du doch das Logging aktiviert. Als was sagt denn dmesg, bzw. dein $FIREWALL_LOGFILE ?

    Ansonsten denke ich, dass du mal mit tcpdump mal schauen solltest.
    Damit kann man sehen von wem wo welche Pakete ankommen.
     
  5. #4 bitmuncher, 26.05.2010
    Zuletzt bearbeitet: 26.05.2010
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Du dürftest ziemlich bald volle Logs haben, wenn du sämtlichen verworfenen oder zurückgewiesenen Traffic loggst. Logging in einer Firewall sollte man so minimal wie möglich und so umfangreich wie nötig halten. Für Traffic-Analysen sind solche Logs eh zumeist irrelevant und Tools wie Wireshark bringen da wesentlich mehr. Warum man zum Droppen eine extra Chain braucht, ist mir rätselhaft, vor allem weil sie nichts anderes tut als ein normales DROP. Je mehr Regeln du in deiner Firewall hast, umso länger braucht auch ein Paket diese Regeln zu passieren. Du erhöhst also die Latenz. SYN- und FIN-Checks würde ich nur für die Ports machen, wo ein entsprechend anfälliger Service drauf läuft und nicht global für sämtlichen Traffic. Das Gröbste kann man eh mittels procfs wesentlich CPU-freundlicher ausfiltern. Ausserdem würde ich dabei auf diese unsinnigen Schleifen verzichten, die dein Skript nutzt.

    Code:
    
            ### PROC MANIPULATION ###
            # 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
    
    Allgemein gilt aber... wo kein Service lauscht, da ist auch kein Angriffspunkt. Eine Firewall sollte daher nur das nötigste machen müssen. D.h. in deinem Fall also das Routing und das Portforwarding. Alles andere ist unnötig, wenn das System ansich sauber eingerichtet ist. Deine FORWARDING-Chain solltest du aber allgemein mal überprüfen.

    Code:
        iptables -A FORWARD -i ! dsl0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
        iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
    
    Diesen Regeln nach lässt du ausgehendes Routing zu (bzw. alles, was nicht auf dsl0 in die FORWARD kommt), aber was reingeht wird nicht weitergeroutet. Das mag für Spoofing-Angriffe reichen, aber nicht für ein vollständiges Routing. ;) Irgendwie müssen die Pakete ja den Client auch wieder erreichen. Ausserdem ist die zweite Zeile total unnötig, denn sie ist bereits in der ersten enthalten.
     
  6. #5 flugopa, 26.05.2010
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Der wichtigste Satz von bitmuncher stimmt 100%,
    was man als Firewall-Anfänger leicht überliest bzw. vergisst.

    Die verschärfte Form lautet: wenn ich nur ein paar Nutzer mit festen Internet-IP-Adressen habe, benötige ich kein Defaultgateway, denn ein paar statische Routen bringen noch mehr Sicherheit.
     
  7. #6 zander, 28.05.2010
    Zuletzt bearbeitet: 28.05.2010
    zander

    zander Grünschnabel

    Dabei seit:
    24.05.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,

    und Danke für die großartige Hilfe!!! Also ich baue das Ganze jetzt mal um und poste es dann hier nochmal. Mal sehen, ob es dann besser aussieht.

    Danke nochmal und
    Gruß
    Jo
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Hallo,

    eine Frage habe ich noch. Und zwar bezüglich des forwardings. Ist - falls ich es noch nicht geschieben habe - eine Fritzbox mit modifiziertem freetz image (deshalb die iptables). Die Fritzbox hat natürlich aber auch noch eine sog. AVM-Firewall. Dort ist schon ein Portforwarding auf einen internen Host eingerichtet. Das funktioniert aber nicht, da hinter der AVM Firewall noch iptables sind. Das Ganze sieht in etwa so aus:

    DSL < — > AVM Firewall (NAT) < — > iptables Firewall < — > LAN / WLAN

    Ohne ativierung der iptables gehts natürlich. Jetzt meine Frage. Weiß jemand wie ich das besagte portforwarding in's interne Lan Netz bewerkstelligen kann? Gibts da irgendwas spezielles was ein Routing von der AVM Firewall mit NAT einfach durch die iptables durchläßt?

    Oder muß ich sowas machen wie ein Forwarding von AVM Firewall zur iptables Wand und dann weiter zum lan-host? Wenn ja wie geht denn sowas? Wie sind da die IP's???

    Viele Grüße
    Jo
     
  8. #7 bitmuncher, 28.05.2010
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Theoretisch sollte das Port-Forwarding auch mittels iptables möglich sein. Einfach den Port öffnen

    Code:
    $IPTABLES -A INPUT -m state --state NEW -p <tcp/udp> --dport <portnummer> -j ACCEPT
    
    und ihn dann weiterleiten:

    Code:
    $IPTABLES -t nat -A PREROUTING -i <netzwerk-device-zum-internet> -p <tcp/udp> --dport <portnummer> -j DNAT --to-destination <ip-des-client-rechners>
    
     
  9. zander

    zander Grünschnabel

    Dabei seit:
    24.05.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,

    das Ganze sieht jetzt so aus bei mir. Scheint aber immernoch nicht ganz richtig zu sein:

    Code:
    # Tabelle flushen
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -X
    iptables -t nat -X
    iptables -t mangle -X
    
    # Default-Policies mit REJECT
    iptables -P INPUT -j DROP
    iptables -P OUTPUT -j DROP
    iptables -P FORWARD -j DROP
    
    # Korrupte Pakete zurueckweisen
    iptables -A INPUT -m state --state INVALID -j DROP
    iptables -A OUTPUT -m state --state INVALID -j DROP
    iptables -A FORWARD -m state --state INVALID -j DROP
    
    # Stealth Scans etc. DROPpen
    # Keine Flags gesetzt
    iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
    iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP
                                                           
    # SYN und FIN gesetzt                                  
    iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
    iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
                                                                  
    # SYN und RST gleichzeitig gesetzt                            
    iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP  
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
                                                                  
    # FIN und RST gleichzeitig gesetzt                            
    iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP  
    iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
                                                                  
    # FIN ohne ACK                                                
    iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP      
    iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j DROP    
                                                                  
    # PSH ohne ACK                                                
    iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP      
    iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j DROP    
                                                                  
    # URG ohne ACK
    iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP      
    iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j DROP    
                                                                  
    # Loopback-Netzwerk-Kommunikation zulassen                    
    iptables -A INPUT -i lo -j ACCEPT                             
    iptables -A OUTPUT -o lo -j ACCEPT                            
                                                                                    
    # Maximum Segment Size (MSS) fuer das Forwarding an PMTU anpassen               
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
                                                                                    
    ### PROC MANIPULATION ###                                                       
    # 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
    Damit läuft jetzt erstmal alles. Dann gebe ich diese Befehle ein:

    Code:
    # firewall hole for https                                     
    iptables -I INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
    iptables -t nat -I PREROUTING -i dsl -p tcp --dport 443 -j DNAT --to-destination
    Aber es tut sich nichts. Kann nicht auf den Host mittels https zugreifen.

    Auch kommt es mir komisch vor, dass das Ende jeder 'chain' mit iptables -L ein ACCEPT bringt:

    Code:
    Chain INPUT
    ..
    ACCEPT     all  --  anywhere             anywhere
    
    Chain OUTPUT
    ..
    ACCEPT     all  --  anywhere             anywhere
    Da sollte doch laut meinen Regeln immer ein DROP stehen, oder?

    Viele Grüße
    Jo
     
  10. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  11. #9 bitmuncher, 28.05.2010
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Das Ende bringt natuerlich ein ACCEPT, da Pakete akzeptiert werden, wenn sie saemtliche Regeln erfolgreich passiert haben. Du kannst aber einfach als letzte Regel ein DROP einfuegen, das nur auf das Protokoll (tcp/udp) matcht.

    Dass dein Skript nicht korrekt funktioniert ist aber auch nicht verwunderlich. Die meisten Clients nutzen dynamisch ermittelte ausgehende Ports. Wenn OUPUT per Default auf DROP gesetzt ist, muesstest du jede Verbindung explizit freigeben.
     
  12. zander

    zander Grünschnabel

    Dabei seit:
    24.05.2010
    Beiträge:
    5
    Zustimmungen:
    0
    Hallo,

    ok, ganz verstehe ich es aber noch nicht. Ich hab' jetzt mal folgendes was auch funktioniert...

    Code:
    # Tabelle flushen                                                                                                      
    iptables -F                                                                                                            
    iptables -t nat -F                                                                                                     
    iptables -t mangle -F                                                                                                  
    iptables -X                                                                                                            
    iptables -t nat -X                                                                                                     
    iptables -t mangle -X                                                                                                  
                                                                                                                           
    # Korrupte Pakete zurueckweisen                                                                                        
    iptables -A INPUT -m state --state INVALID -j DROP                                                                     
    iptables -A OUTPUT -m state --state INVALID -j DROP                                                                    
    #iptables -A FORWARD -m state --state INVALID -j DROP                                                                  
                                                                                                                           
    # Stealth Scans etc. DROPpen                                                                                           
    # Keine Flags gesetzt                                                                                                  
    iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP                                                                  
    iptables -A FORWARD -p tcp --tcp-flags ALL NONE -j DROP                                                                
                                                                                                                           
    # SYN und FIN gesetzt                                                                                                  
    iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP                                                           
    iptables -A FORWARD -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP                                                         
                                                                                                                           
    # SYN und RST gleichzeitig gesetzt                                                                                     
    iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP                                                           
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN,RST -j DROP                                                         
                                                                                                                           
    # FIN und RST gleichzeitig gesetzt                                                                                     
    iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP                                                           
    iptables -A FORWARD -p tcp --tcp-flags FIN,RST FIN,RST -j DROP                                                         
                                                                                                                           
    # FIN ohne ACK                                                                                                         
    iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP                                                               
    iptables -A FORWARD -p tcp --tcp-flags ACK,FIN FIN -j DROP                                                             
                                                                                                                           
    # PSH ohne ACK                                                                                                         
    iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP                                                               
    iptables -A FORWARD -p tcp --tcp-flags ACK,PSH PSH -j DROP                                                             
                                                                                                                           
    # URG ohne ACK                                                                                                         
    iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP                                                               
    iptables -A FORWARD -p tcp --tcp-flags ACK,URG URG -j DROP                                                             
                                                                                                                           
    # Loopback-Netzwerk-Kommunikation zulassen                                                                             
    iptables -A INPUT -i lo -j ACCEPT                                                                                      
    iptables -A OUTPUT -o lo -j ACCEPT                                                                                     
                                                                                                                           
    # Maximum Segment Size (MSS) fuer das Forwarding an PMTU anpassen                                                      
    iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu                                       
                                                                                                                           
    ### PROC MANIPULATION ###                                                                                              
    # 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
    ...bis darauf, dass ich jetzt bei interne Telefon-Gesprächen die von einem über WLAN angeschlossenen Telefon an ein Dect Telefon gehen, keinen Ton vom IP-Wlan-Telefon bekomme. Das geht irgendwie verloren.

    Einen Tipp dafür? ;-)

    Ach ja, und der Grund, warum das forwarding an den internen Host nicht ging war obige Zeile, die ich jetzt auskommentiert habe:

    Code:
    #iptables -A FORWARD -m state --state INVALID -j DROP
    D.h. doch eigentlich, dass irgend etwas falsche Pakete schickt, oder? Ist das dann der Firefox Browser unter linux oder der apache2 Webserver unter linux? Oder bin ich daran Schuld, weil ich irgendwas nicht kappiert habe?

    Dank dieser Einstellungen bleibt übrigens meine interne Firewall endlich von irgendwelchen ICMP oder tcp Anfragen verschont!

    Viele Grüße
    Jo
     
Thema:

iptables mit vielen offenen Fragen

Die Seite wird geladen...

iptables mit vielen offenen Fragen - Ähnliche Themen

  1. FTP/FTPS ohne ip_conntrack_ftp oder nf_conntrack_ftp mit iptables

    FTP/FTPS ohne ip_conntrack_ftp oder nf_conntrack_ftp mit iptables: Guten Tag, kennt jemand von euch eine Möglichkeit wie ich vsftpd nutzen kann zusammen mit einer Firewall ohne die im Betreff angegebenen...
  2. iptables und whitelist

    iptables und whitelist: Moin zusammen, Nach einer Ewigkeit melde ich mich mal hier zurück. Ich hab da so ein kleines Problemchen. Ich mach z.Zt. eine Umschulung zum...
  3. iptables blocke nur von bestimmter ip

    iptables blocke nur von bestimmter ip: Hallo, ich habe ein kleines Heimnetzwerk mit einem Router unter openWRT. Dort kann ich mittels iptables -I OUTPUT -p udp --dport 53 -m...
  4. Opensuse iptables (yast FW) + MiniUPnPd

    Opensuse iptables (yast FW) + MiniUPnPd: Hallo zusammen, ich habe ja meine OpenSuse Box momentan als Gateway eingerichtet und der Router dient nur als Access Point für alle Geräte...
  5. IPtables

    IPtables: Hallo Leute, bin zurzeit dabei, einen Proxy aufzusetzen, der die IP meines Webservers vetuschen soll. Es läuft eig. schon alles super, nur eine...