|
Bu sabah şirkete vardığımda, şirketin resmi web sitesine giriş yapıp sunucuya giriş yapıp resmi web sitesinin erişim durumunu kontrol ettiğimde oldukça yavaş hissettim: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 KURULUŞ 59 BAĞLANDI 589 SYN_RECV 15 STREAM SYN aslında çok yüksek, bu IP'lerin gönderdiği SYN'i takip etmeye devam edin: [root@tweb ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | Sıralama | uniq -c | sort -nr | Daha fazlası 570 x.x.x.x (IP yazılı değil, Shandong Zaozhuang Unicom'un bir IP'si), ancak bu IP çok sayıda SYN isteği bağlantısı gönderdi ve web sunucumuzun eşdeğeri çok yüksek değil, bu yüzden normal kullanıcı talepleri karşılanamıyor ve sayfa açılamıyor. Donanım güvenlik duvarı grubun BT departmanı tarafından yönetildiği için yetkim yok, bu yüzden yerel sunucuda SYN saldırısını kısmen azaltmak için sadece bazı önlemler alabiliyorum. Öncelikle, SYN'nin saldırı ilkesinden bahsedelim: TCP/IP protokolünde, TCP protokolü üç yönlü el sıkışma kullanarak güvenilir bağlantı hizmetleri sağlar. İlk el sıkışma: Bağlantı kurulduğunda, istemci sunucuya bir syn paketi (syn=j) gönderir ve sunucunun onaylamasını bekleyerek SYN_SEND duruma girer. İkinci el sıkışma: Sunucu SYN paketini aldığında, müşterinin SYN'ini (ack=j+1) doğrulamalı ve ayrıca bir SYN paketi (syn=k), yani SYN+ACK paketi göndermelidir; bu zaman sunucu SYN_RECV duruma girer. Üçüncü el sıkışma: İstemci sunucudan SYN+ACK paketini alır ve ACK (ack=k+1) onay paketini sunucuya gönderir. Üç el sıkışmadan sonra, istemci ve sunucu veri iletimi başlatır.
Kullanıcı sunucuyla bağlantı talebi başlatıp ikinci kez el sıkışıp sunucuya yanıt vermezse, sunucu kullanıcının onayını beklemeye devam eder. Bu yüzden doğrudan SYN bağlantısından aşağıdaki değişiklikleri yapıyoruz: Linux'ta varsayılan SYN yapılandırmasını kontrol edin: [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, SYN kuyruğunun uzunluğudur ve SYN kuyruğunun uzunluğunun artırılması, bağlanmayı bekleyen daha fazla ağ bağlantısını barındırabilir. tcp_syncookies, kısmi SYN saldırılarını önleyebilen SYN çerez fonksiyonunu açmak için bir anahtardır. tcp_synack_retries ve tcp_syn_retries, SYN için tekrar deneme bağlantılarının sayısını tanımlar ve SYN bağlantılarının sayısını mümkün olduğunca kontrol etmek için varsayılan parametreleri azaltırlar. Aşağıda, sunucumun gerçek durumuna göre değiştirilebilen değiştirdiğim parametreler şunlardır: [root@web ~]# daha fazla /etc/rc.d/rc.local #!/bin/sh # Bu scrip{filter}t, diğer tüm init scrip{filter}t'lerden *sonra* çalıştırılır. # Eğer koymazsan buraya kendi başlatma bilgilerini koyabilirsin # tam Sys V tarzı init işlerini yapmak istiyorum. /var/lock/subsys/local dokun 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 Yapılandırmanın sunucuyu yeniden başlatmadan hemen etki altına girmesi için bu işlem gerçekleştirilebilir #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 Bazı kişiler SYN saldırılarını önlemek için erişim kontrol listelerini kullanmayı tercih eder, bu da SYN saldırılarını belli bir ölçüde yavaşlatır: Syn flood saldırısı #iptables -A GİRİD -p tcp --syn -m limit --limit 1/s -j KABUL EDİL --limit 1/s syn eşdeğerlik sayısını saniyede 1 kez ile sınırlar Port karşıtı tarama # iptables -A İLERİ -p tcp --tcp-bayraklar SYN,ACK,FIN,RST RST -m limit --limit 1/s -j KABUL EDİL Ölüm Pingi # iptables -A İLERİ -p icmp --icmp-tip echo-request -m limit --limit 1/s -j KABUL EDİL #>iptables-save >/etc/sysconfig/iptables İzlemek için #iptables -L TCP'yi KABUL EDİN -- her yerde, her yerde tcp bayrakları:FIN,SYN,RST,ACK/SYN sınır: ortalama 1/saniye burst 5 TCP'yi KABUL EDİN -- her yerde, her yerde tcp bayrakları:FIN,SYN,RST,ACK/RST sınırı: ortalama 1/saniye burst 5 ICMP KABUL EDİN -- her yerde herhangi bir yerde icmp echo-request sınırı: ortalama 1/saniye burst 5 Syn bağlantısını tekrar kontrol et: [root@web ~]# netstat -an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | Sıralama | uniq -c | sort -nr | Daha fazlası 20 10.92.10.220 1 125.43.36.199 Açıkça SYN bağlantılarının sayısı azaldı.
|