Iptables kurallarının süresi nasıl dolar?


18

Birisi bana bunun mümkün olduğunu söyledi, ancak google veya man sayfalarında hiçbir şey bulamıyorum.

IP'leri belirli bir süre için yasaklamam ve sonra otomatik olarak yasağı kaldırmam gerekiyor.

Yanıtlar:


18

Eğer iptables kuralını tamamen kendi başına kaldırmak istiyorsanız, bildiğim kadarıyla bunu yapamazsınız. Bunun amacı nedir? Bir çeşit otomatik geçici yasaklamaya ihtiyacınız varsa, standart çözüm başarısız2ban'dır .

Alternatif olarak, eklediğiniz kuralı kaldırmak için bir cron işi veya etkileşimli olarak yapmak istiyorsanız daha iyi bir atiş kullanabilirsiniz:

iptables -I INPUT -s 192.168.1.100 -j DROP
echo "iptables -D INPUT -s 192.168.1.100 -j DROP" | at @10pm 

Ayrıca recentiptables modülüne bir göz atın . Bu --secondsseçenek ile gerçek ihtiyaçlarınıza bağlı olarak yardımcı olabilir. man iptablesdaha fazla bilgi için.


vay vay 'at' iş harika görünüyor. Nohup ve & ile birleştirebilir miyim? Nasıl?
HappyDeveloper

Nohup kullanmanıza gerek yok - at işi, oluşturmak için kullandığınız terminalden bağımsız olarak yürütülür. Bu, ortam değişkenlerinizi devralmayan bir kabukta çalıştırıldığı ve /bin/shvarsayılan olarak olduğu anlamına gelir. Ama bu muhtemelen bu bir problem olmayacak.
Eduardo Ivanec

9

Kurallara bir zaman damgası (muhtemelen dönemden bu yana saniye) içeren bir yorum koyun. Süresi dolmuş kuralları periyodik olarak süpürün.

En son linux çekirdeğinin, IP adreslerinin doğrudan iptables kuralları olarak değil, iptable kurallarının istişare ettiği bir önbelleğe dinamik olarak yüklenmesini desteklediğini unutmayın.

Misal:

iptables  -A INPUT -s 192.168.200.100/32 -m comment --comment "expire=`date -d '+ 5 min' +%s`" -j DROP 
iptables -L INPUT -n --line-numbers | tac | perl -ne 'next unless /(^\d+).*expire=(\d+)/; if ($2 < time) { print "iptables -D INPUT $1\n"; }'

Elbette iptables -D INPUT $1komutu yazdırmak yerine yapabilirsiniz .


iyi fikir. Süpürme kısmını nasıl yapacağımdan emin değilim, düşüneceğim ..
HappyDeveloper

+1 Çok iyi bir fikir, belki de en basit değil ama kesinlikle temiz.
Kyle Smith

1
@HappyDeveloper: Ekleme / süpürme için sağlanan örnek
Seth Robertson

1
Haha Sadece bunu yapmak zorunda kaldım, temizlik için awk kullandım: iptables -L FORWARD --line-numbers | sort -r | awk 'substr($8,1,4) == "exp@" && substr($8,5) < systime() { systems("iptables -D FORWARD " $1) }'kurallar şu şekilde yapılır:iptables -A FORWARD -j DROP -m comment --comment "exp@EPOCH"
Kyle Smith

Perl benim 2 sent:iptables -L FORWARD --line-numbers | tac | perl -walne 'system "iptables -D FORWARD $F[0]" if $F[-2] =~ /^expire=(\d+)$/ and $1<time()'
tuomassalo

5

iptables, kullanıcı tanımlı koşullar yerine getirilirse bir listeye otomatik olarak IP adresleri eklemek için bir yöntem içerir. SSH bağlantı noktasına otomatik saldırı girişimlerini önlemek için aşağıdakileri kullanıyorum:

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name ssh --seconds 60 --reap -j DROP

Bu, aynı IP adresinden her 60 saniyede bir bağlantı girişimlerini sınırlayarak sunucuya erişim elde etmek için yapılan otomatik girişimleri sınırlamaya yardımcı olur.

Bir zaman aralığında 5 dakikada 4 gibi belirli sayıda denemeye izin vermek istiyorsanız ve hata durumunda bunları 24 saat gibi daha uzun bir süre kara listeye alın, şöyle bir şey yapabilirsiniz:

