IPTables tidak dibuat untuk jenis pekerjaan ini, di mana banyak dan banyak paket perlu dianalisis untuk membuat keputusan ini. IPTables sebagian jawabannya!
Jawaban sebenarnya untuk ini adalah fasilitas kontrol lalu lintas yang mengagumkan dan kurang digunakan di Linux. Perhatikan bahwa bermain-main dengan ini tanpa mengetahui apa yang sedang terjadi dapat menyebabkan Anda kehilangan konektivitas jaringan ke mesin! Anda telah diperingatkan!
Dengan asumsi eth0 adalah perangkat keluar Anda perlu membuat antrian kontrol lalu lintas berbasis kelas yang secara default akan menghasilkan sebagian besar lalu lintas melalui antrian 'cepat' dan memasukkan daftar orang tertentu ke dalam antrian 'lambat'.
Keindahan dari ini adalah Anda dapat membuat situasi di mana Anda mengizinkan banyak lalu lintas keluar untuk pengguna yang lambat kecuali kelas utama menginginkan bandwidth, tetapi contoh ini tidak melakukan ini (akan selalu memberikan 10 kbps untuk pengguna yang lambat). Sistem antrian akan terlihat seperti ini:
Inbound traffic
+
|
|
v
+------------------+
| Class 1:1 |
|------------------|
| Root (all flows)|
| 100mbit |
+-----+-----+------+
| |
| |
| |
| |
| |
+----------+ | | +----------+
| 1:11 +-----+ +-----+ 1:12 |
|----------| |----------|
| Default | | Slow |
|100mb-80kb| | 80kb |
+----------+ +----------+
Untuk melakukan ini, pertama-tama Anda perlu mengatur disiplin antrian di kernel. Berikut ini akan melakukan ini untuk Anda .. Anda harus menjalankan ini sebagai satu skrip utuh
#!/bin/bash
tc qdisc add dev eth0 parent root handle 1: hfsc default 11
tc class add dev eth0 parent 1: classid 1:1 hfsc sc rate 100mbit ul rate 100mbit
tc class add dev eth0 parent 1:1 classid 1:11 hfsc sc rate 99920kbit ul rate 100000kbit
tc class add dev eth0 parent 1:1 classid 1:12 hfsc sc rate 80kbit ul rate 80kbit
tc qdisc add dev eth0 parent 1:11 handle 11:1 pfifo
tc qdisc add dev eth0 parent 1:12 handle 12:1 pfifo
"Default 11" penting karena memberi tahu kernel apa yang harus dilakukan dengan lalu lintas yang tidak diklasifikasikan.
Setelah ini selesai, Anda dapat mengatur aturan iptables untuk mengklasifikasikan paket yang cocok dengan kriteria tertentu. Jika Anda berencana untuk menempatkan banyak dan banyak orang ke dalam aturan lambat ini, aturan ipset lebih tepat (yang seharusnya tersedia di rhel6 saya percaya).
Jadi, buat database ipset untuk melakukan pencocokan terhadap ...
ipset create slowips hash:ip,port
Kemudian buat aturan iptables untuk melakukan pertandingan ..
iptables -t mangle -I OUTPUT -m set --match-set slowips dst,src -j CLASSIFY --set-class 1:12
Ini menginstruksikan kernel bahwa jika Anda mencocokkan IP tujuan dengan port sumber dari set, mengklasifikasikannya ke dalam antrian lambat Anda setup dengan kontrol lalu lintas.
Sekarang, akhirnya setiap kali Anda ingin memperlambat IP, Anda dapat menggunakan perintah ipset untuk menambahkan ip ke set seperti ini:
ipset add slowips 192.168.1.1,80
ipset add slowips 192.168.1.1,21
...
Anda dapat mengujinya bekerja menggunakan perintah "tc -s class show dev eth0" dan Anda akan melihat statistik di sana yang menunjukkan paket yang diarahkan ke antrian lambat.
Perhatikan satu-satunya downside nyata untuk ini membuatnya bertahan reboot. Saya tidak berpikir ada skrip init yang tersedia untuk membuat ipset dari dump saat reboot (dan mereka juga harus dibuat sebelum aturan iptables) dan saya yakin tidak ada skrip init untuk mengatur ulang aturan kontrol lalu lintas saat reboot. Jika Anda tidak terganggu, Anda dapat membuat ulang semuanya dari memanggil skrip di rc.local.