Problem mit IPTables

Dieses Thema im Forum "Internet, lokale Netzwerke und Wireless Lan" wurde erstellt von theton, 24.08.2005.

  1. theton

    theton Bitmuncher

    Dabei seit:
    27.05.2004
    Beiträge:
    4.820
    Zustimmungen:
    0
    Ort:
    Berlin, Germany
    Ich habe hier die Administration eines Serverschranks übernommen, dessen einzelne Komponenten über einen der Server ins Internet geroutet werden. Leider ist darauf (bisher) eine Firewall mit ca. 27 Seiten Regelsätzen für die IPTables (SuSE-Firewall) die ich jetzt ein wenig abspecken will. Ausserdem sieht bei der Firewall nicht mal mehr der alte Admin durch. Dazu habe ich ein neues Script geschrieben, das soweit auch einigermaßen funktioniert, allerdings haben einige Service der Server, wenn ich dieses Script starte, plötzlich sehr lange Antwortzeiten, die ich mir nicht erklären kann. Vor allem deswegen, weil es sich nur um POP3, SMTP und MySQL-Server handelt, wo die Antwortzeiten plötzlich sehr lang werden, während die Webserver weiterhin zügig ihre Daten ausliefern.

    Hier mal das Script:

    Code:
    #!/bin/bash
    
    echo "Starting firewall"
    
    LOGLIMIT=20
    IPTABLES=/usr/sbin/iptables
    
    # albatros
    IP_INT_ALBATROS=192.168.1.2
    IP_EXT_ALBATROS=123.123.123.123
    # columba
    IP_INT_COLUMBA=192.168.1.3
    IP_EXT_COLUMBA=123.123.123.124
    # falco
    IP_INT_FALCO=192.168.1.4
    IP_EXT_FALCO=123.123.123.125
    # corax
    IP_INT_CORAX=192.168.1.5
    IP_EXT_CORAX=123.123.123.126
    # intergerma
    IP_INT_INTERGERMA=192.168.1.101
    IP_EXT_INTERGERMA=123.123.123.127
    # Switch
    IP_INT_SWITCH=192.168.1.253
    IP_EXT_SWITCH=123.123.123.128
    # UPS
    IP_INT_UPS=192.168.1.254
    IP_EXT_UPS=123.123.123.129
    
    case "$1" in
        start)
            # alle alten Regeln entfernen
    	echo "Loesche alte Regeln und Ketten"
    	$IPTABLES -F
    	$IPTABLES -X
    	$IPTABLES -t nat -F
    	
            ###### Erstellen neuer Ketten ############
    	echo "Neue Ketten werden erstellt"
            # Kette Kette fuers Logging und REJECT
    #	$IPTABLES -N LOGREJECT
    #	$IPTABLES -A LOGREJECT -m limit --limit $LOGLIMIT/minute -j LOG --log-prefix "FIREWALL REJECT " --log-level notice --log-ip-options --log-tcp-options
    #	$IPTABLES -A LOGREJECT -j REJECT --reject-with-icmp-port-unreachable
    	
            ######## /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
            # Aktiviere SYN Flood Protection
    	echo 1 > /proc/sys/net/ipv4/tcp_syncookies
            # Source-Validierung - Kicke den ganzen IP Spoofing Shit
    	echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter
            # Setze Default-TTL auf 61 (Default: 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. 30s auf ein FIN/ACK
    	echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout
            # unterbreche Verbindungsaufbau nach 3 SYN-Paketen (Default: 6)
    	echo 3 > /proc/sys/net/ipv4/tcp_syn_retries
            # unterbreche Verbindungsaufbau nach 3 SYN/ACK-Paketen (Default: 6)
    	echo 3 > /proc/sys/net/ipv4/tcp_synack_retries
    	
            ###### MAIN PART ##########
    	$IPTABLES -P INPUT DROP
    	$IPTABLES -P FORWARD DROP
    	
            # ausgehende Verbindungen erlauben
    	$IPTABLES -P OUTPUT ACCEPT
    
    	$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
    	$IPTABLES -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    	$IPTABLES -t nat -A POSTROUTING -o eth1 -j MASQUERADE
    	
            #  bereits bestehende Verbindungen weiterhin akzeptieren
    	$IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    	# im Loopback koennen wir jedem trauen
    	$IPTABLES -A INPUT -i lo -j ACCEPT
            # erlaube Pings
    	$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    	
            # Forwarding fuer alle Rechner im Schrank
            # 192.168.1.2 <-> 213.160.80.36 --> albatros
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_ALBATROS -o eth0 -j SNAT --to-source $IP_EXT_ALBATROS
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_ALBATROS -o eth1 -j SNAT --to-source $IP_EXT_ALBATROS
    	$IPTABLES -t nat -A PREROUTING -i eth0 -d $IP_EXT_ALBATROS -j DNAT --to-destination $IP_INT_ALBATROS
    	$IPTABLES -t nat -A PREROUTING -i eth1 -d $IP_EXT_ALBATROS -j DNAT --to-destination $IP_INT_ALBATROS
            # 192.168.1.3 <-> 213.160.80.37 --> columba
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_COLUMBA -o eth0 -j SNAT --to-source $IP_EXT_COLUMBA
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_COLUMBA -o eth1 -j SNAT --to-source $IP_EXT_COLUMBA
    	$IPTABLES -t nat -A PREROUTING -i eth0 -d $IP_EXT_COLUMBA -j DNAT --to-destination $IP_INT_COLUMBA
    	$IPTABLES -t nat -A PREROUTING -i eth1 -d $IP_EXT_COLUMBA -j DNAT --to-destination $IP_INT_COLUMBA
            # 192.168.1.4 <-> 213.160.80.38 --> falco
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_FALCO -o eth0 -j SNAT --to-source $IP_EXT_FALCO
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_FALCO -o eth1 -j SNAT --to-source $IP_EXT_FALCO
    	$IPTABLES -t nat -A PREROUTING -i eth0 -d $IP_EXT_FALCO -j DNAT --to-destination $IP_INT_FALCO
    	$IPTABLES -t nat -A PREROUTING -i eth1 -d $IP_EXT_FALCO -j DNAT --to-destination $IP_INT_FALCO
            # 192.168.1.5 <-> 213.160.80.39 --> corax
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_CORAX -o eth0 -j SNAT --to-source $IP_EXT_CORAX
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_CORAX -o eth1 -j SNAT --to-source $IP_EXT_CORAX
    	$IPTABLES -t nat -A PREROUTING -i eth0 -d $IP_EXT_CORAX -j DNAT --to-destination $IP_INT_CORAX
    	$IPTABLES -t nat -A PREROUTING -i eth1 -d $IP_EXT_CORAX -j DNAT --to-destination $IP_INT_CORAX
            # 192.168.1.101 <-> 213.160.80.45 --> intergerma
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_INTERGERMA -o eth0 -j SNAT --to-source $IP_EXT_INTERGERMA
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_INTERGERMA -o eth1 -j SNAT --to-source $IP_EXT_INTERGERMA
    	$IPTABLES -t nat -A PREROUTING -i eth0 -d $IP_EXT_INTERGERMA -j DNAT --to-destination $IP_INT_INTERGERMA
    	$IPTABLES -t nat -A PREROUTING -i eth1 -d $IP_EXT_INTERGERMA -j DNAT --to-destination $IP_INT_INTERGERMA
            # 192.168.1.253 <-> 213.160.80.61 --> switch
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_SWITCH -o eth0 -j SNAT --to-source $IP_EXT_SWITCH
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_SWITCH -o eth1 -j SNAT --to-source $IP_EXT_SWITCH
    	$IPTABLES -t nat -A PREROUTING -i eth0 -d $IP_EXT_SWITCH -j DNAT --to-destination $IP_INT_SWITCH
    	$IPTABLES -t nat -A PREROUTING -i eth1 -d $IP_EXT_SWITCH -j DNAT --to-destination $IP_INT_SWITCH
            # 192.168.1.254 <-> 213.160.80.62 --> UPS
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_UPS -o eth0 -j SNAT --to-source $IP_EXT_UPS
    	$IPTABLES -t nat -A POSTROUTING -s $IP_INT_UPS -o eth1 -j SNAT --to-source $IP_EXT_UPS
    	$IPTABLES -t nat -A PREROUTING -i eth0 -d $IP_EXT_UPS -j DNAT --to-destination $IP_INT_UPS
    	$IPTABLES -t nat -A PREROUTING -i eth1 -d $IP_EXT_UPS -j DNAT --to-destination $IP_INT_UPS
    	
            ############ Stuff fuer Phoenix ############
            # erlaube Pings
    	$IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
            # Port-Freigaben fuer phoenix
            # SSH
    	$IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT
            # DNS
    	$IPTABLES -A INPUT -p tcp --dport 53 -j ACCEPT
    	
            # alles andere loggen und REJECT
    #	$IPTABLES -A INPUT -p tcp -j LOGREJECT
    #	$IPTABLES -A FORWARD -p tcp -j LOGREJECT
    	;;
        *)
    	echo "Usage: `basename $0` {start}" >&2
    	exit 64
    	;;
    esac
    
    exit 0
    
    Der Firewall-Rechner, auf dem die mit diesem Script aufgebaute Firewall laufen soll, sieht wie folgt aus:
    Das Interface eth1 zeigt ins interne Netzwerk (IP: 192.168.1.1). Für eth0 gibt es mehrere virtuelle Interfaces, die die externen IPs der einzelnen Racks enthalten (z.B. eth0:1 -> 123.123.123.123, eth0:2 -> 123.123.123.124 usw.). Wie dem Script ja zu entnehmen ist, werden die externen IPs einfach auf die internen umgelegt. Jeder der Rechner hat dann noch eine eigene Firewall, die die Port-Freigabe regelt. Mit diesen Firewalls gibt es keine Probleme, was ich daran merke, dass die Timeouts weg sind, sobald ich die alte Firewall auf dem Router wieder neu starte.
    Kann sich vielleicht jemand erklären, woher die hohen Antwortzeiten kommen könnten? Ich mit mit meinem Latein langsam am Ende.
     
  2. Anzeige

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

