zoukankan      html  css  js  c++  java
  • fail2ban(1)

    fail2ban基于python,内置多种filter以及action,常见可对ssh voip等进行保护,原理是基于日志进行分析,自动ban掉地址。
    1)filter和action是核心 需要对正则表达式以及python语法有了解才能理解,filter在jail中只能配置一个,action则可以有多个
    Each jail can be configured with only a single filter, but may have multiple actions. By default, the name of a action is the action filename
    2)来看下fail2ban -client -d输出:

    root@ca:/etc/fail2ban# fail2ban-client  -d 
    ['set', 'syslogsocket', 'auto']
    ['set', 'loglevel', 'INFO']
    ['set', 'logtarget', '/var/log/fail2ban.log']
    ['set', 'dbfile', '/var/lib/fail2ban/fail2ban.sqlite3']
    ['set', 'dbpurgeage', 86400]
    ['add', 'sshd', 'auto']
    ['set', 'sshd', 'ignorecommand', '']
    ['set', 'sshd', 'addlogpath', '/var/log/auth.log', 'head']
    ['set', 'sshd', 'usedns', 'warn']
    ['set', 'sshd', 'addignoreip', '127.0.0.1/8']
    ['set', 'sshd', 'logencoding', 'auto']
    ['set', 'sshd', 'bantime', 600]
    ['set', 'sshd', 'maxretry', 5]
    ['set', 'sshd', 'findtime', 600]
    ['set', 'sshd', 'maxlines', '10']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?(?:error: PAM: )?[aA]uthentication (?:failure|error|failed) for .* from <HOST>( via \S+)?\s*$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?(?:error: PAM: )?User not known to the underlying authentication module for .* from <HOST>\s*$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?Failed \S+ for (?P<cond_inv>invalid user )?(?P<user>(?P<cond_user>\S+)|(?(cond_inv)(?:(?! from ).)*?|[^:]+)) from <HOST>(?: port \d+)?(?: ssh\d*)?(?(cond_user):|(?:(?:(?! from ).)*)$)']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?ROOT LOGIN REFUSED.* FROM <HOST>\s*$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?[iI](?:llegal|nvalid) user .*? from <HOST>(?: port \d+)?\s*$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?User .+ from <HOST> not allowed because not listed in AllowUsers\s*$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?User .+ from <HOST> not allowed because listed in DenyUsers\s*$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?User .+ from <HOST> not allowed because not in any group\s*$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?refused connect from \S+ \(<HOST>\)\s*$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?(?:error: )?Received disconnect from <HOST>: 3: .*: Auth fail(?: \[preauth\])?$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?User .+ from <HOST> not allowed because a group is listed in DenyGroups\s*$']
    ['set', 'sshd', 'addfailregex', "^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?User .+ from <HOST> not allowed because none of user's groups are listed in AllowGroups\s*$"]
    ['set', 'sshd', 'addfailregex', '^(?P<__prefix>(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?)User .+ not allowed because account is locked<SKIPLINES>(?P=__prefix)(?:error: )?Received disconnect from <HOST>: 11: .+ \[preauth\]$']
    ['set', 'sshd', 'addfailregex', '^(?P<__prefix>(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?)Disconnecting: Too many authentication failures for .+? \[preauth\]<SKIPLINES>(?P=__prefix)(?:error: )?Connection closed by <HOST> \[preauth\]$']
    ['set', 'sshd', 'addfailregex', '^(?P<__prefix>(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?)Connection from <HOST> port \d+(?: on \S+ port \d+)?<SKIPLINES>(?P=__prefix)Disconnecting: Too many authentication failures for .+? \[preauth\]$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?(error: )?maximum authentication attempts exceeded for .* from <HOST>(?: port \d*)?(?: ssh\d*)? \[preauth\]$']
    ['set', 'sshd', 'addfailregex', '^(?:\[\])?\s*(?:<[^.]+\.[^.]+>\s+)?(?:\S+\s+)?(?:kernel: \[ *\d+\.\d+\]\s+)?(?:@vserver_\S+\s+)?(?:(?:(?:\[\d+\])?:\s+[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?|[\[\(]?sshd(?:\(\S+\))?[\]\)]?:?(?:\[\d+\])?:?)\s+)?(?:\[ID \d+ \S+\]\s+)?pam_unix\(sshd:auth\):\s+authentication failure;\s*logname=\S*\s*uid=\d*\s*euid=\d*\s*tty=\S*\s*ruser=\S*\s*rhost=<HOST>\s.*$']
    ['set', 'sshd', 'addjournalmatch', '_SYSTEMD_UNIT=sshd.service', '+', '_COMM=sshd']
    ['set', 'sshd', 'addaction', 'iptables-multiport']
    ['set', 'sshd', 'action', 'iptables-multiport', 'actionunban', '<iptables> -D f2b-<name> -s <ip> -j <blocktype>']
    ['set', 'sshd', 'action', 'iptables-multiport', 'actionstop', '<iptables> -D <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>
    <iptables> -F f2b-<name>
    <iptables> -X f2b-<name>']
    ['set', 'sshd', 'action', 'iptables-multiport', 'actionban', '<iptables> -I f2b-<name> 1 -s <ip> -j <blocktype>']
    ['set', 'sshd', 'action', 'iptables-multiport', 'actionstart', '<iptables> -N f2b-<name>
    <iptables> -A f2b-<name> -j <returntype>
    <iptables> -I <chain> -p <protocol> -m multiport --dports <port> -j f2b-<name>']
    ['set', 'sshd', 'action', 'iptables-multiport', 'actioncheck', "<iptables> -n -L <chain> | grep -q 'f2b-<name>[ \t]'"]
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/known/protocol', 'tcp']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/chain', 'INPUT']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/returntype', 'RETURN']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/lockingopt', '-w']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/known/lockingopt', '-w']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/name', 'default']
    ['set', 'sshd', 'action', 'iptables-multiport', 'iptables', 'iptables <lockingopt>']
    ['set', 'sshd', 'action', 'iptables-multiport', 'lockingopt', '-w']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/blocktype', 'REJECT --reject-with icmp-port-unreachable']
    ['set', 'sshd', 'action', 'iptables-multiport', 'port', 'ssh']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/known/returntype', 'RETURN']
    ['set', 'sshd', 'action', 'iptables-multiport', 'returntype', 'RETURN']
    ['set', 'sshd', 'action', 'iptables-multiport', 'name', 'sshd']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/protocol', 'tcp']
    ['set', 'sshd', 'action', 'iptables-multiport', 'chain', 'INPUT']
    ['set', 'sshd', 'action', 'iptables-multiport', 'bantime', '600']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/known/blocktype', 'REJECT --reject-with icmp-port-unreachable']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/known/chain', 'INPUT']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/port', 'ssh']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/known/iptables', 'iptables <lockingopt>']
    ['set', 'sshd', 'action', 'iptables-multiport', 'protocol', 'tcp']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/known/name', 'default']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/iptables', 'iptables <lockingopt>']
    ['set', 'sshd', 'action', 'iptables-multiport', 'blocktype', 'REJECT --reject-with icmp-port-unreachable']
    ['set', 'sshd', 'action', 'iptables-multiport', 'known/known/port', 'ssh']
    ['start', 'sshd']
    

    3)fail.conf配置项说明

    dbfile = /var/lib/fail2ban/fail2ban.sqlite3
    # 设置守护进程持久化数据(配置指令)所使用的设置,可以是:
    # None     - 不缓存重要数据(配置指令)。
    # memory   - 将数据(配置指令)放到内存中,服务停止则数据丢失。
    # FILE     - 将数据(配置指令)保存到本地文件中,服务启动时会自动读取加载,服务停止数据不会丢失
    

    在debian中sshd默认是启用的,在/etc/fail2ban/jail.d/default*.local(具体文件不记得的)启用了sshd
    jail.conf配置文件内容如下:

    [INCLUDES]
    before = paths-debian.conf
    
    [DEFAULT]
    
    ignoreip = 127.0.0.1/8
    ignorecommand =
    bantime  = 3600
    findtime  = 600
    maxretry = 5
    backend = auto
    usedns = warn
    logencoding = auto
    enabled = false
    
    filter = %(__name__)s
    
    destemail = root@localhost
    sender = root@localhost
    mta = sendmail
    protocol = tcp
    chain = INPUT
    
    port = 0:65535
    
    fail2ban_agent = Fail2Ban/%(fail2ban_version)s
    
    banaction = iptables-multiport
    banaction_allports = iptables-allports
    
    action_ = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
    
    action_mw = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
                %(mta)s-whois[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", protocol="%(protocol)s", chain="%(chain)s"]
    
    action_mwl = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
                 %(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
    **解释下:%(mta)s-whois-lines等同于sendmail-whois-lines,该action存在于action.d/文件夹中**
    action_xarf = %(banaction)s[name=%(__name__)s, bantime="%(bantime)s", port="%(port)s", protocol="%(protocol)s", chain="%(chain)s"]
                 xarf-login-attack[service=%(__name__)s, sender="%(sender)s", logpath=%(logpath)s, port="%(port)s"]
    
    action_cf_mwl = cloudflare[cfuser="%(cfemail)s", cftoken="%(cfapikey)s"]
                    %(mta)s-whois-lines[name=%(__name__)s, sender="%(sender)s", dest="%(destemail)s", logpath=%(logpath)s, chain="%(chain)s"]
    
    action_blocklist_de  = blocklist_de[email="%(sender)s", service=%(filter)s, apikey="%(blocklist_de_apikey)s", agent="%(fail2ban_agent)s"]
    
    action_badips = badips.py[category="%(__name__)s", banaction="%(banaction)s", agent="%(fail2ban_agent)s"]
    action_badips_report = badips[category="%(__name__)s", agent="%(fail2ban_agent)s"]
    
    action = %(action_)s
    
    [sshd]
    
    port    = 40022
    logpath = %(sshd_log)s
    backend = %(sshd_backend)s
    
    [sshd-ddos]
    port    = ssh
    logpath = %(sshd_log)s
    backend = %(sshd_backend)s
    

    首先看jail.conf配置文件,在该文件中的include配置节存在(before=paths-debian.conf内容如下):

    # Debian
    [INCLUDES]
    before = paths-common.conf
    after  = paths-overrides.local
    
    [DEFAULT]
    syslog_mail = /var/log/mail.log
    syslog_mail_warn = /var/log/mail.warn
    syslog_authpriv = /var/log/auth.log
    # syslog_auth = /var/log/auth.log
    #
    syslog_user  =  /var/log/user.log
    syslog_ftp = /var/log/syslog
    syslog_daemon =  /var/log/daemon.log
    syslog_local0 =  /var/log/messages
    apache_error_log = /var/log/apache2/*error.log
    apache_access_log = /var/log/apache2/*access.log
    exim_main_log = /var/log/exim4/mainlog
    # was in debian squeezy but not in wheezy
    # /etc/proftpd/proftpd.conf (SystemLog)
    proftpd_log = /var/log/proftpd/proftpd.log
    

    在以上paths-debian.conf中可以看到before=paths-common.conf内容如下:

    # Common
    #
    
    [INCLUDES]
    
    after  = paths-overrides.local
    
    [DEFAULT]
    
    default_backend = auto
    
    sshd_log = %(syslog_authpriv)s
    sshd_backend = %(default_backend)s
    
    dropbear_log = %(syslog_authpriv)s
    dropbear_backend = %(default_backend)s
    
    # There is no sensible generic defaults for syslog log targets, thus
    # leaving them empty here so that no errors while parsing/interpolating configs
    syslog_daemon =
    syslog_ftp =
    syslog_local0 =
    syslog_mail_warn =
    syslog_user =
    # Set the default syslog backend target to default_backend
    syslog_backend = %(default_backend)s
    
    # from /etc/audit/auditd.conf
    auditd_log = /var/log/audit/audit.log
    
    exim_main_log = /var/log/exim/mainlog
    
    nginx_error_log = /var/log/nginx/*error.log
    
    nginx_access_log = /var/log/nginx/*access.log
    
    
    lighttpd_error_log = /var/log/lighttpd/error.log
    
    # http://www.hardened-php.net/suhosin/configuration.html#suhosin.log.syslog.facility
    # syslog_user is the default. Lighttpd also hooks errors into its log.
    
    suhosin_log = %(syslog_user)s
                  %(lighttpd_error_log)s
    
    # defaults to ftp or local2 if ftp doesn't exist
    proftpd_log = %(syslog_ftp)s
    proftpd_backend = %(default_backend)s
    
    # http://svnweb.freebsd.org/ports/head/ftp/proftpd/files/patch-src_proftpd.8.in?view=markup
    # defaults to ftp but can be overwritten.
    pureftpd_log = %(syslog_ftp)s
    pureftpd_backend = %(default_backend)s
    
    # ftp, daemon and then local7 are tried at configure time however it is overwriteable at configure time
    #
    wuftpd_log = %(syslog_ftp)s
    wuftpd_backend = %(default_backend)s
    
    # syslog_enable defaults to no. so it defaults to vsftpd_log_file setting of /var/log/vsftpd.log
    # No distro seems to set it to syslog by default
    # If syslog set it defaults to ftp facility if exists at compile time otherwise falls back to daemonlog.
    vsftpd_log = /var/log/vsftpd.log
    
    # Technically syslog_facility in main.cf can overwrite but no-one sane does this.
    postfix_log = %(syslog_mail_warn)s
    postfix_backend = %(default_backend)s
    
    dovecot_log = %(syslog_mail_warn)s
    dovecot_backend = %(default_backend)s
    
    # Seems to be set at compile time only to LOG_LOCAL0 (src/const.h) at Notice level
    solidpop3d_log = %(syslog_local0)s
    
    mysql_log = %(syslog_daemon)s
    mysql_backend = %(default_backend)s
    
    roundcube_errors_log = /var/log/roundcube/errors
    
    # Directory with ignorecommand scripts
    ignorecommands_dir = /etc/fail2ban/filter.d/ignorecommands
    

    4)待理解
    fail2ban-regex 日志文件 ‘正则表达式’ 如何使用??

    Python "string interpolation"机制??

    Using  Python  "string  interpolation" mechanisms, other definitions are allowed and can
           later be used within other  definitions  as  %(name)s.   Additionally  fail2ban  has  an
           extended  interpolation  feature named %(known/parameter)s (means last known option with
           name parameter). This interpolation makes possible to extend a stock filter or jail reg‐
           exp  in  .local  file (opposite to simply set failregex/ignoreregex that overwrites it),
           e.g.
    
                  baduseragents = IE|wget
                  failregex = %(known/failregex)s
                              useragent=%(baduseragents)s
    
           Additionally to interpolation %(known/parameter)s, that does not works for filter/action
           init  parameters,  an  interpolation tag <known/parameter> can be used (means last known
           init definition of filters or actions with name  parameter).  This  interpolation  makes
           possible  to  extend  a  parameters  of  stock  filter or action directly in jail inside
           jail.conf/jail.local file without creating a separately filter.d/*.local file, e.g.
    
                  # filter.d/test.conf:
                  [Init]
                  test.method = GET
                  baduseragents = IE|wget
                  [Definition]
                  failregex = ^%(__prefix_line)s+"<test.method>"s+tests+regexps+-s+useragent=(?:<baduseragents>)
    
                  # jail.local:
                  [test]
                  # use filter "test", overwrite method to "POST" and extend known bad agents with "badagent":
                  filter = test[test.method=POST, baduseragents="badagent|<known/baduseragents>"]
    
    

    5)参考
    https://www.cnblogs.com/network-ren/p/13853770.html fail2ban系列文章
    https://www.cnblogs.com/network-ren/p/13853755.html
    简单配置 在vps上简单使用进行配置 https://help.skysilk.com/support/solutions/articles/9000149908--basic-how-to-install-and-configure-fail2ban-for-linux-vps
    https://linux.cn/article-9299-1.html 可以参考
    https://dev-notes.eu/2016/12/overriding-fail2ban-settings/ jail.conf文件的内容
    https://isister.cc/posts/Fail2ban-Basic/

  • 相关阅读:
    MongoDB 创建账户
    MongoDB高可用集群配置方案
    学习CEGUI亟待解决问题一:文本控件的格式问题
    第一讲
    ERP初阶(三):MRP基本原理
    ERP初阶(四):MRP基本构成
    学习CEGUI亟待解决问题二:消息事件传递机制问题
    Groovy处理null对象为空字符串
    silverlight与CSLA的快速应用05安装CslaExtension
    silverlight与CSLA的快速应用08客户端的CSLA代码
  • 原文地址:https://www.cnblogs.com/weihua2020/p/13995513.html
Copyright © 2011-2022 走看看