Ich bin neu hier und habe mich angemeldet weil ich selber kein rat mehr weis.
Es ist so ich bin Technick Admin von nem kleinen vps server
Code: Select all
CPU: 2Ghz 2x
RAM: 2GB
HDD: 10GB
Anbindung: 100mbit
OS: Debian
auch habe ich mich schon des längerem mit iptables und der suche von google befast und baue ständich mein wissen aus.
Jedoch habe ich ein problem mit meinem neuen packetfilter. Sobald dieser geladen ist bekomme ich oft timeouts vom server
die erst nach einem erneuten laden der jeweiligen webseite auf dem vps verschwindet und dan einige zeit ohne timeout leuft.
Das Problem taucht sowohl als auch ohne last auf.
Wir haben am tag ca. 300-400 views und durchschnitlich 30-50 kleichzeitich angemeldete User Online.
Als Forensoftware kompt ein vBulletin zum einsatz. PHP wurde mit Suhosin v0.9.12 gehärtet desweiteren is ein APC(Alternative PHP Cache) installiert.
PHP und MySQL befindet sich in der Version 5.2.x-x.
Das system selber ist rundum gut abgesichert und ich halte es stäts uptodate bis auf den kernel da dieser beim vps vom hoster festgelegt würd *leider*
Verzichte auf Dienste wie fail2ban oder Denyhost , sicher den SSH bsp durch Keyfile und root verbot + port verschoben und an ip-range meines ips gebunden.
sowie auf zweite netzwerkschnitstelle gebunden die für die user unbekant ist.
Wie gesargt das problem taucht aufem ganzen server auf bsp ssh / ts2 / webserver und das auch zu zeiten wo kein bedrieb ist!
Code: Select all
uname -r
Code: Select all
2.6.18-92.1.18.el5.028stab060.2
Code: Select all
#!/bin/sh
# Lege pfard zu iptables fest
# iptables = /sbin/iptables
# Lese zu Blockende ip's ein
BADIPS="$(cat /root/allbadips.txt|grep -v -E "^#")"
case "$1" in
start)
echo "Starte Firewall..."
# Alle bestehenden Regeln loeschen
iptables -F
iptables -X
# Setze Default Policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Ueber Loopback alles erlauben
iptables -I INPUT -i lo -j ACCEPT
iptables -I OUTPUT -o lo -j ACCEPT
# Max. Anzahl der Verbindungen die gehalten werden können.
echo "4096" > /proc/sys/net/ipv4/ip_conntrack_max
# Erlaube traffic zwischen lo und venet0
iptables -A INPUT -i venet0 -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o venet0 -d 127.0.0.1 -j ACCEPT
iptables -A INPUT -i lo -s 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -o lo -d 127.0.0.1 -j ACCEPT
# Connection-Tracking aktivieren
iptables -A OUTPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#Blocke alle ip's die in /root/allbadips.txt stehen!
for ip in $BADIPS
do
iptables -A INPUT -s $ip -j DROP
iptables -A OUTPUT -d $ip -j DROP
done
# SYN-Flood Protect
iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 3 -j RETURN
iptables -A syn-flood -j DROP
# Schütze SSH-Port gegen SYN Attacken(9986)
iptables -A INPUT -p tcp --syn --dport 9986 -j ACCEPT
iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 4 -j ACCEPT
iptables -A INPUT -p tcp --syn -j DROP
# Port-Scan Protect
iptables -N portscan
iptables -A portscan -m limit --limit 1/sec --limit-burst 2 -j RETURN
iptables -A portscan -m limit -j LOG --log-prefix "iptables scanned: "
# Schutz vor IP Stealth Scans
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP
# Schutz vor IP Spoofing ( Senderadresse ist privat)
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 172.16.0.0/12 -j DROP
iptables -A INPUT -s 192.168.0.0/16 -j DROP
iptables -A INPUT -s 224.0.0.0/4 -j DROP
iptables -A INPUT -s 240.0.0.0/4 -j DROP
iptables -A INPUT -d 255.255.255.255 -j DROP
# Drope alle XMAS packete
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# Drope alle NULL packete
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Allgemeine Regeln fuer ICMP
iptables -A INPUT -p icmp -j DROP
# Drope bad_incoming source ip adressen
iptables -A INPUT -s 0.0.0.0/8 -j DROP
iptables -A INPUT -s 10.0.0.0/8 -j DROP
iptables -A INPUT -s 192.168.0.0/16 -j DROP
iptables -A INPUT -s 224.0.0.0/3 -j DROP
# Korrupte Datenpackete Zurückweisen
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A OUTPUT -m state --state INVALID -j DROP
#Regelwerk für Port 80 (WWW)
iptables -A INPUT -p TCP -s 0/0 --sport 1024:65535 -d xx.xx.xx --dport 80 -j ACCEPT
iptables -A OUTPUT -p TCP -s xx.xx.xx --sport 80 -d 0/0 --dport 1024:65535 -j ACCEPT
#Regelwerk für Port 9986 (SSH)
iptables -A OUTPUT -p tcp -s xx.xx.xx --sport 513:65535 -d 0/0 --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --sport 9986 -d xx.xx.xx --dport 513:65535 -j ACCEPT
# Regelwerk für Port 7777 (Teamspeack2 UDP)
iptables -A OUTPUT -p udp -s xx.xx.xx --dport 7777 -j ACCEPT
iptables -A INPUT -p udp -s 0/0 --dport 7777 -j ACCEPT
# Regelwerk für Port 14555 (Teamspeack2 WebInerface)
iptables -A INPUT -p TCP -s 0/0 --sport 1024:65535 -d xx.xx.xx --dport 14555 -m state --state NEW -j ACCEPT
iptables -A OUTPUT -p TCP -s xx.xx.xx --sport 14555 -d 0/0 --dport 1024:65535 -m state --state NEW -j ACCEPT
# Regelwerk für Port 51234 (Teamspeack2 TCP-Query Port)
iptables -A OUTPUT -p udp -s xx.xx.xx --dport 51234 -j ACCEPT
iptables -A INPUT -p udp -s 0/0 --dport 51234 -j ACCEPT
# Rausgehende ICMP Packete
iptables -A OUTPUT -p icmp -s xx.xx.xx -d 0/0 -j ACCEPT
iptables -A INPUT -p icmp -s 0/0 -d xx.xx.xx -j ACCEPT
iptables -A OUTPUT -p icmp -s xx.xx.xx -d 0/0 -j ACCEPT
iptables -A INPUT -p icmp -s 0/0 -d xx.xx.xx -j ACCEPT
# Rausgehendes traceroute
iptables -A OUTPUT -p udp -s xx.xx.xx --sport 1024:65535 -d 0/0 --dport 33434:33523 -j ACCEPT
iptables -A OUTPUT -p udp -s xx.xx.xx --sport 1024:65535 -d 0/0 --dport 33434:33523 -j ACCEPT
# bestehende Verbindungen akzeptieren
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Ab hier alles dropen
iptables -A INPUT -s 0/0 -j DROP
iptables -A OUTPUT -d 0/0 -j DROP
;;
stop)
echo "Stoppe Firewall..."
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
;;
restart|reload|force-reload)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/firewall (start|stop)"
exit 1
;;
esac
#esac
exit 0
Ich hoffe ihr habt nun genug infos um die sachlage zu bewerten.
Desweiteren wolte ich wissen ob es ratsam ist einfach blind die oben geschriebenen regeln einfach nur zu dropen oder ob
mein probem damit gelöst were wenn ich die packete die ich filtern möchte etc rejecte sie also nur verwärfe da ein zurückweisen
eines packetes ja auch rechenzeit benöticht.
Der Server stand unter DDoS wodurch ich mich entschloss diesen packetfilter zu basteln wobei der ddos nun vorbei ist.
zumindest zeichnet sich nichs deratickes in protokollen oder der netstat ausgabe nieder. der DDoS kam von 1-2 RootServern
dich ich mitlerweile abused habe sowie die ips in die allbadip.txt gelegt habe die ganz am anfang von dem script eingelesen würd
und mittels iptables regel gedropt.
Das der Server icmp verbietet hat auch einen grund da ichs einfach besser befant wenn die user die ping zeiten nicht wissen
um scriptkiddys keinen eventuellen rückschluss zu geben sowie portscanning.
auf dem Server selber laufen folgende Dienste:
Code: Select all
- nginx als webcache
- lighttpd auf localhost gebunden
- php5 als fastcgi
- teamspeack2 Server mit max. 30 Slot's
nicht verbesserbar zumindest aber versuch ich so leserlich zu schreiben wie es mir möglich ist(Ja ich kenne das Firfox PlugIn!)
Ich hoffe ihr könt mir helfen den ich bin mitlerweile am verzeweifeln!
lg
Xterm