Portknocking mit iptables

Dieses Thema: "Portknocking mit iptables" im Forum "Firewalls" wurde erstellt von XET!C, 17.05.2010.

  1. XET!C

    XET!C Tripel-As

    Dabei seit:
    02.08.2006
    Beiträge:
    191
    Zustimmungen:
    0
    Ort:
    Alfter / Bonn
    Hi,

    Meine iptables Regeln verhindert das Portknocking die Verbindung zulässt.

    iptables skript
    Code:
    ##########################
    #                        #
    # Variablen Definitionen #
    #                        #
    ##########################
    
    LOCKFILE="/var/lock/guefz-fw.pid"
    
    IPTABLES="/sbin/iptables"
    LOGGER="/usr/bin/logger"
    MAIL="/usr/bin/mail"
    
    MAIL_ADR="xetic"
    
    ETH0_NET="192.168.0.0/24"
    ETH0_ADR="194.168.46.128"
    ETH0_BC="194.168.0.255"
    
    LOG="--log-level warning --log-tcp-options --log-ip-options --log-prefix sv1"
    
    #######################
    #                     #
    # Locking Mechanismus #
    #                     #
    #######################
    
    test -e "$LOCKFILE" && {
        $LOGGER -p kern.info -t guefz-fw "Es gibt mich schon mit PID `cat $LOCKFILE`, ich warte ..."
        I=0
        LOCK=1
        while [ "$LOCK" = 1 ]; do
    	sleep 2
    	test -e "$LOCKFILE" || LOCK=0
    	I=`expr $I + 1`
    	test "$I" = 15 && LOCK=0
        done
        test -e "$LOCKFILE" && {
    	$LOGGER -p kern.info -t guefz-fw "Lockdatei ist zwar immer noch da, aber was solls ..."
    	kill -TERM `cat $LOCKFILE`
    	sleep 2
    	kill -KILL `cat $LOCKFILE`
    	rm -f "$LOCKFILE"
        }
    }
    trap "rm -f $LOCKFILE" 0 1 2 3 13 15
    set -o noclobber
    echo "$$" > $LOCKFILE || exit 1
    set +o noclobber
    
    ##########################################################################
    #                                                                        #
    # Funktionen, um die verschiedenen Varianten des Regelsatzes zu erzeugen #
    #                                                                        #
    ##########################################################################
    
    ############################################
    #                                          #
    # Packetfilterregeln loeschen, alles offen #
    #                                          #
    ############################################
    
    function stop_rules() {
    	echo -n "FIREWALL: ALLES OFFEN ..."
    	$IPTABLES -F INPUT
    	$IPTABLES -F OUTPUT
    	$IPTABLES -F FORWARD
    	$IPTABLES -P INPUT ACCEPT
    	$IPTABLES -P OUTPUT ACCEPT
    	$IPTABLES -P FORWARD ACCEPT
    	$IPTABLES -F
    	$IPTABLES -X
    	echo " done"
    }
    
    ############################################
    #                                          #
    # Packetfilterregeln loeschen, alles zu    #
    #                                          #
    ############################################
    
    function close_rules() {
    	echo -n "FIREWALL: ALLES ZU ..."
    	$IPTABLES -F INPUT
    	$IPTABLES -F OUTPUT
    	$IPTABLES -F FORWARD
    	$IPTABLES -P INPUT DROP
    	$IPTABLES -P OUTPUT DROP
    	$IPTABLES -P FORWARD DROP
    	$IPTABLES -F
    	$IPTABLES -X
    	echo " done"
    }
    
    #############################################################
    #                                                           #
    # Packetfilterregeln fuer Normalbetrieb im Internet laden   #
    #                                                           #
    #############################################################
    
    function start_rules() {
    	echo -n "FIREWALL: REGELN werden aktiv ..."
    #
    # Defaulteinstellungen und evtl. vorhandene Regeln loeschen
    #
    	$IPTABLES -F INPUT
    	$IPTABLES -F OUTPUT
    	$IPTABLES -F FORWARD             2> /dev/null
    	$IPTABLES -P INPUT DROP
    	$IPTABLES -P OUTPUT ACCEPT
    	$IPTABLES -P FORWARD DROP     2> /dev/null
    	$IPTABLES -F
    	$IPTABLES -X
    #       $IPTABLES -A INPUT -j DROP
    #
    # Kernel-Einstellungen
    #
    	(
    	 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts 2> /dev/null # Ping an BC ignorieren
    	 echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all 2> /dev/null # Ping komplett ignorieren
    	 echo 1 > /proc/sys/net/ipv4/tcp_syncookies 2> /dev/null # SYN-Cookie Schutz
    	 echo 1 > /proc/sys/net/ipv4/ip_always_defrag 2> /dev/null # XXX not there?
    	 echo 0 > /proc/sys/net/ipv4/tcp_ecn 2> /dev/null
    	) > /dev/null 2>&1
    #
    # normalen Loopback-Verkehr zulassen
    #
    	$IPTABLES -A INPUT  -j ACCEPT -i lo
    	$IPTABLES -A OUTPUT -j ACCEPT -o lo
    #
    # Regeln gegen Adressfaelschungen aus dem Loopback-Bereich
    #
    	$IPTABLES -A INPUT -j LOG ${LOG}-ANTI-SPOOFING -s 127.0.0.0/8
    	$IPTABLES -A INPUT -j LOG ${LOG}-ANTI-SPOOFING -d 127.0.0.0/8
    	$IPTABLES -A INPUT -j DROP -s 127.0.0.0/8
    	$IPTABLES -A INPUT -j DROP -d 127.0.0.0/8
    #
    # Eigene Broadcasts ohne Logging ignorieren
    #
    	$IPTABLES -A INPUT -j DROP -s $ETH0_ADR -d $ETH0_BC
    #
    # Regeln gegen Packete mit den eigenen Adressen als Quelladresse
    #
    	$IPTABLES -A INPUT -j LOG ${LOG}-ANTI-SPOOFING -s $ETH0_ADR
    	$IPTABLES -A INPUT -j DROP -s $ETH0_ADR
    #
    # Regeln fuer das Versenden eigener Packete
    #
    	$IPTABLES -A OUTPUT -j LOG ${LOG}-TRACEROUTE-ATTEMPT -p icmp --icmp-type time-exceeded
    #
    # Regeln fuer die Annahme ankommender Packete
    #
    # Stateful: allgemein Antworten zulassen
    	$IPTABLES -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED
    
    # ICMP
    	$IPTABLES -A INPUT -j ACCEPT -p icmp --icmp-type echo-request
    	for TYPE in echo-reply destination-unreachable time-exceeded parameter-problem timestamp-reply address-mask-reply; do
    	    $IPTABLES -A INPUT -j ACCEPT -m state --state RELATED,ESTABLISHED -p icmp --icmp-type $TYPE
    	done
    
    # TCP
    
    # normale zugelassene Verbindungen:
    #	$IPTABLES -A INPUT -j ACCEPT -p tcp --dport 22 #ssh
    	$IPTABLES -A INPUT -j ACCEPT -p tcp --dport 995 #pop3s
    	$IPTABLES -A INPUT -j ACCEPT -p tcp --dport 10000 #webmin
    	$IPTABLES -A INPUT -j ACCEPT -p tcp --dport 80 #http
    #	$IPTABLES -A INPUT -j ACCEPT -p tcp --dport 443
    #	$IPTABLES -A INPUT -j REJECT -p tcp --dport 113 --syn --reject-with tcp-reset 2> /dev/null
    
    
    # LOG + DROP
    #	$IPTABLES -A INPUT -j REJECT -p tcp --dport 135 --reject-with tcp-reset
    #	$IPTABLES -A INPUT -j REJECT -p tcp --dport 445 --reject-with tcp-reset
    #	$IPTABLES -A INPUT -j LOG ${LOG}-DROP-TCP -p tcp --syn
    #	$IPTABLES -A INPUT -j REJECT -p tcp --syn --reject-with tcp-reset
    #	$IPTABLES -A INPUT -j LOG ${LOG}-DROP-ICMP -p icmp
    #	$IPTABLES -A INPUT -j DROP -p icmp
    #	$IPTABLES -A INPUT -j LOG ${LOG}-DROP-UDP -p udp
    #	$IPTABLES -A INPUT -j REJECT -p udp --reject-with icmp-port-unreachable
    #	$IPTABLES -A INPUT -j LOG ${LOG}-DROP-INVALID -m state --state INVALID
    #	$IPTABLES -A INPUT -j DROP -m state --state INVALID
    #
    # Verwerfen aller bisher nicht erfassten Packete
    #
    #	 $IPTABLES -A INPUT -j LOG ${LOG}-WEIRD
    #	 $IPTABLES -A INPUT -j DROP
    #
    # Ende der Regeln
    #
    	echo "... habe fertig"
    }
    
    ###########################
    #                         #
    # Kommandozeile auswerten #
    #                         #
    ###########################
    
    case "$1" in
    
    # Packetfilterregeln loeschen, alles offen
    
        stop|halt|down|shutdown)
    	$IPTABLES -L -nv | $MAIL -s FIREWALL_STATUS_OFFEN $MAIL_ADR
    	stop_rules
    	$LOGGER -p kern.info -t FIREWALL "Firewall offen"
    	exit 0
    	;;
    
    # Packetfilterregeln loeschen, alles zu
    
        close|zu)
    	$IPTABLES -L -nv | $MAIL -s FIREWALL_STAUTS_ZU $MAIL_ADR
    	close_rules
    	$LOGGER -p kern.info -t FIREWALL "Firewall zu"
    	exit 0
    	;;
    
    # Statusanzeige
    
        status)
    	$IPTABLES -L -Z -nv | $MAIL -s FIREWALL_STATUS $MAIL_ADR
    #	start_rules
    #	$IPTABLES -t nat -L -nv
    #	$IPTABLES -t mangle -L -nv
    	exit 0
    	;;
    
    # Laden der Packetfilterregeln
    
        start|up)
    	start_rules
    	$LOGGER -p kern.info -t firewall "Firewall geladen"
    	exit 0
    	;;
    
    # Fehler bei unbekannter Option in der Kommandozeile
    
        *)
    	echo "Usage: $0 {start|stop|close|status}"
    	exit 1
    	;;
    esac
    
    ########
    #            #
    # Ende     #
    #            #
    ########
    
    Wenn ich die Regeln ab LOG + DROP auskommentiere, funktioniert es einwandfrei. Aber so sind die Ports nicht gesperrt. Oder vertuh ich mich da???

    Hier ein iptables -L nach dem knocking
    Code:
    Chain INPUT (policy DROP)
    target     prot opt source               destination         
    ACCEPT     all  --  anywhere             anywhere            
    LOG        all  --  loopback/8           anywhere            LOG level warning tcp-options ip-options prefix `sv1-ANTI-SPOOFING' 
    LOG        all  --  anywhere             loopback/8          LOG level warning tcp-options ip-options prefix `sv1-ANTI-SPOOFING' 
    DROP       all  --  loopback/8           anywhere            
    DROP       all  --  anywhere             loopback/8          
    DROP       all  --  128-46-168-194.static.virginmedia.com  194.168.0.255       
    LOG        all  --  128-46-168-194.static.virginmedia.com  anywhere            LOG level warning tcp-options ip-options prefix `sv1-ANTI-SPOOFING' 
    DROP       all  --  128-46-168-194.static.virginmedia.com  anywhere            
    ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED 
    ACCEPT     icmp --  anywhere             anywhere            icmp echo-request 
    ACCEPT     icmp --  anywhere             anywhere            state RELATED,ESTABLISHED icmp echo-reply 
    ACCEPT     icmp --  anywhere             anywhere            state RELATED,ESTABLISHED icmp destination-unreachable 
    ACCEPT     icmp --  anywhere             anywhere            state RELATED,ESTABLISHED icmp time-exceeded 
    ACCEPT     icmp --  anywhere             anywhere            state RELATED,ESTABLISHED icmp parameter-problem 
    ACCEPT     icmp --  anywhere             anywhere            state RELATED,ESTABLISHED icmp timestamp-reply 
    ACCEPT     icmp --  anywhere             anywhere            state RELATED,ESTABLISHED icmp address-mask-reply 
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:pop3s 
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:webmin 
    ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www 
    REJECT     tcp  --  anywhere             anywhere            tcp dpt:loc-srv reject-with tcp-reset 
    REJECT     tcp  --  anywhere             anywhere            tcp dpt:microsoft-ds reject-with tcp-reset 
    LOG        tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN LOG level warning tcp-options ip-options prefix `sv1-DROP-TCP' 
    REJECT     tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN reject-with tcp-reset 
    LOG        icmp --  anywhere             anywhere            LOG level warning tcp-options ip-options prefix `sv1-DROP-ICMP' 
    DROP       icmp --  anywhere             anywhere            
    LOG        udp  --  anywhere             anywhere            LOG level warning tcp-options ip-options prefix `sv1-DROP-UDP' 
    REJECT     udp  --  anywhere             anywhere            reject-with icmp-port-unreachable 
    LOG        all  --  anywhere             anywhere            state INVALID LOG level warning tcp-options ip-options prefix `sv1-DROP-INVALID' 
    DROP       all  --  anywhere             anywhere            state INVALID 
    LOG        all  --  anywhere             anywhere            LOG level warning tcp-options ip-options prefix `sv1-WEIRD' 
    DROP       all  --  anywhere             anywhere            
    ACCEPT     tcp  --  192.168.46.1         anywhere            tcp dpt:22 
    
    Chain FORWARD (policy DROP)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     all  --  anywhere             anywhere            
    LOG        icmp --  anywhere             anywhere            icmp time-exceeded LOG level warning tcp-options ip-options prefix `sv1-TRACEROUTE-ATTEMPT' 
    
    Damit ist die Verbindung immer noch zu...

    Hat jemand ne Ahnung welche Regel ich umschreiben muss oder weg lassen muss?
     
Thema:

Portknocking mit iptables

Die Seite wird geladen...

Portknocking mit iptables - Ähnliche Themen

  1. Linux: Portknocking direkt im Kernel?

    Linux: Portknocking direkt im Kernel?: Geht es nach dem Willen dreier Entwickler, so soll der als Portknocking bekannte Mechanismus der Server- und Systemabsicherung nun direkt in den...
  2. 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...
  3. 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...
  4. 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...
  5. iptables synproxy

    iptables synproxy: Hallo liebe Gemeinde, Bin für jede Hilfe dankbar! Lg, Nicki