Portknocking mit iptables

Dieses Thema 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?
     
  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:

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. 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...
  3. 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...
  4. 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...
  5. 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...