GNU/Linux >> Belajar Linux >  >> Linux

pengaturan sysctl untuk beban tinggi dan mencegah DDoS

Pengantar

Ada beberapa contoh berbeda dari konfigurasi kernel Linux di Internet untuk mendukung sejumlah besar koneksi, proyek web yang banyak dimuat, dan melawan serangan DDoS. Ini adalah contoh lain yang sudah bisa saya coba dalam praktik. Saya akan segera mengatakannya – itu lebih dari membantu saya. Cobalah dan Anda.

/etc/sysctl.conf opsi

Ada daftar opsi yang diperlukan untuk ditambahkan ke /etc/sysctl.conf :

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_max_orphans = 65536
net.ipv4.tcp_fin_timeout = 10
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_max_syn_backlog = 4096
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_mem = 50576   64768   98152
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
net.ipv4.tcp_orphan_retries = 0
net.ipv4.tcp_syncookies = 0
net.ipv4.netfilter.ip_conntrack_max = 16777216
net.netfilter.nf_conntrack_max = 16777216
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_sack = 1
net.ipv4.tcp_congestion_control = htcp
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.route.flush = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rfc1337 = 1
net.ipv4.ip_forward = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_echo_ignore_all = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 1000
net.core.rmem_default = 65536
net.core.wmem_default = 65536
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
fs.inotify.max_user_watches = 16777216

Dan sekarang tentang setiap opsi secara lebih rinci.

net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.send_redirects = 0

Jangan menerima atau mengirim paket pengalihan ICMP. Pengalihan ICMP dapat digunakan oleh penyerang untuk memodifikasi tabel perutean. Dianjurkan untuk mengaturnya ke “0 . Unit ini hanya masuk akal untuk host yang digunakan sebagai router.

net.ipv4.tcp_max_orphans = 65536

Nilai integer parameter tcp_max_orphans menentukan jumlah maksimum soket TCP yang valid dalam sistem yang tidak terhubung oleh filehandle pengguna mana pun. Ketika nilai ambang tercapai, senyawa yatim segera direset dengan peringatan. Ambang batas ini hanya membantu mencegah serangan DoS sederhana. Anda tidak boleh mengurangi nilai ambang (lebih baik meningkatkannya sesuai dengan persyaratan sistem, misalnya, setelah menambahkan memori. Setiap koneksi yatim menyerap sekitar 64 Kbyte memori yang tidak dapat ditukar).

net.ipv4.tcp_fin_timeout

net.ipv4.tcp_fin_timeout = 10

Parameter tcp_fin_timeout menentukan waktu ketika soket tetap dalam status FIN-WAIT-2 setelah ditutup oleh pihak lokal. Mitra mungkin tidak pernah menutup koneksi ini, jadi Anda harus menutupnya atas inisiatif Anda sendiri setelah batas waktu. Secara default, batas waktu adalah 60 detik. Dalam inti seri 2.2, nilai 180 detik biasanya digunakan dan Anda dapat menyimpan nilai ini, tetapi Anda tidak boleh lupa bahwa pada server WEB yang dimuat, Anda berisiko menghabiskan banyak memori untuk menyimpan koneksi mati setengah putus. Soket dalam status FIN-WAIT-2 kurang berbahaya dibandingkan FIN-WAIT-1 karena soket tersebut menyerap tidak lebih dari 1,5 Kbyte memori, tetapi dapat bertahan lebih lama.

tcp keepalive time

net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_keepalive_probes = 5

tcp_keepalive_time Variabel menentukan seberapa sering koneksi harus diperiksa jika sudah lama tidak digunakan. Nilai variabel masuk akal hanya untuk soket yang dibuat dengan flag SO_KEEPALIVE. Variabel integer tcp_keepalive_intvl mendefinisikan interval sampling. Produk tcp_keepalive_probes * tcp_keepalive_intvl menentukan waktu setelah koneksi akan terputus jika tidak ada tanggapan. Secara default, intervalnya adalah 75 detik, yaitu, waktu pemutusan tanpa adanya respons adalah sekitar 11 menit.

net.ipv4.tcp_max_syn_backlog = 4096

Nilai integer dalam file tcp_max_syn_backlog menentukan jumlah maksimum permintaan koneksi yang diingat yang tidak menerima konfirmasi dari klien penghubung. Jika terjadi kelebihan beban di server, Anda dapat mencoba meningkatkan nilai ini.

