[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: ddos, iptables, shaping..



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 connection. Set to 0 to allow an unlimited amount.
# We recommend you leave this number high, for maximum performance.
#
MaxKeepAliveRequests 100

# KeepAliveTimeout: Number of seconds to wait for the next request from the
# same client on the same connection.
#
KeepAliveTimeout 1

# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
#
HostnameLookups off

Du skulle kunna prova att lägga in mod_bwshare och mod_dosevasive åxå.

Mvh

/Thomas



Reply to: