Suche zusammenfassung von Iptablesregeln gegen bekannte Angriffe

sono

sono

Sack Flöhe Hüter
Ich hab diese Frage schon auf nem anderen Board gestellt , aber da dort die letzen Tage nichts passiert ist versuche ich es mal ob hier jemand sowas kennt .

Ich beschäftige mich zur Zeit ein wenig mit IP Tables , und mittlerweile habe ich auch einige Dokumentationen dazu gelesen und viele Scripte haben ( als sozusagen Schmanckerl ) ein bis 2 Reglen zum blocken bekannter Angriffe , abschächen von ddos , erkennen und abschwächen von synflooding , anti spoofing , nmap erkennen usw .

In der Tat könnte ich natürlich einiges einfach über die Policies blocken und nur die notwendigsten Sachen erlauben , ( Hab ich im letzten Tread dieser Art hier im Forum gelsesen => Boardsuche verwendet :-) ) aber da fehlt mir erstens etwas der kick und 2tens würde ich diese Angriffe / Übergriffe oder was auch immer gerne mitloggen.

Wie schon erwähnt habe ich bereits einiges zu dem Thema gefunden aber das ist quasi zusammengestückelt aus 20 scripten diversen Googelabfragen und 3 Tutorials und für meinen geschmack einfach ein wenig mickrig im Vergleich dazu was es alles gibt .
Ich bekomme zwar immer mal wieder was neues zu Gesicht aber sehr effektiv ist diese Art der Suche wohl nicht .

( Ja Snort wäre teilweise besser geeignet , aber wäre nur ein zusätzlicher angreifbarer Dienst denn ich nicht auf meiner Firewall zum Internet haben möchte ).

Hat sich schonmal jemand mit dem Thema beschäftigt und vor allem eine Seite oder eine Dokumentation gefunden die sich spezielle mit Angriffstechniken und deren erkennen ( loggen ) und blocken per Iptables beschäftigt ?

( Ich suche wirklich was was speziell einzellne Angriffe behandelt, nicht ein allgemeines Tutorial für Iptables , da hab ich mittlerweile einige 100 Seiten vo n durch )

Gruß Sono
 
hi

nicht ganz was du suchst aber vielleicht auch erwähnenswert in diesem zuge.

in debian sid gibts ein packet fail2ban. das hilft gegen ssh brutforceattacken. einfach installiert und konfiguriert. funktioniert bei mir auch wunderbar unter debian stable. einfach erstklassig.

es blockt nach einer gegebenen anzahl von fehlversuchen beim sshdienst die ip für eine gewisse zeit.

einfach mal angucken.

mfg frank
 
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j LOG --log-prefix "SSH_brute_force "

iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP

:D

Aber danke .
 
Hier ein Beispiel fuer ein einfaches aber recht effektives Firewall-Script eines Routers:

Code:
#!/bin/bash

echo "Starting firewall"

LOGLIMIT=20
IPTABLES=/sbin/iptables

case "$1" in
start)
        # alle alten Regeln entfernen
        echo "Loesche alte Regeln"
        $IPTABLES -F
        $IPTABLES -X
        $IPTABLES -t nat -F
        # Routing
        echo 1 > /proc/sys/net/ipv4/ip_forward
        $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
        $IPTABLES -t nat -A POSTROUTING -o eth1 -j MASQUERADE
        ### ERSTELLE NEUE KETTEN ###
        # Chain to log and reject a port by ICMP port unreachable
        $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
        # 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

        ### MAIN PART ###
        $IPTABLES -P INPUT DROP
        $IPTABLES -P FORWARD DROP
        $IPTABLES -P OUTPUT ACCEPT
        $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
        $IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
        # im Loopback koennen wir jedem trauen
        $IPTABLES -A INPUT -i lo -j ACCEPT
        # ebenso im LAN
        $IPTABLES -A INPUT -i eth0 -j ACCEPT
        # erlaube Pings
        $IPTABLES -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
        # erlaube SSH
        $IPTABLES -A INPUT -p tcp --dport 22 --tcp-flags ALL SYN -j ACCEPT
        $IPTABLES -t nat -A POSTROUTING -s 192.168.0.1 -o eth0 -j SNAT --to-source 123.123.123.123
        $IPTABLES -t nat -A PREROUTING -i eth0 -d 123.123.123.123 -j DNAT --to-destination 192.168.0.1
        # Alle TCP Packete, die bis hier hin kommen, werden
        # geloggt und rejected
        # Der Rest wird eh per Default Policy gedroppt...
        $IPTABLES -A INPUT -p tcp -j LOGREJECT
        $IPTABLES -A FORWARD -p tcp -j LOGREJECT
        ;;
*)
        echo "Usage: `basename $0` {start}" >&2
        exit 64
        ;;
esac

Die proc-Manipulation kann von System zu System leicht variieren. Ich hoffe, dass die Kommentare ausreichen, was nicht kommentiert ist, sollte eigentlich klar sein.
 