iptables -X black
iptables -N black
iptables -A black   -m recent --set   --name blacklist   -j DROP

iptables -X ssh
iptables -N ssh
iptables -I ssh 1   -m recent --update    --name blacklist   --reap   --seconds 86400     -j DROP
iptables -I ssh 2   -m recent --update    --name timer       --reap   --seconds   600     --hitcount 4   -j black
iptables -I ssh 3   -m recent --set       --name timer   -j ACCEPT

iptables -A INPUT   -p TCP --dport ssh   -m state --state NEW -j ssh

Yukarıda 2 zincir oluşturuyoruz; "ssh" ve "siyah" ve 2 liste; "zamanlayıcı" ve "kara liste".

Kısaca; yukarıda gösterilen son zincir ssh zincirinin "giriş kapısı" dır.

  • Ssh zincirindeki Kural 1, kaynak IP'nin "kara liste" listesinde olup olmadığını kontrol eder. Öyleyse, bağlantı kesilir ve 24 saatlik kara liste zamanlayıcısı yeniden başlatılır. Kural 1 yanlışsa, kural 2'ye gideriz.
  • Ssh zincirindeki Kural 2, kaynak IP'nin 5 dakika içinde 4'ten fazla bağlantı denemesi yapıp yapmadığını kontrol eder. Eğer öyleyse, paketi "kara" listesine eklediği "kara" zincirine gönderir. Zincir "siyah" sonra bağlantı DROPs, ve biz bitti.
  • "Ssh" zincirindeki Kural 3'e yalnızca kural 1 ve 2 yanlışsa ulaşılır. Öyleyse, paket KABUL EDİLİR ve kaynak IP'si "zamanlayıcı" listesine eklenir, böylece bağlantı girişimi frekansını izleyebiliriz.

"--Reap" seçeneği, çekirdeğe listede arama yapmasını ve ayarlanan zaman sınırından daha eski öğeleri temizlemesini söyler; "Zamanlayıcı" listesi için 5 dakika ve "kara liste" listesi için 24 saat.

not: fazladan boşluklar okunabilirlik içindir ve kabuk betiğinizde isteğe bağlıdır.


3

IPTable'lar bunun için açıkça yapılmış bir özelliğe sahiptir: IP Set. Kuralı bir kez yaparsınız ve her zamanki gibi devam eder, ancak eşleşme için bir dizi ips (veya bağlantı noktası) kontrol eder. Harika olan şey, bu setin güvenlik duvarının geri kalanını bozmadan dinamik ve verimli bir şekilde güncellenebilmesidir.

Ana web sitesi , örnekler .

Bu nedenle, onu kullanmak için, kaldırmayı planlamanız atveya cronplanlamanız gerekir.



2

Birinin söylediği gibi: Bu özellik için ipset kullanmalısınız.

ipset zaman aşımı değeri ile ip adresi ekleyebilir. Zaman aşımı sona erdiğinde, kayıt otomatik olarak ipset'ten kaldırılır.

timeout All set types supports the optional timeout parameter when creating a set and adding entries. The value of the timeout parameter for the create command means the default timeout value (in seconds) for new entries. If a set is created with timeout support, then the same timeout option can be used to specify non-default timeout values when adding entries. Zero timeout value means the entry is added permanent to the set. The timeout value of already added elements can be changed by readding the element using the -exist option. Example: ipset create test hash:ip timeout 300 ipset add test 192.168.0.1 timeout 60 ipset -exist add test 192.168.0.1 timeout 600

http://ipset.netfilter.org/ipset.man.html

Bu, bu davranışı denetlemenin tercih edilen yoludur.


0

IP'leri belirli bir süre için yasaklamam ve sonra otomatik olarak yasağı kaldırmam gerekiyor.

Aşağıdakini deneyebilirsiniz

# iptables -I INTPUT -s xxx.xxx.xxx.xxx -m time --utc --datestart 2013-09-09T15:00 --datestop 2013-09-09T15:30 -j DROP

0

Tam olarak ne yapmak istediğinize bağlı olarak, en son yapılan netfiltre veya zaman modülleri bunu gerçekleştirmek için kullanılabilir.

Her ikisi de iptables kılavuz sayfasında belgelenmiştir .

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.