1. Ciri-ciri serangan ddos lapisan aplikasi
Lapisan aplikasi (lapisan ketujuh/lapisan http) serangan ddos biasanya dilancarkan oleh Trojan, yang boleh direka bentuk yang lebih baik Eksploitasi kelemahan sistem sasaran. Sebagai contoh, untuk sistem yang tidak dapat mengendalikan sejumlah besar permintaan serentak, hanya dengan mewujudkan sejumlah besar sambungan dan secara berkala menghantar sejumlah kecil paket data untuk mengekalkan sesi, sumber sistem boleh kehabisan, menjadikannya tidak dapat menerima permintaan sambungan baharu untuk mencapai tujuan DDoS. Serangan lain termasuk menghantar sejumlah besar permintaan sambungan untuk menghantar paket data yang besar. Oleh kerana serangan itu dimulakan oleh program kuda Trojan, penyerang boleh dengan cepat mewujudkan sejumlah besar sambungan dan mengeluarkan sejumlah besar permintaan dalam tempoh yang singkat.
Berikut ialah beberapa ciri DDoS yang boleh kita gunakan untuk menentang DDoS (termasuk tetapi tidak terhad kepada):
Serangan selalunya berpunca daripada beberapa IP atau segmen IP yang agak tetap , setiap IP mempunyai bilangan sambungan dan permintaan yang jauh lebih besar daripada pengguna sebenar. (Nota: Ini tidak bermakna bahawa semua permintaan sedemikian mewakili serangan DDoS. Dalam banyak seni bina rangkaian menggunakan NAT, ramai pelanggan menggunakan alamat IP get laluan untuk mengakses sumber rangkaian awam. Walau bagaimanapun, walaupun begitu, bilangan permintaan tersebut dan Nombor sambungan juga akan jauh lebih rendah daripada serangan ddos )
Oleh kerana serangan dihantar oleh Trojan dan tujuannya adalah untuk membebankan pelayan, kekerapan permintaan. akan jauh lebih tinggi daripada orang biasa.
ejen pengguna biasanya merupakan nilai bukan standard
perujuk kadangkala nilai yang mudah dikaitkan dengan serangan
2. Gunakan nginx dan nginx plus untuk menentang serangan ddos
Digabungkan dengan ciri-ciri serangan ddos yang disebutkan di atas, nginx dan nginx plus mempunyai banyak ciri yang boleh Untuk mempertahankan secara berkesan daripada serangan DDoS, kita boleh mencapai tujuan untuk menentang serangan DDoS dengan melaraskan trafik akses masuk dan mengawal trafik daripada proksi terbalik ke pelayan bahagian belakang.
1. Hadkan kelajuan permintaan
Tetapkan permintaan sambungan nginx dan nginx plus dalam julat yang munasabah daripada permintaan pengguna sebenar. Sebagai contoh, jika anda merasakan bahawa pengguna biasa boleh meminta halaman log masuk setiap dua saat, anda boleh menetapkan nginx untuk menerima permintaan daripada IP klien setiap dua saat (iaitu lebih kurang bersamaan dengan 30 permintaan seminit).
limit_req_zone $binary_remote_addr zone=one:10m rate=30r/m; server { ... location /login.html { limit_req zone=one; ... } }
Arahan `limit_req_zone` menyediakan zon memori kongsi yang dipanggil satu untuk menyimpan nilai kunci tertentu status permintaan, dalam contoh di atas ip klien ($binary_remote_addr). `limit_req` dalam blok lokasi mengehadkan akses kepada /login.html dengan merujuk satu kawasan memori yang dikongsi.
2. Hadkan bilangan sambungan
Tetapkan bilangan sambungan untuk nginx dan nginx plus dalam julat munasabah yang diminta oleh pengguna sebenar. Sebagai contoh, anda boleh menetapkan tidak lebih daripada 10 sambungan ke /store bagi setiap IP klien.
limit_conn_zone $binary_remote_addr zone=addr:10m; server { ... location /store/ { limit_conn addr 10; ... } }
Arahan `limit_conn_zone` menyediakan kawasan memori kongsi yang dipanggil addr untuk menyimpan keadaan nilai kunci tertentu, dalam contoh di atas ip klien ($binary_remote_addr). `limit_conn` dalam blok lokasi mengehadkan bilangan maksimum sambungan ke /store/ kepada 10 dengan merujuk kawasan memori kongsi addr.
3. Tutup sambungan perlahan
Sesetengah serangan DDoS, seperti slowlris, mengekalkan sesi dengan mewujudkan sejumlah besar sambungan dan menghantar beberapa paket data secara berkala. Untuk mencapai tujuan serangan, kitaran ini biasanya lebih rendah daripada permintaan biasa. Dalam kes ini kita boleh menahan serangan dengan menutup sambungan perlahan.
Arahan `client_body_timeout` digunakan untuk menentukan tamat masa untuk membaca permintaan klien dan perintah `client_header_timeout` digunakan untuk menetapkan tamat masa untuk membaca pengepala permintaan klien. Nilai lalai kedua-dua parameter ini ialah 60s Jika ditentukan bahawa serangan itu berasal dari alamat IP tertentu, kami boleh menambahkannya ke senarai hitam dan nginx tidak lagi menerima permintaan mereka. Contohnya, jika anda telah menentukan bahawa serangan itu datang daripada julat alamat IP daripada 123.123.123.1 hingga 123.123.123.16, anda boleh menetapkannya seperti ini:
server { client_body_timeout 5s; client_header_timeout 5s; ... }
Atau anda telah menentukan bahawa serangan itu datang daripada 123.123 .123.3, 123.123.123.5, 123.123.123.7 Beberapa IP boleh ditetapkan seperti ini: location / {
deny 123.123.123.0/28;
...
}
5 Tetapkan senarai putih IP
Jika tapak web anda sahaja. membenarkan akses kepada IP atau segmen IP tertentu, Anda boleh menggunakan perintah benarkan dan tolak bersama-sama untuk menyekat akses ke tapak web anda kepada hanya alamat IP yang anda tentukan. Seperti berikut, anda boleh menetapkan hanya pengguna intranet dalam segmen 192.168.1.0 untuk dibenarkan mengakses: Perintah
location / { deny 123.123.123.3; deny 123.123.123.5; deny 123.123.123.7; ... }
deny akan menafikan permintaan akses daripada semua IP lain kecuali segmen IP yang ditentukan oleh membenarkan.
6. Gunakan caching untuk pencukuran puncak trafik
Dengan menghidupkan fungsi caching nginx dan menetapkan parameter caching tertentu, anda boleh mengurangkan trafik daripada serangan , dan pada masa yang sama Ia juga boleh mengurangkan tekanan permintaan pada pelayan bahagian belakang. Berikut ialah beberapa tetapan berguna: Parameter pengemaskinian proxy_cache_use_stale memberitahu nginx bila untuk mengemas kini objek cache. Hanya permintaan kemas kini ke bahagian belakang diperlukan dan permintaan pelanggan untuk objek tidak memerlukan akses kepada pelayan bahagian belakang semasa cache sah. Apabila serangan dilakukan melalui permintaan yang kerap untuk fail, caching boleh mengurangkan bilangan permintaan ke pelayan bahagian belakang.
proxy_cache_key ` 命令定义的键值通常包含一些内嵌的变量(默认的键值 $scheme$proxy_host$request_uri 包含了三个变量)。如果键值包含 `$query_string` 变量,当攻击的请求字符串是随机的时候就会给 nginx 代理过重的缓存负担,因此我们建议一般情况下不要包含 `$query_string` 变量。
7. 屏蔽特定的请求
可以设置 nginx、nginx plus 屏蔽一些类型的请求:
针对特定 url 的请求
针对不是常见的 user-agent 的请求
针对 referer 头中包含可以联想到攻击的值的请求
针对其他请求头中包含可以联想到攻击的值的请求
比如,如果你判定攻击是针对一个特定的 url:/foo.php,我们就可以屏蔽到这个页面的请求:
location /foo.php { deny all; }
或者你判定攻击请求的 user-agent 中包含 foo 或 bar,我们也可以屏蔽这些请求:
location / { if ($http_user_agent ~* foo|bar) { return 403; } ... }
http_name 变量引用一个请求头,上述例子中是 user-agent 头。可以针对其他的 http 头使用类似的方法来识别攻击。
8. 限制到后端服务器的连接数
一个 nginx、nginx plus 实例可以处理比后端服务器多的多的并发请求。在 nginx plus 中,你可以限制到每一个后端服务器的连接数,比如可以设置 nginx plus 与 website upstream 中的每个后端服务器建立的连接数不得超过200个:
upstream website { server 192.168.100.1:80 max_conns=200; server 192.168.100.2:80 max_conns=200; queue 10 timeout=30s; }
`max_conns` 参数可以针对每一个后端服务器设置 nginx plus 可以与之建立的最大连接数。`queue` 命令设置了当每个后端服务器都达到最大连接数后的队列大小,`timeout` 参数指定了请求在队列中的保留时间。
9. 处理特定类型的攻击
有一种攻击是发送包含特别大的值的请求头,引起服务器端缓冲区溢出。nginx、nginx plus 针对这种攻击类型的防御,可以参考
[using nginx and nginx plus to protect against cve-2015-1635]
)
10. 优化nginx性能
ddos 攻击通常会带来高的负载压力,可以通过一些调优参数,提高 nginx、nginx plus 处理性能,硬抗 ddos 攻击,详细参考:
[tuning nginx for performance]
三、识别ddos攻击
到目前为止,我们都是集中在如何是用 nginx、nginx plus 来减轻 ddos 攻击带来的影响。如何才能让 nginx、nginx plus 帮助我们识别 ddos 攻击呢?`nginx plus status module` 提供了到后端服务器流量的详细统计,可以用来识别异常的流量。nginx plus 提供一个当前服务状态的仪表盘页面,同时也可以在自定义系统或其他第三方系统中通过 api 的方式获取这些统计信息,并根据历史趋势分析识别非正常的流量进而发出告警。
Atas ialah kandungan terperinci Cara menggunakan Nginx dan Nginx Plus untuk menentang serangan DDOS. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!