Hi , danke für dein Script , bei den Proc Einstellungen war was dabei was ich noch nicht kannte .

Vielleicht interessiert es dich was ich bis jetzt da so habe.

Code:
# Modul zum sicheren Konfigurieren des /proc Systems
procinit(){

	# Wollen wir überhaupt ICMP Traffic ?
	if [ $BLOCK_ICPM == "1" ]; then
		echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
	else
		echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
	fi

	# Sollen wir ICPM Redirects Akzeptieren ?
	if [ $ICMP_REDIRECT == "1" ]; then
    	echo "1" > /proc/sys/net/ipv4/conf/all/accept_redirects
  	else
   	 echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
	fi


	# Synfloodprotection mit Syncookies ?
	if [ -f /proc/sys/net/ipv4/tcp_syncookies ]; then
			if [ $SYN_COOKIE == 1 ]; then
					echo "1" > /proc/sys/net/ipv4/tcp_syncookies
			else
					echo "0" > /proc/sys/net/ipv4/tcp_syncookies
			fi
	fi

	# Reagieren wir auf Broadcasts ?
	if [ -f /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts ]; then
			if [ $IGNORE_BROADCASTS == 1 ]; then
					echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
			else
					echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
			fi
	fi

	# Wollen wir nicht routbare IPS droppen ? (Spoofing Protection)
	if [ -e /proc/sys/net/ipv4/conf/all/rp_filter ]; then
		for nam in /proc/sys/net/ipv4/conf/*/rp_filter; do
			if [ $IGNORE_ROUTEABLE == "1" ]; then
			echo "1" > $nam
			else
			echo "0" > $nam
			fi
		done
	fi

	# DoS Prävention durch frisieren der Timeouts
  	if [ $TUNE_TIMEOUTS == "1" ]; then
    	echo "15" > /proc/sys/net/ipv4/tcp_fin_timeout
    	echo "1800" > /proc/sys/net/ipv4/tcp_keepalive_time
    	echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
    	echo "0" > /proc/sys/net/ipv4/tcp_sack
		# 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
  	fi

	# Hallo ich bin Windows XP mit einer checkpoint-firewall 
  	if [ $FAKE_WINXP == "1" ]; then
		echo "8738140" > /net/core/rmem_max
		echo "8738140" > /net/core/wmem_max
		echo "4096 873814 8738140" > /net/ipv4/tcp_rmem
		echo "4096 873814 8738140" > /net/ipv4/tcp_wmem
	fi

	# Protokolliere Pakete mit unmöglichen IPv4-Adressen
	if [ $LOG_MARTIANS == "1" ]; then
		echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
	else
		echo "0" > /proc/sys/net/ipv4/conf/all/log_martians
	fi

	# Prüfen auf Netzwerküberlastung (Explicit Congestion Notification)
  	if [ -e /proc/sys/net/ipv4/tcp_ecn ]; then
    	if [ $ECN == "1" ]; then
      	echo "1" > /proc/sys/net/ipv4/tcp_ecn
    	else
      	echo "0" > /proc/sys/net/ipv4/tcp_ecn
    	fi
  	fi

	# Dem Kernel mitteilen das wir eine Dynamische IP haben
  	if [ $DHCPIP == "1" ]; then
    	echo "1" > /proc/sys/net/ipv4/ip_dynaddr
  	else
    	echo "0" > /proc/sys/net/ipv4/ip_dynaddr
  	fi

  	# Die Maximale Anzahl an Connections die gehalten werden können
	# Ist ein wenig Tricky da dieses Modul wohl an 2 Stellen sein könnte !
	if [ ! -f /proc/sys/net/ipv4/ip_conntrack_max ] && [ ! -f /proc/sys/net/ipv4/netfilter/ip_conntrack_max ] ; then
		echo -e "\033[1;31mWARNUNG: ip_conntrack_max Konnte nicht gefunden werden!\033[0m"
	else
		# Default location for ip_conntrack_max
		if [ -f /proc/sys/net/ipv4/ip_conntrack_max ]; then
			if [ $MAX_CON != "" ]; then
			echo "$MAX_CON" > /proc/sys/net/ipv4/ip_conntrack_max
			else
			echo "4096" > /proc/sys/net/ipv4/ip_conntrack_max
			fi
		fi

		# Alternate location for ip_conntrack_max
		if [ -f /proc/sys/net/ipv4/netfilter/ip_conntrack_max ]; then
			if [ $MAX_CON != "" ]; then
			echo "$MAX_CON" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
			else
			echo "4096" > /proc/sys/net/ipv4/netfilter/ip_conntrack_max
			fi
		fi
	fi

	# IP forwarding aktivieren (Sind wir ein Router ?)
  	if [ $IP_FORWARDING == "1" ]; then
    	if [ -e /proc/sys/net/ipv4/ip_forward ]; then
      	echo "1" > /proc/sys/net/ipv4/ip_forward
     	fi
  	else
    	if [ -e /proc/sys/net/ipv4/ip_forward ]; then
     	 	echo "0" > /proc/sys/net/ipv4/ip_forward
    	fi
  	fi

	# Abschalten des UDP Patches
  	if [ -e /proc/sys/net/ipv4/ip_masq_udp_dloose ]; then
    	if [ $LOOSE_UDPP == "1" ]; then
      	echo "1" > /proc/sys/net/ipv4/ip_masq_udp_dloose
    	else
      	echo "0" > /proc/sys/net/ipv4/ip_masq_udp_dloose
    	fi
  	fi

	# TIME TO LIFE wie lange geistert das Packet durchs Netzwerk
  	if [ -e /proc/sys/net/ipv4/ip_default_ttl ]; then
		if [$TTL != ""]; then
    		echo $TTL > /proc/sys/net/ipv4/ip_default_ttl
		else
			echo "64" > /proc/sys/net/ipv4/ip_default_ttl
		fi
  	fi

#
## Ab hier die Einträge die nicht in der Conf stehen
#

	# Unterbinden des auslesens der Uptime
  	if [ -e /net/ipv4/tcp_timestamps ]; then
    	echo "0" > /net/ipv4/tcp_timestamps
  	fi

	# Ändere Portbereich für ausgehende Pakete
  	if [ -e /proc/sys/net/ipv4/ip_local_port_range ]; then
    	echo "30000 60000" > /proc/sys/net/ipv4/ip_local_port_range
  	fi

  	#Verlangsamt ICMP bei zu vielen Paketen
  	if [ -e /proc/sys/net/ipv4/icmp_ratelimit ]; then
    	echo "5" >/proc/sys/net/ipv4/icmp_ratelimit
  	fi

	# Die default Schlangenlänge verdoppeln
  	if [ -e /proc/sys/net/ipv4/ipv4/ip_queue_maxlen ]; then
    	echo "2048" > /proc/sys/net/ipv4/ip_queue_maxlen
	fi

	# Antworten auf unsinnige Fehlermeldungen ignorieren
	if [ -e /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses ]; then
		echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
	fi

	# Automatisches defragmentieren von IP Fragmenten
	if [ -e /proc/sys/net/ipv4/ip_always_defrag ]; then
		echo "1" > /proc/sys/net/ipv4/ip_always_defrag
	fi

	# ICMP send_redirect für jedes Interface deaktivieren
	if [ -e /proc/sys/net/ipv4/conf/all/send_redirects ]; then
		for interface in /proc/sys/net/ipv4/conf/*/send_redirects; do
			echo "0" > $interface
		done
	fi

	# routed packets werde nicht akzeptiert !
 	if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
    	for interface in /proc/sys/net/ipv4/conf/*/accept_source_route; do
      	echo "0" > $interface
    	done
  	fi

	#Killt Pakete aus dem Adressraum 0.X.X.X
 	if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
    	for interface in /proc/sys/net/ipv4/conf/*/bootp_relay; do
      	echo "0" > $interface
    	done
  	fi

  	# Keine ICMP-Redirects akzeptieren. Diese Packete könnten die Kernel Routing-Einstellungen
	# ändern.
 	if [ -e /proc/sys/net/ipv4/conf/all/accept_source_route ]; then
    	for interface in /proc/sys/net/ipv4/conf/*/accept_redirects; do
      	echo "0" > $interface
    	done
  	fi

}

Die Varibalen kommen aus nen Konfigurationsfile, ich denke mal die kann jeder dann selbst wo setzten.

Kennt ihr sonst Sinnvolle Einstellungen in Proc die von diesem und dem letzen Post nicht abgedeckt wurden ?

( Ich glaube wenn ich Fertig bin muss ich die Hardware der Firewall updaten weil das Script von der Größe nicht mehr auf die Platte passt oder so . )
 
Daran das Ganze von Variablen abhaengig zu machen hab ich noch garnicht gedacht, steigert natuerlich die Wiederverwendbarkeit des Skripts enorm und der "Durchschnittsuser" kann dann problemlos Aenderungen machen. Danke fuer den Hinweis. :)
 
Jo , ist so ne schlecht Angewohnheit aus jedem kleinen Script ein Zigtausendzeiler mit eigener Conf zu bauen .
Aber dafür brauch ich das ganze dann nur einmal zu schreiben und kann auf jedem anderen Rechner nur noch die conf manipulieren und gut .

Freut mich wenn ich dir eine kleine Anregung geben konnte .

Gruß Sono
 
Das Buch "iptables kurz & gut" von o´reilly finde ich sehr praktisch, sozusagen als referenz.
 

Ähnliche Themen

Server-Monitoring mit RRDTool

Linux Systemadministration v. Jochen Hein

Zurück
Oben