|
När jag kom till företaget i morse kände jag mig ganska långsam när jag loggade in på företagets officiella webbplats, loggade in på servern för att kontrollera åtkomststatusen på den officiella webbplatsen: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 GRUNDADE 59 ANSLUTEN 589 SYN_RECV 15 STREAM SYN är faktiskt så hög, fortsätt spåra SYN:n som skickas av dessa IP-adresser: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sortera | Uniq -C | sortera -nr | mer 570 x.x.x.x (IP-adressen är inte skriven, det är en IP till Shandong Zaozhuang Unicom), men denna IP har skickat så många SYN-förfrågningsanslutningar, och samtidigheten med vår webbserver är inte särskilt hög, så att normala användarförfrågningar inte kan besvaras och sidan kan inte öppnas. Eftersom hårdvarubrandväggen hanteras av gruppens IT-avdelning har jag ingen befogenhet, så jag kan bara vidta vissa åtgärder på den lokala servern för att delvis mildra SYN-attacken. Först och främst, låt oss prata om attackprincipen i SYN: I TCP/IP-protokollet tillhandahåller TCP-protokollet pålitliga anslutningstjänster genom att använda ett trevägshandskakning för att etablera en anslutning. Första handskakningen: När en anslutning upprättas skickar klienten ett syn-paket (syn=j) till servern och går in i SYN_SEND-tillståndet, i väntan på att servern ska bekräfta. Det andra handskaket: När servern tar emot SYN-paketet måste den bekräfta kundens SYN (ack=j+1) och även skicka ett SYN-paket (syn=k), det vill säga SYN+ACK-paket, varvid servern går in i SYN_RECV-tillståndet. Tredje handskakningen: Klienten tar emot SYN+ACK-paketet från servern och skickar bekräftelsepaketet ACK (ack=k+1) till servern. Efter tre handskakningar börjar klienten och servern överföra data.
Om användaren initierar en anslutningsförfrågan med servern bara för att skaka hand för andra gången och inte svarar servern, kommer servern att fortsätta vänta på användarens bekräftelse. Så vi gör följande ändringar direkt från SYN-anslutningen: Kontrollera standardkonfigurationen för SYN i Linux: [root@web ~]# sysctl -a | grep _syn net.ipv4.tcp_max_syn_backlog = 1024 net.ipv4.tcp_syncookies = 1 net.ipv4.tcp_synack_retries = 5 net.ipv4.tcp_syn_retries = 5 tcp_max_syn_backlog är längden på SYN-kön, och att öka SYN-köens längd kan rymma fler nätverksanslutningar som väntar på att kopplas upp. tcp_syncookies är en strömbrytare för att slå på SYN-cookiefunktionen, vilket kan förhindra partiella SYN-attacker. tcp_synack_retries och tcp_syn_retries definierar antalet återförsöksanslutningar för SYN:en och minskar standardparametrarna för att kontrollera antalet SYN-anslutningar så mycket som möjligt. Följande är parametrarna jag har ändrat, vilka kan ändras beroende på den faktiska situationen på min server: [root@web ~]# mer /etc/rc.d/rc.local #!/bin/sh # Detta scrip{filter}t kommer att exekveras *efter* alla andra init scrip{filter}ts. # Du kan lägga in dina egna initialiseringsgrejer här om du inte gör det # vill göra hela Sys V-stilen init-grejerna. Tryck på /var/lock/subsys/local ulimit -HSn 65535 /usr/local/apache2/bin/apachectl start ##### sysctl -w net.ipv4.tcp_max_syn_backlog=2048 sysctl -w net.ipv4.tcp_syncookies=1 sysctl -w net.ipv4.tcp_synack_retries=3 sysctl -w net.ipv4.tcp_syn_retries=3 För att konfigurationen ska träda i kraft omedelbart utan att starta om servern kan den utföras #sysctl -w net.ipv4.tcp_max_syn_backlog=2048 #sysctl -w net.ipv4.tcp_syncookies=1 #sysctl -w net.ipv4.tcp_synack_retries=3 #sysctl -w net.ipv4.tcp_syn_retries=3 Vissa gillar att använda åtkomstkontrolllistor för att förhindra SYN-attacker, vilket saktar ner SYN-attacker till viss del: Syn-flodattack #iptables -A INPUT -p tcp --syn -m gräns --gräns 1/s -j ACCEPTERA --begränsa 1/s begränsa antalet syn-samtidighet till 1 gång per sekund Antiportskanning # iptables -A FORWARD -p tcp --tcp-flaggor SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPTERA Dödens ping # iptables -A FORWARD -p icmp --icmp-typ ekoförfrågan -m gräns --gräns 1/s -j ACCEPTERA #>iptables-save >/etc/sysconfig/iptables För att se, #iptables -L ACCEPTERA TCP – var som helst var som helst tcp-flaggor: FIN,SYN,RST,ACK/SYN gräns: genomsnitt 1/sek burst 5 ACCEPTERA TCP – var som helst var som helst tcp-flaggor: FIN,SYN,RST,ACK/RST gräns: genomsnitt 1/sekund burst 5 ACCEPTERA icmp – var som helst var som helst icmp ekoförfrågningsgräns: genomsnitt 1/sek burst 5 Kontrollera syn-anslutningen igen: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sortera | Uniq -C | sortera -nr | mer 20 10.92.10.220 1 125.43.36.199 Uppenbarligen har antalet SYN-anslutningar minskat.
|