|
Ketika saya tiba di perusahaan pagi ini, saya merasa cukup lambat ketika saya masuk ke situs web resmi perusahaan, masuk ke server untuk memeriksa status akses situs web resmi: [root@web ~]# netstat -anp |awk '{print $6}'|sort|uniq -c |sort -rn 172 DIDIRIKAN 59 TERHUBUNG 589 SYN_RECV 15 ALIRAN SYN sebenarnya sangat tinggi, terus lacak SYN yang dikirim oleh IP tersebut: [root@tweb ~]# netstat -an | grep SYN | awk '{cetak $5}' | awk -F: '{print $1}' | urutkan | Uniq -C | urutkan -nr | lebih 570 x.x.x.x (IP tidak tertulis, ini adalah IP dari Shandong Zaozhuang Unicom), tetapi IP yang satu ini telah mengirim begitu banyak koneksi permintaan SYN, dan konkurensi server web kami tidak terlalu tinggi, sehingga permintaan pengguna normal tidak dapat dihubungkan, dan halaman tidak dapat dibuka. Karena firewall perangkat keras dikelola oleh departemen TI grup, saya tidak memiliki wewenang, jadi saya hanya dapat mengambil beberapa tindakan di server lokal untuk mengurangi sebagian serangan SYN. Pertama-tama, mari kita bicara tentang prinsip serangan SYN: Dalam protokol TCP/IP, protokol TCP menyediakan layanan koneksi yang andal dengan menggunakan jabat tangan tiga arah untuk membuat koneksi. Jabat tangan pertama: Saat membuat koneksi, klien mengirimkan paket syn (syn=j) ke server dan memasuki status SYN_SEND, menunggu server mengonfirmasi. Jabat tangan kedua: Ketika server menerima paket SYN, server harus mengonfirmasi SYN pelanggan (ack=j+1), dan juga mengirim paket SYN (syn=k), yaitu paket SYN+ACK, pada saat itu server memasuki status SYN_RECV. Jabat tangan ketiga: Klien menerima paket SYN+ACK dari server dan mengirimkan paket konfirmasi ACK (ack=k+1) ke server. Setelah tiga jabat tangan, klien dan server mulai mengirimkan data.
Jika pengguna memulai permintaan koneksi dengan server hanya untuk berjabat tangan untuk kedua kalinya dan tidak merespons server, server akan terus menunggu konfirmasi pengguna. Jadi kami membuat perubahan berikut langsung dari koneksi SYN: Periksa konfigurasi SYN default di 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 adalah panjang antrean SYN, dan meningkatkan panjang antrean SYN dapat mengakomodasi lebih banyak koneksi jaringan yang menunggu untuk dihubungkan. tcp_syncookies adalah sakelar untuk mengaktifkan fungsi cookie SYN, yang dapat mencegah serangan SYN parsial. tcp_synack_retries dan tcp_syn_retries menentukan jumlah koneksi coba lagi untuk SYN, dan mengurangi parameter default untuk mengontrol jumlah koneksi SYN sebanyak mungkin. Berikut ini adalah parameter yang telah saya modifikasi, yang dapat dimodifikasi sesuai dengan situasi aktual server saya: [root@web ~]# lebih /etc/rc.d/rc.local #!/bin/sh # Scrip{filter}t ini akan dieksekusi *setelah* semua scrip{filter}ts init lainnya. # Anda dapat memasukkan hal-hal inisialisasi Anda sendiri di sini jika Anda tidak melakukannya # ingin melakukan hal-hal init gaya Sys V penuh. sentuh /var/lock/subsys/lokal 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 Agar konfigurasi segera berlaku tanpa memulai ulang server, itu dapat dilakukan #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 Beberapa orang suka menggunakan daftar kontrol akses untuk mencegah serangan SYN, yang memperlambat serangan SYN sampai batas tertentu: Serangan banjir syn #iptables -A INPUT -p tcp --syn -m limit --limit 1/s -j ACCEPT --limit 1/s membatasi jumlah konkurensi syn menjadi 1 kali per detik Pemindaian anti-port # iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT Ping kematian # iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT #>iptables-simpan >/etc/sysconfig/iptables Untuk melihat, #iptables -L ACCEPT tcp -- di mana saja di mana saja bendera tcp: FIN, SYN, RST, ACK / SYN batas: rata-rata 1 / detik burst 5 ACCEPT tcp -- di mana saja di mana saja bendera tcp: FIN, SYN, RST, ACK / RST batas: rata-rata 1 / detik burst 5 ACCEPT icmp -- di mana saja di mana saja batas permintaan gema icmp: rata-rata 1/detik burst 5 Periksa koneksi syn lagi: [root@web ~]# netstat -an | grep SYN | awk '{cetak $5}' | awk -F: '{print $1}' | urutkan | Uniq -C | urutkan -nr | lebih 20 10.92.10.220 1 125.43.36.199 Jelas jumlah koneksi SYN telah turun.
|