Pembatasan nilai dengan UFW: batas pengaturan

22

Halaman manual UFW menyebutkan bahwa ia dapat mengatur pembatasan iptables untuk saya:

ufw mendukung pembatasan kecepatan koneksi, yang berguna untuk melindungi terhadap serangan masuk brute-force. ufw akan menolak koneksi jika alamat IP telah mencoba untuk memulai 6 atau lebih koneksi dalam 30 detik terakhir. Lihat http://www.debian-administration.org/articles/187 untuk detailnya. Penggunaan umum adalah:

     ufw limit ssh/tcp

Sayangnya ini semua dokumentasi yang bisa saya temukan. Saya ingin tetap menggunakan UFW, dan tidak menggunakan perintah iptables yang lebih rumit (untuk menjaga hal-hal "tidak rumit").

Bagaimana saya menggunakan ufw untuk membatasi semua lalu lintas masuk (jadi tidak keluar) pada port 80 hingga 20 koneksi per 30 detik? Bagaimana cara saya menonaktifkan pembatasan kecepatan untuk port 30000 hingga 30005? Apakah pembatasan nilai diaktifkan secara default untuk semua port?

Tom
sumber

Jawaban:

21

UFW dirancang untuk menjadi "tidak rumit," yang dalam hal ini berarti Anda tidak memiliki kontrol atas rincian tingkat yang koneksi terbatas. Jika Anda ingin menggali sumber Python UFW, Anda bisa mengetahui cara men-tweak itu. Informasi yang sesuai adalah (pada sistem Ubuntu 10.04 saya) di/usr/share/pyshared/ufw/backend_iptables.py

Mengesampingkan masalah waktu, oleh karena itu, berikut adalah beberapa jawaban untuk pertanyaan cepat-api Anda di akhir.

  1. Dengan asumsi 10.10.10.0/24 adalah jaringan lokal Anda, ini menerapkan aturan pembatasan standar untuk port 80 / tcp yang masuk:

    ufw limit proto tcp from any port 80 to 10.10.10.0/24
    
  2. dan 3. Pembatasan nilai tidak diaktifkan secara default. Untuk menambahkannya ke setiap port (tujuan) kecuali rentang yang Anda inginkan, gunakan aturan ini. Perhatikan bahwa aturan (bahkan dengan rentang) adalah satuan atom dan tidak dapat dipisahkan. Anda tidak bisa, misalnya, menambahkan aturan untuk port apa pun, lalu deleteaturan (tidak ada) untuk rentang tertentu untuk menghapusnya. limitjuga bukan argumen yang bisa diterima ufw default.

    ufw limit from any to any port 0:29999,30006:65535
    
bonsaiviking
sumber
Apakah ini berarti kurs tidak akan pernah bisa ditetapkan?
Tom
2
Bukan tanpa meretas sumber, setidaknya bukan untuk UFW 0.30pre1-0ubuntu2, yang saat ini untuk Ubuntu 10,04. Dari tampilan hal-hal di sumber saat ini , itu tidak berubah. Namun, Anda dapat memasukkan aturan iptables ke /etc/ufw/after.rules (atau /etc/ufw/before.rules), dan itu juga akan digunakan. Lihat man ufw-framework untuk info lebih lanjut.
bonsaiviking
@ bonsaiviking Apakah mungkin iptable, jika ya maka iptable adalah backend dari ufw.
Nullpointer
6

Seperti yang disebutkan pada posting sebelumnya, Anda dapat menyesuaikan aturan pengguna. Saya membutuhkan batas kecepatan koneksi smtp saya hingga 12 koneksi dalam 6 detik. Saya menambahkan aturan seperti yang ditunjukkan di bawah ini terlebih dahulu. Catatan: ini menambahkan aturan batas yang memperbolehkan 6 dalam 30 detik secara default

ufw limit smtp

dan saya mengedit /lib/ufw/user.rules (saya menyimpan salinan kustom dari file ini dengan banyak tweak lainnya) seperti yang ditunjukkan di bawah ini ...

### tuple ### limit tcp 25 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --set
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --update --seconds 6 --hitcount 12 -j ufw-user-limit
-A ufw-user-input -p tcp --dport 25 -j ufw-user-limit-accept
Arul Selvan
sumber
Saya menemukan user.rules di / etc / ufw
Otto Kanellis
5

batas nilai dapat dengan diubah pada file aturan ufw yang dapat ditemukan /lib/ufw/user.rules. secara default tidak ada batasan yang diaktifkan untuk semua port. Anda harus menambahkan setiap port secara manual atau dengan mengedit file user.rules.

cikuraku
sumber
1

Penting untuk menunjukkan kemungkinan konsekuensi yang tidak diinginkan dari penggunaan fitur LIMIT ufw.

Misalkan satu menempatkan batas selimut pada port 22 / tcp sebagai aturan ufw pertama:

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     LIMIT IN    Anywhere                  
...

dengan asumsi bahwa koneksi yang beroperasi di bawah batas masih dapat difilter dengan mengikuti aturan ufw dan akhirnya kebijakan default "deny (incoming)".

Setidaknya untuk ufw 0,35, asumsi itu akan salah. Sebenarnya logika LIMIT IN segera menerima input apa pun yang tidak ditolak oleh kriteria batas.

Dalam psuedocode, logika LIMIT adalah

if CONDITION then DENY else ACCEPT

sedangkan aturan ufw lain tampaknya memiliki logika:

if CONDITION then (DENY|ACCEPT) else continue to next rule.

Saya pribadi menemukan bahwa menjadi perilaku tak terduga untuk ufw LIMIT, yang hanya saya temukan dengan secara tak terduga menemukan banyak upaya masuk port 22 dalam file log sistem yang seharusnya tidak pernah terjadi karena disaring oleh aturan ufw lainnya.

Rincian konfirmasi perilaku

Baris kode iptables yang relevan yang disisipkan oleh ufw adalah sebagai berikut:

-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT

Daftar di atas dapat dibuat dengan

iptables -S | grep ufw-user-limit

Dua baris pertama berturut-turut ufw-user-inputdapat dikonfirmasi

iptables -S | grep ufw-user-input
Craig Hicks
sumber