Portál AbcLinuxu, 7. května 2025 12:33
Nazdar - neviete prosim, ako zistit presnu pricinu takychto hlasok? Tusim nejaky utok, ale viac neviem:
[5805319.745570] net_ratelimit: 1252 callbacks suppressed
[5805319.745572] dst cache overflow
Raz za cas mi vyskocia, traffic k serveru sa zdvihne tak na 2-5 minut na cca 10 nasobok (z ~20Mbps na ~200Mbps; opacny smer sa nemeni), load mi stupne z 2-3 na okolo 25 a zacne to pisat toto pomerne dost rychlo (a velakrat). Vsetko, bohuzial, logovat nemozem, lebo aj pri beznom trafficu je to vela dat a problem sa vyskytuje len naozaj sporadicky (ale aj tak mna stve). Pocas tohoto sa naviac obycajne ani nemozem pripojit k serveru, aby som presne zistil, o co ide.
Mate nejaky tip, ako to diagnostikovat a pripadne riesit? Idealne by bolo, aby to same naplno nevytazilo stroj (tj nieco ako regexp na kazdy paket nie je dobre riesenie)
Iptables mam, loguju a dropuju velke mnozstvo connection z 1 IP (-m connlimit) na moje sluzby / otvorene porty, neobycajne pakety a pod, ale tu nic take nezachytili.
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 94.229.35.129 0.0.0.0 UG 100 0 0 eth0
94.229.35.128 0.0.0.0 255.255.255.224 U 0 0 0 eth0
IPtables:
#let it be... (when it works, then it is OK)
iptables -F
iptables -X
iptables -I INPUT -i lo -j ACCEPT
#drop spoofed packets from private subnets
iptables -A INPUT -i eth0 --src 192.168.0.0/16 -j DROP
iptables -A INPUT -i eth0 --src 172.16.0.0/12 -j DROP
iptables -A INPUT -i eth0 --src 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth0 --src 127.0.0.0/8 -j DROP
iptables -N logdrop
iptables -A logdrop -m limit --limit 1/hour --limit-burst 5 -j LOG --log-prefix "Logdrop: "
iptables -A logdrop -j DROP
iptables -N pscanblock
iptables -A pscanblock -m limit --limit 1/min -j LOG --log-prefix "Blocking portscan: "
iptables -A pscanblock -m recent --set --name portscan
#drop invalid
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
#ssh
iptables -A INPUT -p tcp -m tcp --dport 22 -s 1.2.3.4 -j ACCEPT #ja, upravene
iptables -A INPUT -p tcp -m tcp --dport 22 -j REJECT
ip6tables -A INPUT -p tcp -m tcp --dport 22 -j REJECT
#block smtp
iptables -A INPUT -p tcp -m tcp --dport 25 -j TARPIT
ip6tables -A INPUT -p tcp -m tcp --dport 25 -j DROP
#ntp with some exceptions
iptables -A INPUT -p udp -m udp --dport 123 -s 195.113.144.201 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 123 -s 147.231.19.43 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 123 -s 193.171.23.163 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 123 -s 80.50.231.226 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 123 -s 83.19.137.3 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 123 -j REJECT
ip6tables -A INPUT -p udp -m udp --dport 123 -j REJECT
################ CONNLIMITS ####################################3
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -m limit --limit 1/hour --limit-burst 5 -j LOG --log-prefix " Too much connections "
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 30 -m limit --limit 1/hour --limit-burst 5 -j LOG --log-prefix " Too much connections "
iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j TARPIT
iptables -A INPUT -p tcp --dport 443 -m connlimit --connlimit-above 30 -j TARPIT#block too many connections
iptables -A INPUT -p tcp --dport 23000:30001 -m connlimit --connlimit-above 20 -j LOG --log-prefix " Too much connections "
iptables -A INPUT -p tcp --dport 23000:30001 -m connlimit --connlimit-above 3 -j LOG --log-prefix "CONNLIMIT: " --log-level debug
#block invalid packets
iptables -A INPUT -p udp --dport 23000:30001 -m length --length 0:28 -m limit --limit 1/hour --limit-burst 5 -j LOG --log-prefix " Small_packets "
iptables -A INPUT -p udp --dport 23000:30001 -m length --length 0:28 -j DROP#deny or log everything 60 (can be 3600 or so) seconds after portscan
iptables -A INPUT -m recent --name portscan --rcheck --seconds 60 -j DROP # LOG --log-prefix "Pscantest: "
iptables -A INPUT -p tcp -m recent --name portscan --remove
iptables -A INPUT -p tcp ! --dport 80 -m state --state new -m recent --set --name NEWCONN
iptables -A INPUT -p tcp -m recent --update --seconds 10 --hitcount 10 --rttl --name NEWCONN -j pscanblock
Upravy proc (sysctl; ine upravy asi nemam):
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0
net.ipv4.tcp_timestamps = 0
ip route list cache
). Především porovnat v klidu a popisované zátěži.
Metrika 100 nema ziadny dovod; je to tak "by default" (nemenil som to umyselne). Ale neviem, comu moze vadit - ved to by malo rozhodovat len pri rovnako cenenych routach, nie?
Potom pripadne aspon na prvy pohlad - co je na tych pravidlach "gulasoidne"?
Pravděpodobně bude potřeba zvýšit hodnoty
/proc/sys/net/ipv4/route/gc_thresh /proc/sys/net/ipv4/route/max_size
tak, aby se celkový počet dst_entry
položek udržoval kolem gc_thresh
(nebo níž) a v žádném případě nedosahoval k max_size
. Aktuální počet najdete v /proc/net/stats/rt_cache
jako "entries" (šestnáctkově, měla by to být první hodnota na řádku, na každém stejná).
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.