Portknocking mit iptables

XET!C

XET!C

Tripel-As
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?
 

Ä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