Niklas Höglund wrote:
tis 2004-12-28 klockan 15:52 +0100 skrev Johan Segernäs:
On 2004-12-28 13:23 +0100 or thereabouts, Per Eric Rosén wrote:
Har du provat syn-kakor? (vet inte om det säkert hjälper, men dock)
se närmaste linuxkärnedokumentation, eller http://cr.yp.to/syncookies.html
Syncookies är på men det är ingen vanlig hederlig söt syn-flood där det bara
skickas en jävla massa synar som man kan klara sig hyfsat ifrån.
Oerhört svårt att skilja ut ddos-junket från vanlig trafik. :/
Jag har aldrig administrerat en seriös Apache-server, men min första
reaktion är att det bästa vore om man kunde fixa Apache så att den
klarar av belastningen. Se följande simpla benchmark av Apache mot
Yaws:
http://www.sics.se/~joe/apachevsyaws.html
Kan man kanske konfigurera Apache till att göra trådningen på något
annat sätt så att brutna uppkopplingar inte kostar så mycket resurser,
minska tiden innan den avbryter en uppkoppling för att den är för
långsam, köra en proxy-server framför Apache, eller kanske byta ut
Apache mot någon resurssnålare server som Boa eller Yaws?
Jag vet inte om det skulle räcka, men det är ju värt att fundera över
andra lösningar.
Eller kanske dessa inställningar med Iptables hjälper något:
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW
-j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN
-j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP
/sbin/iptables -I INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP
/sbin/iptables -I INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -I INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -j DROP
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,ACK,URG -m limit --limit 3/sec
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -m
limit --limit 3/sec
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -m
limit --limit 3/sec
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN -m limit --limit 3/sec
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN,PSH,URG -m limit --limit 3/sec
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG NONE -m limit --limit 3/sec
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags
FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -m limit --limit 3/sec
/sbin/iptables -A INPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m
state --state NEW -m limit --limit 3/sec
/sbin/iptables -A INPUT -p tcp -m tcp ! --tcp-flags SYN,RST,ACK SYN -m
state --state NEW -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP #
SYN and FIN are set
/sbin/iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP #
SYN and RST are set
echo 2 > /proc/sys/net/ipv4/tcp_synack_retries
/sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN SYN,FIN -m limit
--limit 5/minute -j LOG -log-level notice --log-prefix "$
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN SYN,FIN -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST SYN,RST -m limit
--limit 5/minute -j LOG -log-level notice --log-prefix "$
iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST SYN,RST -j DROP
iptables -N syn-flood
iptables -A INPUT -i eth0 -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP
iptables -A INPUT -p tcp -m state --state NEW ! --syn -j DROP
Sen finns det ju även en hel del med inställningar i Apache som sagt.
Som t.ex:
# Timeout: The number of seconds before receives and sends time out.
#
Timeout 1
# KeepAlive: Whether or not to allow persistent connections (more than
# one request per connection). Set to "Off" to deactivate.
#
KeepAlive On
# MaxKeepAliveRequests: The maximum number of requests to allow
# during a persistent connectio