iptables mit vielen offenen Fragen

Z

zander

Grünschnabel
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
 
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
 
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.
 
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.
 
Zuletzt bearbeitet:
Der wichtigste Satz von bitmuncher stimmt 100%,
...wo kein Service lauscht, da ist auch kein Angriffspunkt.
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.
 
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
 
Zuletzt bearbeitet:
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>
 
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
 
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.
 
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
 

Ähnliche Themen

Port Forwarding mit iptables

ip6tables Problem

iptables verständniss frage, xrdp nicht erreichbar.

[SOLVED][CentOS 7] Samba server nicht erreichbar trotz firewall regeln.

Wired-Lan komisches Verhalten

Zurück
Oben