UFW ile hız sınırlaması: ayar limitleri


22

UFW'nin man sayfası, benim için iptables rate sınırlamasını ayarlayabildiğini söylüyor:

ufw, kaba kuvvet oturum açma saldırılarına karşı korunmak için yararlı olan bağlantı hızı sınırlamasını destekler. ufw, bir IP adresi son 30 saniyede 6 veya daha fazla bağlantı başlatmayı denediyse bağlantıları reddeder. Ayrıntılar için http://www.debian-administration.org/articles/187 adresine bakın. Tipik kullanım:

     ufw limit ssh/tcp

Ne yazık ki bu bulabildiğim tüm belgeler. UFW'ye bağlı kalmak ve daha karmaşık iptables komutları kullanmak istemiyorum (işleri "karmaşıklaştırmak" için).

Ufw'yi 30 saniyede 80 - 20 bağlantı noktalarındaki tüm gelen (böylece giden olmayan) trafiği sınırlamak için nasıl kullanırım? 30000 ila 30005 arasındaki bağlantı noktaları için hız sınırlamasını nasıl devre dışı bırakabilirim? Hız sınırlaması tüm bağlantı noktaları için varsayılan olarak etkin mi?

Yanıtlar:


21

UFW "karmaşık" olmak üzere tasarlanmıştır; bu durumda, bağlantıların sınırlı olduğu oranın özellikleri üzerinde kontrol sahibi olmadığınız anlamına gelir. Eğer UFW'nin Python kaynağına kazmak istiyorsanız, nasıl ayarlayacağınızı öğrenebilirsiniz. Uygun bilgi (Ubuntu 10.04 sistemimde) 'dir./usr/share/pyshared/ufw/backend_iptables.py

Zamanlama meselesini bir kenara bırakmak, bu nedenle, işte hızlıca cevapladığınız soruların cevapları.

  1. 10.10.10.0/24 yerel ağınız olduğunu varsayarsak, bu, 80 / tcp gelen bağlantı noktasına varsayılan sınırlama kuralını uygular:

    ufw limit proto tcp from any port 80 to 10.10.10.0/24
    
  2. ve 3. Hız sınırlaması varsayılan olarak açık değildir. İstediğiniz aralık dışındaki her (hedef) bağlantı noktasına eklemek için bu kuralı kullanın. Kuralların (aralıklarla bile) atom birimleri olduğunu ve bölünemeyeceğini unutmayın. Örneğin, herhangi bir bağlantı noktası için bir kural ekleyemezsiniz, daha sonra deletebelirli bir aralığın kaldırması için (var olmayan) bir kural ekleyemezsiniz . ya da limitkabul edilebilir bir argüman değildir ufw default.

    ufw limit from any to any port 0:29999,30006:65535
    

Bu, oranın hiçbir zaman ayarlanamayacağı anlamına mı geliyor?
Tom

2
Kaynağını kesmeden değil, en azından Ubuntu 10.04 için geçerli olan UFW 0.30p1-1-0ubuntu2 için. Mevcut kaynaktaki şeylerin görünümünden bu değişmedi. Bununla birlikte, iptables kurallarını /etc/ufw/after.rules (veya /etc/ufw/before.rules) dizinine koyabilirsiniz ve bunlar da kullanılacaktır. Daha fazla bilgi için man ufw framework bakın .
bonsaiviking

@bonsaiviking iptableEvet, eğer öyleyse iptable ufw'un arka ucudur.
Nullpointer

6

Önceki yayında belirtildiği gibi user.rules'ı özelleştirebilirsiniz. 6 saniyede smtp bağlantı hızı sınırına 12 bağlantıya ihtiyacım var. Önce aşağıda gösterildiği gibi bir kural ekledim. Not: Bu, varsayılan olarak 6 saniyede 30 saniyeye izin veren bir limit kuralı ekler

ufw limit smtp

ve aşağıda gösterildiği gibi /lib/ufw/user.rules dosyasını düzenledim (bu dosyanın özel bir kopyasını başka tweaks ile tutuyorum) ...

### 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

/ Etc / ufw içinde user.rules'ı buldum
Otto Kanellis

5

/lib/ufw/user.rules adresinde bulunan ufw rules dosyasında oran sınırı değiştirilebilir. varsayılan olarak tüm bağlantı noktaları için etkin bir sınır yoktur. Her portu manuel olarak veya user.rules dosyasını düzenleyerek eklemelisiniz.


1

Ufw'nin LIMIT özelliğini kullanmanın olası istenmeyen sonuçlarını belirtmek faydalı olacaktır.

Birinin ilk ufw kuralı olarak 22 / tcp portuna battaniye limiti koyduğunu varsayalım:

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

Sınırın altında çalışan herhangi bir bağlantının ufw kurallarına uyarak ve nihayet "reddetme (gelen)" ilkesi politikası kullanılarak filtrelenebileceği varsayımıyla.

En azından 0,35 uf için bu varsayım yanlış olur. Aslında LIMIT IN mantığı, limit kriter tarafından reddedilmeyen herhangi bir girişi derhal kabul eder.

Psuedocode'da LIMIT mantığı

if CONDITION then DENY else ACCEPT

Diğer UFW kurallarının bir mantığı var:

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

Şahsen ufw LIMIT için beklenmedik bir davranış olduğunu bulmuştum, sadece beklenmedik bir şekilde, diğer ufw kuralları tarafından filtrelenmiş olması nedeniyle asla gerçekleşmemesi gereken sistem günlük dosyasında birçok port 22 oturum açma girişimi bularak keşfettim.

Davranış onayının detayları

Ufw tarafından eklenen iptables kodunun ilgili satırları aşağıdaki gibidir:

-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

Yukarıdaki liste ile oluşturulabilir

iptables -S | grep ufw-user-limit

İlk iki satır, ufw-user-inputile doğrulanabilecek ardışıktır.

iptables -S | grep ufw-user-input
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.