Thu Apr 18, 2019 [長年日記]

#1 [Linux] fail2ban 設定

https化のためにreverse proxy用の仮想サーバを構築しましたが、sshやSMTP-AUTHに対するBrute Force Attackが多いので、fail2banで防御することにしました。

で、手っ取り早く yum を使って epel から install。fail2ban.local と jail.local を作って起動してみましたが、fail2ban-client status で見ると不審な IP アドレスが記録されているのに、その IP アドレスからのアクセスがブロックされている気配がありません。

どうなっているのかと思ってググってみたところ、fail2ban と firewalld の組み合わせで、banaction に firewallcmd-ipset を使うと上手く動作しないという記事を見つけました。

この記事に従って、firewall-cmd-ipset-new を作ってみましたが、今度は ipset add コマンドの実行で、name: No such file or directory というエラーが出てしまいます。firewall-cmd-ipset-new の中で ipset add fail2ban-<name> と定義していて、<name> の部分が置き換わるはずなのに、それが置き換わらずにそのまま実行されてエラーになっているようでした。

どうすれば良いのか良くわからなかったのですが、jail.local の banaction を定義する際、name を指定したら正常に動作するようになりました。

あと、blocktype は firewall の zone に展開されるので、既存の drop zone に設定されるように定義しました。

以下に設定情報を載せておきます。

  • fail2ban.local
    [Definition]
    loglevel = NOTICE
    
  • jail.local
    [DEFAULT]
    bantime = 3600
    destemail = yamag@nadare.net
    sender = fail2ban@nadare.net
    mta = postfix
     
    [sshd] 
    enabled = true
    bantime = 3600
    banaction = firewallcmd-ipset-new[name=sshd, bantime=3600]
                sendmail-whois[name=SSH, dest=yamag@nadare.net, sender=fail2ban@nadare.net, sendername="fail2ban"]
     
    [postfix-sasl] 
    enabled = true
    bantime = 3600
    banaction = firewallcmd-ipset-new[name=postfix-sasl, bantime=3600]
                sendmail-whois[name=SMTP, dest=yamag@nadare.net, sender=fail2ban@nadare.net, sendername="fail2ban"]
     
    [recidive] 
    enabled = true
    banaction = firewallcmd-ipset-new[name=recidive, bantime=604800]
    
  • action.d/firewallcmd-ipset-new.conf
    [INCLUDES]
     
    before =
     
    [Definition]
     
    # actionstart = ipset create fail2ban-<name> hash:ip timeout <bantime>
    actionstart = firewall-cmd --permanent --new-ipset=fail2ban-<name> --type=hash:ip --option=timeout=<bantime>
                  firewall-cmd --permanent --zone=<blocktype> --add-source=ipset:fail2ban-<name>
                  firewall-cmd --reload
     
    actionstop = firewall-cmd --permanent --zone=<blocktype> --remove-source=ipset=fail2ban-<name>
                 firewall-cmd --permanent --delete-ipset=fail2ban-<name>
                 firewall-cmd --reload
                 ipset flush fail2ban-<name>
                 ipset destroy fail2ban-<name>
     
    actionban = ipset add fail2ban-<name> <ip> timeout <bantime> -exist
     
    actionunban = ipset del fail2ban-<name> <ip> -exist
     
    [Init] 
    blocktype = drop
    

    (追記) firewallの設定は、次のようになります。

    [root@rt1 ~]# firewall-cmd --info-zone=drop
    drop (active)
      target: DROP
      icmp-block-inversion: no
      interfaces: 
      sources: ipset:fail2ban-postfix-sasl ipset:fail2ban-sshd ipset:fail2ban-recidive
      services: 
      ports: 
      protocols: 
      masquerade: no
      forward-ports: 
      source-ports: 
      icmp-blocks: 
      rich rules: 
    	
    [root@rt1 ~]# firewall-cmd --info-ipset=fail2ban-sshd
    fail2ban-sshd
      type: hash:ip
      options: timeout=3600
      entries: 
    [root@rt1 ~]# firewall-cmd --info-ipset=fail2ban-postfix-sasl
    fail2ban-postfix-sasl
      type: hash:ip
      options: timeout=3600
      entries: 
    [root@rt1 ~]# firewall-cmd --info-ipset=fail2ban-recidive
    fail2ban-recidive
      type: hash:ip
      options: timeout=604800
      entries: 
    [root@rt1 ~]# 
    

«前の日記(Sat Apr 13, 2019) 最新