net.ipv4.tcp_synack_retries = 1

Nilai integer (1 byte) tcp_synack_retries menentukan jumlah percobaan ulang untuk mengirimkan paket SYNACK untuk koneksi TCP pasif. Jumlah percobaan tidak boleh melebihi 255. Nilai 5 sama dengan kira-kira 180 detik untuk mencoba membuat sambungan.

net.ipv4.tcp_mem

net.ipv4.tcp_mem = 50576   64768   98152

Variabel vektor (minimum, mode beban, maksimum) dalam file tcp_mem berisi pengaturan konsumsi memori umum untuk protokol TCP. Variabel ini diukur dalam halaman (biasanya 4kb), bukan byte.

Minimum :sementara ukuran memori total untuk struktur protokol TCP kurang dari jumlah halaman ini, sistem operasi tidak melakukan apa-apa.

Mode muat :segera setelah jumlah halaman memori yang dialokasikan untuk protokol TCP mencapai nilai ini, mode beban diaktifkan, di mana sistem operasi mencoba membatasi alokasi memori. Mode ini dipertahankan hingga konsumsi memori mencapai level minimum lagi.

Maksimum :Jumlah maksimum halaman memori yang diizinkan untuk semua soket TCP.

net.ipv4.tcp_rmem

net.ipv4.tcp_rmem = 4096 87380 16777216

Variabel vektor (minimum, default, maksimum) dalam file tcp_rmem berisi 3 bilangan bulat yang menentukan ukuran buffer penerima soket TCP.

Minimum :setiap soket TCP memiliki hak untuk menggunakan memori ini pada saat pembuatannya. Kemampuan untuk menggunakan buffer seperti itu dijamin bahkan ketika ambang batas (tekanan memori sedang) tercapai. Ukuran buffer minimum default adalah 8 KB (8192).

Nilai default :Jumlah memori yang diizinkan untuk buffer transfer soket TCP default. Nilai ini digunakan sebagai ganti parameter /proc/sys/net/core/rmem_default yang digunakan oleh protokol lain. Nilai buffer default (biasanya) adalah 87830 byte. Ini menentukan ukuran jendela 65535 dengan nilai default tcp_adv_win_scale dan tcp_app_win =0, agak lebih kecil dari nilai default tcp_app_win.

Maksimum :Ukuran buffer maksimum dapat dialokasikan secara otomatis untuk menerima soket TCP. Nilai ini tidak membatalkan maksimum yang ditentukan dalam file /proc/sys/net/core/rmem_max. Dengan alokasi memori “statis” menggunakan SO_RCVBUF, parameter ini tidak masalah.

net.ipv4.tcp_wmem

net.ipv4.tcp_wmem = 4096 65536 16777216

Variabel vektor dalam file tcp_wmem berisi 3 nilai integer yang menentukan jumlah minimum, default, dan maksimum memori yang dicadangkan untuk buffer transfer soket TCP.

Minimum :setiap soket TCP memiliki hak untuk menggunakan memori ini pada saat pembuatannya. Ukuran buffer minimum default adalah 4 KB (4096)

Nilai default :Jumlah memori yang diizinkan untuk buffer transfer soket TCP default. Nilai ini digunakan sebagai ganti parameter /proc/sys/net/core/wmem_default yang digunakan oleh protokol lain dan biasanya kurang dari /proc/sys/net/core/wmem_default. Ukuran buffer default biasanya (default) 16 Kbytes (16384).

Maksimum :Jumlah maksimum memori yang dapat dialokasikan secara otomatis untuk buffer transmisi soket TCP. Nilai ini tidak mengesampingkan nilai maksimum yang ditentukan dalam file /proc/sys/net/core/wmem_max. Dengan alokasi memori “statis” menggunakan SO_SNDBUF, parameter ini tidak menjadi masalah.

net.ipv4.tcp_orphan_retries =0

Nilai integer tcp_orphan_retries menentukan jumlah upaya yang gagal, setelah itu koneksi TCP yang ditutup di sisi lokal dihancurkan. Nilai default adalah 7, yang sesuai dengan kira-kira periode 50 detik hingga 16 menit, tergantung pada RTO. Pada server WEB yang banyak dimuat, masuk akal untuk mengurangi nilai parameter ini karena koneksi tertutup dapat menghabiskan banyak sumber daya.

