GNU/Linux >> Belajar Linux >  >> Linux

Cara menggunakan iptables atau tc untuk membatasi paket per klien.

Saya telah melakukan ini menggunakan kombinasi hashlimit TC dan iptables. Saya membuat pembatas bandwidth TC keluar pada antarmuka LAN (untuk menargetkan lalu lintas unduhan) yang disetel ke 5 Mbits/detik. Saya kemudian menggunakan modul hashlimit iptables dalam rantai mangle output antarmuka sehingga jika tingkat paket melebihi ambang tertentu, antara dua alamat IP sumber dan tujuan yang berbeda, ia mulai mengklasifikasikan paket-paket tersebut ke dalam kelas pembentuk lalu lintas TC 5 Mbit/s .

Anda harus menyetel ambang batas paket dengan benar, dan saya mendasarkan milik saya pada fakta bahwa MTU saya adalah 1500 byte jadi gunakan ini untuk menghitung berapa banyak paket per detik yang akan membuat ambang batas 1,5 Mbits per detik (1000 paket/detik ). Ditambah dengan pengaturan nilai burst setinggi mungkin pada modul iptables hashlimit (yang pada pengaturan saya, tampaknya 10.000), hasil dari semua ini adalah unduhan singkat berjalan dengan kecepatan penuh, tetapi unduhan yang lebih lama mulai melambat karena beberapa paket diteruskan ke kelas pembatasan bandwidth TC, yang kemudian jelas menurunkan kecepatan paket, dll. Ini sedikit meretas, tetapi luar biasa berhasil, dan berfungsi dengan baik. Dan karena TC digunakan, tidak ada paket yang dijatuhkan - hanya ditunda dan diperlambat karena didorong ke kelas TC setelah kecepatan paket tercapai.

Ini ada di kotak CentOS 6. Saya pikir hal-hal yang lebih modern memungkinkan modul hashlimit untuk mendukung byte per detik, bukan hanya paket per detik, yang bahkan lebih baik, tetapi saya mencoba ini pada pengaturan saya dan hanya kembali menggunakan paket per detik.

Saya baru saja menggunakan ponsel jadi tidak dapat menempelkan konfigurasi apa pun, tetapi jika Anda ingin beberapa contoh, beri tahu saya dan saya akan mengedit jawaban ini. Saya sangat menyukai solusi ini karena batasan yang saya gunakan didasarkan pada IP sumber dan tujuan. Jadi sistem melihat setiap kombinasi IP src+dst yang berbeda sebagai aliran paketnya sendiri untuk dibatasi. Modul hashlimit juga mendukung port sumber dan tujuan (pada dasarnya kombinasi IP sumber, port sumber, IP tujuan, port tujuan), sehingga Anda bahkan dapat melakukan pembatasan per sesi antara IP sumber+port dan IP+port tujuan .

PEMBARUAN

Jadi di bawah ini kira-kira bagaimana Anda melakukannya; eksperimen akan diperlukan.

tc:

/sbin/tc qdisc add dev eth0 root handle 1: htb
/sbin/tc class add dev eth0 parent 1: classid 1:1 htb rate 5Mbit

iptables:

#!/bin/bash

[[ "$1" =~ ^[ADI]$ ]] || exit 1

for IPT in /sbin/ip{,6}tables
do
  $IPT -t mangle -$1 POSTROUTING -o eth0 -m hashlimit --hashlimit-above 1000/second --hashlimit-burst 10000 --hashlimit-mode srcip,dstip --hashlimit-name limiter -j CLASSIFY --set-class 1:1
done

Anda dapat mengatasi masalah ini dengan cara sederhana, coba gunakan modul terbaru dengan iptables, lacak alamat sumber terbaru:

iptables -m recent -h
recent match options:
[!] --set                       Add source address to list, always matches.
[!] --rcheck                    Match if source address in list.
[!] --update                    Match if source address in list, also update last-seen time.
[!] --remove                    Match if source address in list, also removes that address from list.
    --seconds seconds           For check and update commands above.
                                Specifies that the match will only occur if source address last seen within
                                the last 'seconds' seconds.
    --reap                      Purge entries older then 'seconds'.
                                Can only be used in conjunction with the seconds option.
    --hitcount hits             For check and update commands above.
                                Specifies that the match will only occur if source address seen hits times.
                                May be used in conjunction with the seconds option.
    --rttl                      For check and update commands above.
                                Specifies that the match will only occur if the source address and the TTL
                                match between this packet and the one which was set.
                                Useful if you have problems with people spoofing their source address in order
                                to DoS you via this module.
    --name name                 Name of the recent list to be used.  DEFAULT used if none given.
    --rsource                   Match/Save the source address of each packet in the recent list table (default).
    --rdest                     Match/Save the destination address of each packet in the recent list table.
    --mask netmask              Netmask that will be applied to this recent list.

contoh untuk memblokir ssh brute force:

iptables -A INPUT -i eth0 -p tcp --syn --dport 22 -m recent --name ssh --set
iptables -A INPUT -i eth0 -p tcp --syn --dport 22 -m recent --name ssh --rcheck --seconds  30 --hitcount 2 -j DROP

Linux
  1. Cara memblokir alamat IP di server Linux

  2. Cara menggunakan Pemblokir IP di cPanel

  3. Klien Dropbox Maestral, Temukan Cara Memasang dan Menggunakannya

  1. Bagaimana Cara Throttle Per Proses I/o Hingga Batas Maks?

  2. Cara Masuk Linux IPTables Firewall Menjatuhkan Paket ke File Log

  3. Batasi akses SSH ke klien tertentu berdasarkan alamat IP

  1. Cara menggunakan perintah sumber dalam skrip pipa Jenkins

  2. Haruskah saya membatasi paket dengan iptables?

  3. Teruskan lalu lintas http ke alamat ip lain dengan iptables