infrastruktura:bezpecnost:fail2ban

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

infrastruktura:bezpecnost:fail2ban [09.03.2026 20:11] – Migrace z it:server:fail2ban Petr Nosekinfrastruktura:bezpecnost:fail2ban [23.04.2026 11:58] (aktuální) – Doplnění stránky Fail2ban o SoftEther a praktické jail konfigurace Petr Nosek
Řádek 1: Řádek 1:
 ====== Fail2ban ====== ====== Fail2ban ======
  
-Software k dynamickému blokování IP adres, když dělají něcoco nemají.+[[https://github.com/fail2ban/fail2ban|Fail2ban]] je nástroj pro dynamické blokování IP adres na základě logů služeb. Typicky se používá pro ochranu proti brute-force útokům na SSH, VPNwebové přihlášení nebo pro reakci na portscan. 
 + 
 +===== Instalace =====
  
 <code bash> <code bash>
 apt install fail2ban apt install fail2ban
- 
 cd /etc/fail2ban cd /etc/fail2ban
 cp jail.conf jail.local cp jail.conf jail.local
 </code> </code>
  
-zdroje k nastavení fail2ban:+===== SoftEther VPN =====
  
-  * https://www.czeo.com/configure-fail2ban-with-ufw/ +Pro [[infrastruktura:vpn:softether|SoftEther VPN]] je nejdřív potřeba zajistit, aby se neúspěšná přihlášení zapisovala do jednoho stabilního loguV ''vpncmd'' jsem pro konkrétní hub nastavil:
-  * https://blog.frehi.be/2019/01/17/securing-openssh/+
  
 +<code>
 +VPN Server/DEFAULT> logswitchset
 +LogSwitchSet command - Set Log File Switch Cycle
 +Select Security or Packet: security
 +Specify sec, min, hour, day, month or none: none
 +</code>
  
-===== Akce - složka action.d ===== +Výsledkem je soubor ''sec.log''například:
- +
- +
-Pro webserver jsem nastavoval, aby se zablokoval při portscanningu přístup na všechny porty, kromě 80 a 443. K tomu mi posloužil vytvoření soubor **/etc/fail2ban/action/ufw-portscan.conf**. Musel jsem v původním souboru (kopie ufw.conf) nahradit insert = <insertpos> tímto: prepend. Jinak nefungoval ufw pro ipv6. Takto funguje pro obojí.  +
- +
-V githubu je soubor ještě více předělanýtak aby po zabanování zabil ještě existující spojení. Což můj skript neumí. Alespoň jsem se neodříznul od ssh: +
-https://github.com/fail2ban/fail2ban/blob/bbfff1828061514e48395a5dbc5c1f9f81625e82/config/action.d/ufw.conf +
- +
-Pokud bych provozoval ještě nějaké další služby, musel bych je přidat, abych do tohoto skriptu. Protože pokud někdo udělá portscan, tak se zaříznou všechny služby, kromě žádoucích 80 a 443. +
  
 <code bash> <code bash>
-# Fail2Ban action configuration file for ufw +ls -l /usr/vpnserver/security_log/DEFAULT/
-+
-# You are required to run "ufw enable" before this will have any effect. +
-+
-# The insert position should be appropriate to block the required traffic. +
-# A number after an allow rule to the application won't be of much use. +
- +
-[Definition] +
- +
-actionstart =  +
- +
-actionstop =  +
- +
-actioncheck =  +
- +
-actionban = [ -n "<application>" ] && app="app <application>" +
-            ufw prepend <blocktype> from <ip> $app +
-            ufw prepend allow proto tcp from <ip> to <destination> port 80,443 $app +
-            #ufw insert <insertpos> <blocktype> from <ip> to <destination> port 80 $app +
- +
-actionunban = [ -n "<application>" ] && app="app <application>" +
-              ufw delete <blocktype> from <ip> $app +
-              ufw delete allow proto tcp from <ip> to <destination> port 80,443 $app +
-              #ufw delete <blocktype> from <ip> to <destination> port 80 $app +
- +
-[Init] +
-# Option: insertpos +
-# Notes.:  The position number in the firewall list to insert the block rule +
-insertpos = 1 +
- +
-# Option: blocktype +
-# Notes.: reject or deny +
-blocktype = deny +
- +
-# Option: destination +
-# Notes.: The destination address to block in the ufw rule +
-destination = any +
- +
-# Option: application +
-# Notes.: application from sudo ufw app list +
-application =  +
- +
-# DEV NOTES: +
-#  +
-# Author: Guilhem Lettron +
-# Enhancements: Daniel Black +
 </code> </code>
  
 +Pak stačí filtr a jail.
  
 +Filtr ''/etc/fail2ban/filter.d/vpnserver.conf'':
  
-===== Filtry - složka filter.d ===== +<code ini>
- +
-Tady je konfigurace k jednotlivým službám. Každá služba zapisuje do syslogu pokusy o přihlášení v různém formátu. Filtry skrz regulární výrazy ukazují, co hledat. Tím, si lze fail2ban rozšířit i na služby, pro které defaultně určen není. +
- +
-Přidáme **/etc/fail2ban/filter.d/vpnserver.conf** - čerpáno ze [[https://www.vpnusers.com/viewtopic.php?f=7&t=6375&sid=76707e8a5a16b0c9486a39ba34763901&view=print|zdroje]]. +
- +
-<code bash> +
-# Fail2Ban filter for SoftEther authentication failures +
-# Made by quixrick and jonisc +
-# Thanks to quixrick from Reddit! https://reddit.com/u/quixrick +
 [INCLUDES] [INCLUDES]
- 
-# Read common prefixes. If any customizations available -- read them from 
-# common.local 
 before = common.conf before = common.conf
  
-#Enable multi line support. Doesn't work with versions < 0.9 
 [Init] [Init]
-maxlines = 2  +maxlines = 2
-# The regular expression filter follows +
-[Definition]+
  
 +[Definition]
 failregex =IP address: <HOST>.*\n.*User authentication failed.* failregex =IP address: <HOST>.*\n.*User authentication failed.*
 ignoreregex= ignoreregex=
 </code> </code>
  
-Dále **/etc/fail2ban/filter.d/portscan.conf**:+Příklad ''jail.local'' pro dva huby:
  
-<code bash+<code ini
-# Fail2Ban filter for portscan +[vpnserver] 
-# https://serverfault.com/questions/629709/trouble-with-fail2ban-ufw-portscan-filter +enabled = true 
-# https://dodwell.us/security/ufw-fail2ban-portscan.html +logpath = /usr/vpnserver/security_log/DEFAULT/sec.log 
-+port = all 
-#+protocol = all 
 +banaction = iptables-allports 
 +filter = vpnserver
  
-[Definition]+[vpnserver-HUB2] 
 +enabled = true 
 +logpath = /usr/vpnserver/security_log/HUB2/sec.log 
 +port = all 
 +protocol = all 
 +banaction = iptables-allports 
 +filter = vpnserver 
 +</code>
  
-failregex = .*\[UFW BLOCK\] IN=.* SRC=<HOST> +Po restartu služby lze jail ověřit takto:
- +
-ignoreregex =+
  
 +<code bash>
 +systemctl restart fail2ban
 +fail2ban-client status vpnserver
 </code> </code>
  
- +===== Vyřazení IP adresy z banlistu =====
-Dále pro **/etc/fail2ban/filter.d/nextcloud.conf**:+
  
 <code bash> <code bash>
-[INCLUDES] +fail2ban-client set vpnserver unbanip 89.24.33.115 
-before = common.conf +fail2ban-client unban 89.24.33.115
- +
-[Definition] +
-_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*) +
-failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed: +
-datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?" +
-ignoreregex =+
 </code> </code>
  
 +===== Vypsání všech zabanovaných adres =====
  
-Našel jsem i vlastní ssh - **/etc/fail2ban/filter.d/mysshd.conf** ve kterém je přidaný řádek, který banuje už i preauth při ssh. +<code bash
- +fail2ban-client banned
-<code> +
-^Connection closed by <HOST> port \d+ \[preauth\]$+
 </code> </code>
  
-Tady obsah celého souboru. +===== Akce v action.d =====
-<code> +
-# Fail2Ban filter for openssh +
-+
-# If you want to protect OpenSSH from being bruteforced by password +
-# authentication then get public key authentication working before disabling +
-# PasswordAuthentication in sshd_config. +
-+
-+
-# "Connection from <HOST> port \d+" requires LogLevel VERBOSE in sshd_config +
-#+
  
-[INCLUDES]+Na serverech s UFW jsem řešil i reakci na portscan. K tomu jsem si upravoval akci odvozenou z ''ufw.conf'', aby uměla pracovat i s IPv6 a současně nezablokovala žádoucí porty 80 a 443.
  
-# Read common prefixes. If any customizations available -- read them from +Příklad akce ''ufw-portscan.conf'':
-# common.local +
-before = common.conf +
- +
-[DEFAULT] +
- +
-_daemon = sshd +
- +
-# optional prefix (logged from several ssh versions) like "error: ", "error: PAM: " or "fatal:+
-__pref = (?:(?:error|fatal): (?:PAM: )?)? +
-# optional suffix (logged from several ssh versions) like " \[preauth\]" +
-__suff = (?: \[preauth\])?\s* +
-__on_port_opt = (?: port \d+)?(?: on \S+(?: port \d+)?)? +
- +
-# for all possible (also future) forms of "no matching (cipher|mac|MAC|compression method|key exchange method|host key type) found", +
-# see ssherr.c for all possible SSH_ERR_..._ALG_MATCH errors. +
-__alg_match = (?:(?:\w+ (?!found\b)){0,2}\w+)+
  
 +<code ini>
 [Definition] [Definition]
  
-prefregex ^<F-MLFID>%(__prefix_line)s</F-MLFID>%(__pref)s<F-CONTENT>.+</F-CONTENT>$+actionban -n "<application>" ] && app="app <application>
 +            ufw prepend <blocktypefrom <ip> $app 
 +            ufw prepend allow proto tcp from <ip> to <destinationport 80,443 $app
  
-cmnfailre ^[aA]uthentication (?:failure|error|failed) for <F-USER>.*</F-USERfrom <HOST>( via \S+)?\s*%(__suff)s$ +actionunban = [ -n "<application>&& app="app <application>" 
-            ^User not known to the underlying authentication module for <F-USER>.*</F-USER> from <HOST>\s*%(__suff)s$ +              ufw delete <blocktype> from <ip> $app 
-            ^Failed \S+ for invalid user <F-USER>(?P<cond_user>\S+)|(?:(?! from ).)*?</F-USER> from <HOST>%(__on_port_opt)s(?: ssh\d*)?(?(cond_user): |(?:(?:(?! from ).)*)$) +              ufw delete allow proto tcp from <ipto <destination> port 80,443 $app
-            ^Failed \b(?!publickey)\S+ for (?P<cond_inv>invalid user )?<F-USER>(?P<cond_user>\S+)|(?(cond_inv)(?:(?! from ).)*?|[^:]+)</F-USERfrom <HOST>%(__on_port_opt)s(?: ssh\d*)?(?(cond_user): |(?:(?:(?! from ).)*)$) +
-            ^<F-USER>ROOT</F-USER> LOGIN REFUSED.* FROM <HOST>\s*%(__suff)s$ +
-            ^[iI](?:llegal|nvalid) user <F-USER>.*?</F-USER> from <HOST>%(__on_port_opt)s\s*+
-            ^User <F-USER>.+</F-USER> from <HOSTnot allowed because not listed in AllowUsers\s*%(__suff)s$ +
-            ^User <F-USER>.+</F-USER> from <HOST> not allowed because listed in DenyUsers\s*%(__suff)s$ +
-            ^User <F-USER>.+</F-USER> from <HOST> not allowed because not in any group\s*%(__suff)s$ +
-            ^Connection closed by <HOST> port \d+ \[preauth\]$ +
-            ^refused connect from \S+ \(<HOST>\)\s*%(__suff)s$ +
-            ^Received <F-MLFFORGET>disconnect</F-MLFFORGET> from <HOST>%(__on_port_opt)s:\s*3: .*: Auth fail%(__suff)s$ +
-            ^User <F-USER>.+</F-USER> from <HOST> not allowed because a group is listed in DenyGroups\s*%(__suff)s$ +
-            ^User <F-USER>.+</F-USER> from <HOST> not allowed because none of user's groups are listed in AllowGroups\s*%(__suff)s$ +
-            ^pam_unix\(sshd:auth\):\s+authentication failure;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\s*ruser=<F-USER>\S*</F-USER>\s*rhost=<HOST>\s.*%(__suff)s$ +
-            ^(error: )?maximum authentication attempts exceeded for <F-USER>.*</F-USER> from <HOST>%(__on_port_opt)s(?: ssh\d*)?%(__suff)s$ +
-            ^User <F-USER>.+</F-USER> not allowed because account is locked%(__suff)s +
-            ^<F-MLFFORGET>Disconnecting</F-MLFFORGET>: Too many authentication failures(?: for <F-USER>.+?</F-USER>)?%(__suff)s +
-            ^<F-NOFAIL>Received <F-MLFFORGET>disconnect</F-MLFFORGET></F-NOFAIL> from <HOST>: 11: +
-            ^<F-NOFAIL>Connection <F-MLFFORGET>closed</F-MLFFORGET></F-NOFAIL> by <HOST>%(__suff)s$ +
-            ^<F-MLFFORGET><F-NOFAIL>Accepted publickey</F-NOFAIL></F-MLFFORGET> for \S+ from <HOST>(?:\s|$)+
  
-mdre-normal =+[Init] 
 +insertpos 
 +blocktype = deny 
 +destination = any 
 +application = 
 +</code>
  
-mdre-ddos ^Did not receive identification string from <HOST>%(__suff)s$ +===== Filtry ve filter.=====
-            ^Connection <F-MLFFORGET>reset</F-MLFFORGET> by <HOST>%(__on_port_opt)s%(__suff)s +
-            ^<F-NOFAIL>SSH: Server;Ltype:</F-NOFAIL> (?:Authname|Version|Kex);Remote: <HOST>-\d+;[A-Z]\w+: +
-            ^Read from socket failed: Connection <F-MLFFORGET>reset</F-MLFFORGET> by peer%(__suff)s+
  
-mdre-extra = ^Received <F-MLFFORGET>disconnect</F-MLFFORGET> from <HOST>%(__on_port_opt)s:\s*14: No supported authentication methods available%(__suff)s$ +Kromě SoftEtheru jsem používal i vlastní filtry pro Nextcloud, UFW portscan agresivnější SSH.
-            ^Unable to negotiate with <HOST>%(__on_port_opt)s: no matching <__alg_match> found. +
-            ^Unable to negotiate <__alg_match>%(__suff)s$ +
-            ^no matching <__alg_match> found:+
  
-mdre-aggressive = %(mdre-ddos)s +Filtr pro portscan:
-                  %(mdre-extra)s +
- +
-cfooterre = ^<F-NOFAIL>Connection from</F-NOFAIL> <HOST> +
- +
-failregex = %(cmnfailre)s +
-            <mdre-<mode>> +
-            %(cfooterre)s +
- +
-# Parameter "mode"normal (default), ddos, extra or aggressive (combines all) +
-# Usage example (for jail.local): +
-#   [sshd] +
-#   mode = extra +
-#   # or another jail (rewrite filter parameters of jail): +
-#   [sshd-aggressive] +
-#   filter = sshd[mode=aggressive] +
-+
-mode = normal +
- +
-#filter = sshd[mode=aggressive] +
- +
-ignoreregex =  +
- +
-maxlines = 1 +
- +
-journalmatch = _SYSTEMD_UNIT=sshd.service + _COMM=sshd +
- +
-datepattern = {^LN-BEG} +
- +
-# DEV Notes: +
-+
-#   "Failed \S+ for .*? from <HOST>..." failregex uses non-greedy catch-all because +
-#   it is coming before use of <HOST> which is not hard-anchored at the end as well, +
-#   and later catch-all's could contain user-provided input, which need to be greedily +
-#   matched away first. +
-+
-# Author: Cyril Jaquier, Yaroslav Halchenko, Petr Voralek, Daniel Black and Sergey Brester aka sebres +
-# Rewritten using prefregex (and introduced "mode" parameter) by Serg G. Brester.+
  
 +<code ini>
 +[Definition]
 +failregex = .*\[UFW BLOCK\] IN=.* SRC=<HOST>
 +ignoreregex =
 </code> </code>
  
-**/etc/fail2ban/filter.d/ufwban.conf**+Filtr pro Nextcloud:
  
-<code bash>+<code ini>
 [INCLUDES] [INCLUDES]
 before = common.conf before = common.conf
  
 [Definition] [Definition]
-#failregex .*\[UFW BLOCK\IN=.SRC=<HOST> +_groupsre (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*) 
-failregex = UFW BLOCK.SRC=<HOST>+failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed: 
 +datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
 ignoreregex = ignoreregex =
- 
 </code> </code>
  
-==== Testování regulárního výrazu vlastního filtru ====+U SSH jsem měl vlastní variantu filtru, která navíc banuje i ''preauth'' uzavření spojení:
  
-Tady je ukázka, jak lze otestovat vlastní filtr. +<code> 
- +^Connection closed by <HOST> port \d+ \[preauth\]$
-<code bash+
-fail2ban-regex  /var/log/ufw.log '.*\[UFW BLOCK\] IN=.* SRC=<HOST>'+
 </code> </code>
  
 +===== Nastavení jail.local =====
  
-===== Editace fail2ban.conf =====+Základ globální konfigurace:
  
-Tady popisuji hodnoty, které jde oproti defaultnímu nastavení změnil. +<code ini
- +bantime  = 10m 
-<code> +findtime = 10m 
-dbpurgeage 10d+maxretry 3
 </code> </code>
  
-===== Editace jail.local =====+Na některých strojích jsem používal ''iptables-ipset-proto6'', aby se při větším počtu blokovaných IP nezpomaloval firewall:
  
- +<code ini>
-Nejprve je třeba v souboru jail.local nastavit banaction i na ipv6 a bannování skrz ipset. V provozu může vzniknout docela dost ip adres, které je třeba bannovat, tak bude rozumné kvůli rychlosti firewallu použít ipset místo defaultního nastavení: +
- +
-<code>+
 banaction = iptables-ipset-proto6 banaction = iptables-ipset-proto6
 banaction_allports = iptables-ipset-proto6-allports banaction_allports = iptables-ipset-proto6-allports
 </code> </code>
  
-Zkoušel jsem zvolit banaction = ufw, ale tady se zabanovala celá ip adresa a já chci blokovat pouze konkrétní službu. Zejména co se ssh týče. +SSH s agresivnějším módem vlastním portem:
- +
-Služby, na kterých má fail2ban vyset se musí zapnout pomocí enabled = true. U SSH jsem volil mód aggressive. Blokace je 10 minut pro všechny služby, pokud zkusí 3 více pokusů za posledních 10 minut. +
- +
-<code> +
-# "bantime" is the number of seconds that a host is banned. +
-bantime  = 10m +
- +
-# A host is banned if it has generated "maxretry" during the last "findtime" +
-# seconds. +
-findtime  = 10m +
- +
-# "maxretry" is the number of failures before a host get banned. +
-maxretry = 3 +
-</code> +
- +
- +
-Tady se odehrává zbytek nastavení fail2ban. Sepisuji zejména změny, které jsem provedl. U SSH jsem si změnil port a to je potřeba promítnout i v konfiguraci. Je tam vidět port 3333. +
- +
-<code> +
- +
-ignoreip = 127.0.0.1/8 ::1+
  
 +<code ini>
 [sshd] [sshd]
- 
-# To use more aggressive sshd modes set filter parameter "mode" in jail.local: 
-# normal (default), ddos, extra or aggressive (combines all). 
-# See "tests/files/logs/sshd" or "filter.d/sshd.conf" for usage example and details. 
 mode    = aggressive mode    = aggressive
 port    = ssh,3333 port    = ssh,3333
Řádek 329: Řádek 166:
 backend = %(sshd_backend)s backend = %(sshd_backend)s
 enabled = true enabled = true
- 
-[nextcloud] 
- 
-enabled  = true 
-port     = http,https 
-filter   = nextcloud 
-logpath  = /var/www/nextcloud/data/nextcloud.log 
-maxretry = 6 
- 
- 
-#[ufwban] 
-#enabled = false 
-#port = ssh, http, https 
-#filter = ufwban 
-#logpath = /var/log/ufw.log 
-#action = ufw 
- 
 </code> </code>
  
-Dále jsem přidal sshd-slow, který zabanuje ssh pro případ, že se za 1 den někdo zkusí celkem 10x přihlásit. V tomto případě zablokuje na 1week. To už je docela problematický prohřešek. +Pomalejší dlouhodobý ban pro opakované pokusy:
- +
-<code>+
  
 +<code ini>
 [sshd-slow] [sshd-slow]
-filter  = sshd[mode=aggressive] +filter   = sshd[mode=aggressive] 
-port    = ssh, 3333+port     = ssh,3333
 maxretry = 6 maxretry = 6
 findtime = 1d findtime = 1d
Řádek 361: Řádek 180:
 backend  = %(sshd_backend)s backend  = %(sshd_backend)s
 enabled  = true enabled  = true
 +</code>
  
 +Nextcloud:
  
-[vpnserver+<code ini> 
-enabled = true +[nextcloud
-port     443,500,4500 +enabled  = true 
-protocol udp +port     http,https 
-logpath  = /usr/vpnserver/security_log/DEFAULT/sec.log +filter   nextcloud 
-banaction = iptables-allports +logpath  = /var/www/nextcloud/data/nextcloud.log 
-# Uncomment the following line if you want to be notified about banned IP's +maxretry 6
-action= %(action_mwl)s +
-filter=vpnserver +
- +
- +
-[vpnserver-securenat] +
-enabled = true +
-logpath = /usr/vpnserver/security_log/securenat/sec.log +
-port = all +
-protocol = all +
-banaction = iptables-allports +
-# Uncomment the following line if you want to be notified about banned IP's +
-action= %(action_mwl)s +
-filter=vpnserver+
 </code> </code>
  
-Pozapínal jsem další smysluplné věci, jako apache, fakegoogle boty atp. +Recidive jail:
  
-Zapnul jsem i recidive. Pokud někdo bude mít ban 3x za 12 hodin, bude celá IP adresa zablokovaná na 1 týden. Tady budu muset být opatrný a kontrolovat, protože hrozí, že někdo přijde z veřejné IP adresy, 3x dostane BAN a zablokuje celou veřejnou IP adresu.  +<code ini
- +[recidive] 
-<code> +enabled   = true 
-[recidive]                                                                                                                                                                                         +logpath   = /var/log/fail2ban.log
-enabled = true +
-logpath  = /var/log/fail2ban.log+
 banaction = %(banaction_allports)s banaction = %(banaction_allports)s
-bantime  = 1w +bantime   = 1w 
-findtime = 12h+findtime  = 12h
 </code> </code>
  
-Poslední, co jsem aplikoval je ochrana na portscan. Tady je to opět potenciálně nebezpečná záležitost u webserveru. V praxi to prochází log, hledá jednoduchý řetězec, zda byla ip adresa zablokovaná a pokud byla zablokovaná 10x, tak proběhne ban skrz ufw. +Portscan přes UFW:
  
-Problémy jsou tam tyto: +<code ini>
-  * Nečíslovaný seznamNečíslovaný seznamufw mám na loglevel = low, takže když někdo oskenuje všechny porty, tak se neprovedou tisíce záznamů do logu, ale jenom pár. Zvyšovat hodnotu zase nemá smysl kvůli zpomalení sítě a serveru.  +
-  * pokud mi tam bude padat moc IP adres, tak ufw nebude dobrá volba, kvůli velkému počtu IP adres. Může pak dojít ke zpomalení. Tady je řešení vytvořit v **action.d/ufw-portscan.conf** a upravit soubor tak, aby zablokoval pouze port 3333 a povolil 80 a 443. Nechci zablokovat všechny služby pro danou IP adresu, protože mi někdo oskenoval porty. +
- +
-<code>+
 [ufw-port-scan] [ufw-port-scan]
-enabled = true +enabled   = true 
-filter  = portscan +filter    = portscan 
-logpath = /var/log/ufw.log+logpath   = /var/log/ufw.log
 banaction = ufw-portscan banaction = ufw-portscan
-bantime         = 1w +bantime   = 1w 
-maxretry        = 300 +maxretry  = 300 
-findtime        = 3h+findtime  = 3h
 </code> </code>
  
 +===== Testování filtrů =====
  
-zdroje ohledně aplikace portscanu: +Pro ověření regulárního výrazu se hodí:
- +
-  * https://dodwell.us/security/ufw-fail2ban-portscan.html +
-  * https://serverfault.com/questions/629709/trouble-with-fail2ban-ufw-portscan-filter +
- +
-===== Vyřazení IP adresy z banlistu =====+
  
 <code bash> <code bash>
-fail2ban-client set vpnserver unbanip 89.24.33.115 +fail2ban-regex /var/log/ufw.log '.*\[UFW BLOCK\] IN=.* SRC=<HOST>'
-fail2ban-client unban 89.24.33.115+
 </code> </code>
  
-===== Vypsání všech zabanovaných adres =====+===== Zdroje =====
  
-<code bash> +  * [[https://github.com/fail2ban/fail2ban|Fail2ban]] 
-fail2ban-client banned +  * [[https://www.vpnusers.com/viewtopic.php?f=7&t=6375&sid=76707e8a5a16b0c9486a39ba34763901&view=print|SoftEther VPN User forum – fail2ban]] 
-</code>+  * [[https://serverfault.com/questions/629709/trouble-with-fail2ban-ufw-portscan-filter|Trouble with Fail2Ban UFW Portscan Filter]] 
 +  * [[https://dodwell.us/security/ufw-fail2ban-portscan.html|UFW, fail2ban and blocking portscans oh my!]] 
 +  * [[https://bobcares.com/blog/fail2ban-unban-ip/|Fail2Ban: how to unban IPs that are blocked?]]
  • infrastruktura/bezpecnost/fail2ban.1773083511.txt.gz
  • Poslední úprava: 09.03.2026 20:11
  • autor: Petr Nosek