Problem mit IPTables

Die Seite wird geladen...

Problem mit IPTables - Ähnliche Themen

  1. Routingprobleme mit iptables

    Routingprobleme mit iptables: Hallo zusammen, ich sitze hier gerade an einem neuen Router und komme im letzten Schritt einfach nicht voran. Insgesamt sollen 3...
  2. iptables Problem auf Linux vServer

    iptables Problem auf Linux vServer: Hallo, mein iptables will irgendwie nicht loggen. Hier ist meine /etc/iptables.rules: # Generated by iptables-save v1.4.4 on Sat Aug 27...
  3. openvpn auf debian eingerichtet, probleme mit iptables und routing

    openvpn auf debian eingerichtet, probleme mit iptables und routing: hallo liebe unixboard.de gemeinde, lange profitiere ich schon von euch, da mich oftmals google-links zu euch fuehren, oder ihr eine meiner...
  4. Denkfehler, oder was? iptables Script-Problem

    Denkfehler, oder was? iptables Script-Problem: Hi Leute, Ich möchte gern einen Rechner mit ner Firewall schützen. Ich selbst möchte aber alle Port nach aussen offen haben. Führe ich das...
  5. iptables - Problem

    iptables - Problem: Hi, habe folgende Konfiguration. Server mit 2 Netzwerkkarten. wifi: 192.168.77.1 LAN: 192.168.1.5 Vom wifi kommt man nur via OpenVPN...