Tek banaction, iki taşıma: bir fail2ban VPN jail'ini onarmak
Ban yalnızca eylemdeki protokol kadar geniştir. Zincir sayaçlarını dinleyicilerle karşılaştırın, ardından iki taşımayı da jailin kendisinde kapsayın.
fail2ban'de hiçbir şey kendi başına paket düşürmez: bir eylem çağırır ve protokol ile bağlantı noktasını adlandıran tam olarak o eylemdir. jail, daemon oturum açmaları kabul etmeye devam ederken ban bildirdiğinde, ban genellikle gerçektir ve logun ima ettiğinden daha dardır. Diğer taşıma üzerinden yeniden bağlanan istemci, kurulmuş kurala asla rastlamaz. Herhangi bir şeyi değiştirmeden önce eylemin ne kurduğunu daemonun neyi dinlediğiyle karşılaştırın, çünkü kanıt eylemin yazdığı güvenlik duvarı zincirindedir, jail listesinde değil.
Özeti değil, zinciri okuyun
fail2ban kendi zincirini hizmet zincirinin önüne ekler, bu yüzden sayaç listesi tam olarak neyin var olduğunu gösterir. jail'in adını taşıyan ve protokol sütunu udp okunan tek bir kural içeren bir zincir, gelmeye devam eden TCP oturum açmaları için tam bir açıklamadır. Yalnızca engellenen kaynaktan gelen UDP paketleri reddedilir. Hizmetin bir TCP dinleyicisi vardır ve o zincirde hiçbir şey ona dokunmaz.
Komşu jail etkisine de dikkat edin. Bir ana makine kusursuz yapılandırılmış görünebilir, çünkü eksik yarıyı başka bir jail sağlar ve aynı derleme o jailin kurulu olmadığı yerde hiçbir şey yapmaz.
Eylem tek bir protokol adlandırır ve tam orada kırılır
Her banaction bir güvenlik duvarı komut şablonudur ve protokol onun yer tutucularından birinde durur. Bu darlık kasıtlıdır, çünkü bir web jaili ile bir DNS jailinin aynı bağlantı noktalarını engellemekle işi yoktur. Hizmet birden fazla taşımayı dinlediğinde tuzak hâline gelir; VPN daemonları bunu düzenli olarak yapar. Filtre iki taşımanın başarısız oturum açmalarını izleyebilirken eylem yalnızca birini kapsar.
SoftEther ve OpenVPN dağıtımları genellikle aynı anda UDP ve TCP dinler ve log satırı her iki durumda da aynı göründüğü için filtre ikisini de izler. Asimetri jailin kendi raporunda asla görünmez. fail2ban hataları doğru saydı ve ardından bu hataların üzerinden geldiği trafiğin yarısına uygulanan bir kural kurdu.
Ban iki taşımayı da kapsasın
Bunu jail tanımında düzeltin; elle yazılmış kurallar bir sonraki yeniden yüklemede karıştırılacaktır. Her protokol için bir tane olmak üzere iki eylem yazın:
action = %(banaction)s[name=%(__name__)s-tcp, actionname=%(__name__)s-tcp, protocol="tcp", port="%(port)s", chain="%(chain)s"]
%(banaction)s[name=%(__name__)s-udp, actionname=%(__name__)s-udp, protocol="udp", port="%(port)s", chain="%(chain)s"]
Bunu protocol = all ile kısaltmaya çalışmayın. Varsayılan banaction bir multiport eylemdir ve -p <protocol> -m multiport --dports <port> biçimine açılır; L4 protokolü olmadan bağlantı noktası eşleşmesinin test edeceği bir şey yoktur, bu yüzden iptables kuralı reddederken jail hâlâ başarılı bir ban bildirir. iptables-allports veya nftables-allports gibi tüm bağlantı noktalarını kapsayan bir eylem tek bir girdiyi kabul eder, ancak o kaynaktaki her bağlantı noktasını engeller; bu başka bir karardır ve kendi gerekçesini gerektirir. protocol değerini tcp veya udp olarak bırakın ve iki girdiyi kabul edin.
Ayar yerine kuralın var olduğunu kanıtlayın, çünkü bir zincir onu tutana kadar ayar yalnızca niyeti tanımlar:
iptables -S f2b-vpn-tcp
iptables -S f2b-vpn-udp
Her zincir tek bir kural listelemelidir; birincisinde -p tcp, ikincisinde -p udp bulunur ve ikisi de engellenen adresi adlandırır. Ardından aynı adresin iki taşımada da reddedildiğini doğrulayın. Zincirde görmediğiniz bir ban bir umuttur ve aynı belirtinin bir sonraki raporu yine aynı saate mal olacaktır.
Bir banın hâlâ kaçırdıkları ve sonraki durum
Eylemin yaptığı şey tek bir kaynağı reddetmektir ve yalnızca içinde listelenen bağlantı noktalarında. Adresleri döndüren bir saldırgana karşı hiçbir şey yapmaz ve düşmanca bir makineyi yüzlerce kullanıcının paylaştığı operatör düzeyinde bir NAT çıkışından ayıramaz; orada tek bir ban hiçbir şey yapmamış insanları dışarıda bırakır. Filtrenin istemcinin gerçekten sahip olduğu adresi okuduğundan emin olun, yönlendirilmiş bir başlığı veya proxy adresini değil. Bir hatanın kendiliğinden sona ermesi için pencereyi yeterince kısa tutun.
Bunların hiçbiri protokol düzeltmesini atlamayı savunmaz; iki fikri aynı anda tutmayı savunur. Ban, jail özetinin ima ettiğinden dardır ve tam bir ban bile tehditten dardır. Güvenlik duvarı zincirini daemonun dinleyici listesinin yanına koyun ve protokol protokol karşılaştırın, çünkü bir banın hizmete ulaşıp ulaşamayacağına bu iki liste karar verir.
Yeniden yükleme komutunu ve zincir listesini jailin yanındaki runbook'ta tutun. Sıradaki kişi ikisine de ihtiyaç duyacak ve jail özeti ona hiçbirini söylemeyecek.