net.ipv4.tcp_syncookies =0

Terkait dengan rekomendasi pengembang kernel, sebaiknya nonaktifkan opsi ini.

net.ipv4.netfilter.ip_conntrack_max =16777216

Jumlah maksimum koneksi agar mekanisme pelacakan koneksi berfungsi (digunakan, misalnya, iptables). Jika nilainya terlalu kecil, kernel mulai menolak koneksi masuk dengan entri yang sesuai di log sistem.

net.ipv4.tcp_timestamps =1

Mengizinkan cap waktu TCP. Kehadirannya memungkinkan Anda mengontrol pengoperasian protokol di bawah beban berat (lihat tcp_congestion_control).

net.ipv4.tcp_sack = 1

Izinkan pengakuan selektif dukungan TCPIP. Opsi ini diperlukan untuk efisiensi penggunaan semua bandwidth yang tersedia di beberapa jaringan.

net.ipv4.tcp_congestion_control = htcp

Protokol, digunakan untuk kontrol beban di jaringan TCP. Implementasi bic dan kubik default mengandung bug di sebagian besar versi kernel RedHat dan klonnya. Dianjurkan untuk menggunakan htcp.

net.ipv4.tcp_no_metrics_save = 1

Jangan simpan pengukuran koneksi TCP dalam cache saat ditutup. Dalam beberapa kasus, ini membantu meningkatkan produktivitas.

Pertahanan dari IP-spoofing

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.lo.rp_filter = 1
net.ipv4.conf.eth0.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

Nonaktifkan perutean sumber

net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.lo.accept_source_route = 0
net.ipv4.conf.eth0.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0

net.ipv4.ip_local_port_range

net.ipv4.ip_local_port_range = 1024 65535

Tingkatkan jangkauan port lokal yang tersedia untuk koneksi keluar.

net.ipv4.tcp_tw_reuse = 1

Kami mengizinkan penggunaan kembali soket TIME-WAIT jika protokol menganggap ini aman.

net.ipv4.tcp_window_scaling = 1

Izinkan pengubahan ukuran dinamis jendela tumpukan TCP.

net.ipv4.tcp_rfc1337 = 1

Pertahanan dari serangan TIME_WAIT.

net.ipv4.ip_forward = 0

Kami melarang penerusan paket, karena kami bukan router.

net.ipv4.icmp_echo_ignore_broadcasts = 1

Kami tidak menanggapi permintaan ICMP ECHO yang dikirimkan melalui paket siaran.

net.ipv4.icmp_echo_ignore_all = 1

Anda tidak dapat menanggapi permintaan ICMP ECHO sama sekali (server tidak akan melakukan ping).

net.ipv4.icmp_ignore_bogus_error_responses = 1

Kami tidak menanggapi pesan yang salah bentuk.

net.core.somaxconn = 65535

Jumlah maksimum soket terbuka yang menunggu sambungan. Masuk akal untuk meningkatkan nilai default.

net.core.netdev_max_backlog = 1000

Parameter menentukan jumlah maksimum paket dalam antrian pemrosesan jika antarmuka menerima paket lebih cepat daripada yang dapat diproses oleh kernel.

Default maksimum memori

net.core.rmem_default = 65536

Data default menerima ukuran buffer untuk semua koneksi.

net.core.wmem_default = 65536

Ukuran buffer transfer data default untuk semua koneksi.

net.core.rmem_max = 16777216

Ukuran maksimum data menerima buffer untuk semua koneksi.

net.core.wmem_max = 16777216

Ukuran buffer data maksimum untuk semua koneksi.


Linux
  1. Pedoman pengujian aplikasi dan beban

  2. Atur SFTP dan Cegah SSH di Ubuntu 20.04

  3. Contoh Bash For Loop dan While Loop

  1. Menganalisis kasus yang mendukung dan menentang pengaturan ruang swap pada instans cloud

  2. Menginstal dan mengatur Grafana di linux

  3. Kode untuk malloc dan gratis

  1. Tulis untuk FAQ Atlantic.Net

  2. Instal layanan lisensi ke Server Cloud untuk Windows 2008 dan Windows 2008 R2 untuk mencegah kesalahan lisensi

  3. Cara memuat Modul SELinux Untuk Oracleasm