PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Suche zusammenfassung von Iptablesregeln gegen bekannte Angriffe



sono
18.10.2005, 21:35
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

lordlamer
18.10.2005, 21:48
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

sono
18.10.2005, 22:48
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 .

theton
18.10.2005, 23:12
Hier ein Beispiel fuer ein einfaches aber recht effektives Firewall-Script eines Routers:



#!/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.

sono
19.10.2005, 09:44
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.



# 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 . )

theton
19.10.2005, 19:04
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. :)

sono
20.10.2005, 11:53
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

Gronau
27.10.2005, 16:56
Das Buch "iptables kurz & gut" von o´reilly finde ich sehr praktisch, sozusagen als referenz.