Berbagi teknologi

[Berbagi HBZ] Bagaimana menghindari serangan banjir TCP

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Prinsip serangan banjir konvensional

  1. Ketika jabat tangan kedua TCP membuat semi-koneksi, serangan banjir dapat diluncurkan pada saat ini
  2. Artinya, sejumlah besar permintaan memulai koneksi TCP. Selama jabat tangan kedua, server akan memasukkan permintaan ini ke dalam antrian semi-koneksi. Karena klien penyerang jahat ini tidak akan mengkonfirmasi jabat tangan ketiga, semi-koneksi ini tidak dapat diproses. Rilis, server akan menunggu sampai waktu habis. Pada saat ini, antrian semi-koneksi akan terisi, dan permintaan koneksi normal tidak dapat dijawab.

Cara mengatasi serangan banjir secara umum

  1. Ketika mode sinkronisasi diaktifkan, server akan menghitung nilai hash (SHA1) berdasarkan (alamat sumber, port sumber, alamat tujuan, port tujuan, dll.) dan nomor acak selama jabat tangan pertama, dan kemudian jabat tangan kedua. akan menggunakan ini Sinkronisasi yang dihasilkan dikembalikan ke klien. Ketika klien mengonfirmasi jabat tangan ketiga, ia akan mengirimkan sinkronisasi ke server. Server akan memverifikasi apakah sinkronisasi tersebut cocok dengan yang sebelumnya didirikan.
  2. Keuntungan dari pendekatan ini: Ketika server tidak menerima atau syncookies yang diterima tidak cocok, koneksi TCP tidak akan dibuat. Dan ketika menggunakan syncookies, server tidak akan mempertahankan antrian semi-koneksi, yaitu tidak ada keadaan semi-koneksi. Karena menggunakan syncookies sebagai perbandingan, tidak diperlukan semi-koneksi, sehingga menghindari antrian semi-koneksi terisi dan tidak dapat menerima koneksi baru.

Skenario yang tidak dapat diselesaikan oleh syncookies

  1. Ketika serangan DDOS dalam jumlah besar diluncurkan, metode syncookies juga akan lumpuh. Alasan kelumpuhan ini adalah karena CPU harus menghitung syncookies dalam jumlah besar, sehingga menyebabkan CPU dimatikan. Karena menghitung syncookies juga menghabiskan kinerja CPU, CPU tidak dapat menangani DDOS dalam jumlah besar. Saat ini, satu-satunya pilihan adalah meningkatkan bandwidth dan mengonfigurasi hard cap.

Solusi lainnya

  1. Meningkatkan antrian semi-koneksi dan antrian koneksi penuh (cara ini pada dasarnya tidak efektif untuk serangan besar-besaran)
  2. Mengurangi jumlah transmisi ulang SYN+ACK (TCP mengandalkan transmisi ulang untuk menjaga koneksi tetap stabil), yaitu ketika menerima serangan banjir dari sejumlah besar permintaan sinkronisasi, server akan terus mencoba lagi jika tidak dapat menerima respons hingga jumlah maksimumnya. Kurangi jumlah maksimum ini

Cara mengecek untuk mengetahui apakah Anda terkena banjir

1. 先进行流量查看:
sar -n DEV 1 -h

然后只看eth0即可-->用rxkb/s 和 rxpck/s 这两列相除-->如果得出的包就50-60几字节,
那就说明是小包搞鬼,有可能遭受洪水攻击了,一般来说最大MTU = 1460

2. 如果发现是小包搞鬼,那就再进行网络抓包, 输入如下命令
tcpdump -i eth0 -n tcp port 80

3. 看有多少个[S], 这个表示发起TCP请求阶段,如果[S]过多,那就说明是洪水攻击,这是洪水攻击的特征


4. 进一步确认是洪水攻击,查询半连接的池子大小,以及当前半连接数量
半连接总大小: cat /proc/sys/net/ipv4/tcp_max_syn_backlog
当前半连接数: ss -s 或 netstat -n -p | grep SYN_RECV | wc -1



[S]: SYN,开始连接
[P]: PSH, 推送数据
[F]: FIN, 结束连接
[R]: RST, 重置连接
[.]: 没有Flag,可能是ACK 也可能是URG

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24