Fail2Banでアクセス制限

やりたいこと

  • sshでの総当たり攻撃を拒否
  • ブラックリストの自動更新

前提

  • サーバーの/var/log/auth.logを見るとsshアクセスを試みている形跡がある
  • 不正アクセスはされていないようだが,制限しておいた方が良さそうな気がする
  • ある程度のセキュリティ対策は既におこなっている
    • rootログイン不可
    • パスワード認証不可
    • 認証の試行回数を制限
    • ファイアウォール

ログの確認は以下のようにおこなう. 適宜フィルタリングしてどんなアクセスがあるか確認すれば良い.

//ログ確認
$ cat /var/log/auth.log | grep sshd
// 存在しないユーザーへのアクセス
$ cat /var/log/auth.log | grep sshd.\*Invalid

Fail2Ban

Fail2Banはログの解析により総当たり攻撃を検知し,IPアドレスに基づいて一定時間アクセス制限をおこなう.

導入

$ sudo aptitude install fail2ban

設定

/etc/fail2ban/jail.confは直接編集することが推奨されていないようなので, /etc/fail2ban/jail.localに設定を書き込む.

$ sudo emacs /etc/fail2ban/jail.local

jail.local

[INCLUDES]
before = paths-debian.conf

[DEFAULT]
ignoreip = 127.0.0.1/8
ignorecommand =

bantime  = 600
findtime  = 600
maxretry = 6

backend = auto
usedns = warn
logencoding = auto

enabled = false

filter = %(__name__)s

# Mail Settings
destemail = xxx@yyy.com
sendername = Fail2Ban
mta = mail

# Firewall Defaults
protocol = tcp
chain = INPUT
port = 0:65535
banaction = iptables-multiport

# Our Banning Action
# ban & send an e-mail with whois report and relevant log lines
# to the destemail.
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"]

# Choose default action.
action = %(action_mwl)s

#
# JAILS
#

#
# SSH servers
#

[sshd]
enabled = true
port    = ssh
filter = sshd
logpath  = /var/log/auth.*
maxretry = 6

[sshd-ddos]
enabled = true
port    = ssh
filter = sshd-ddos
logpath  = /var/log/auth.*
maxretry = 6

bantime = -1は永久ban.

起動

設定を変更した後は再起動する.

$ sudo service fail2ban start
// 再起動
$ sudo service fail2ban restart

確認

$ sudo fail2ban-client status
$ sudo fail2ban-client status sshd

ブラックリスト

GitHubレポジトリmitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banningから設定ファイルをダウンロードする.

// /etc/fail2ban/filter.d/blacklist.conf の作成
$ cd /etc/fail2ban/filter.d
$ sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/filter.d/blacklist.conf -O blacklist.conf

// /etc/fail2ban/action.d/blacklist.conf の作成
$ cd /etc/fail2ban/action.d
$ sudo wget https://raw.githubusercontent.com/mitchellkrogza/Fail2Ban-Blacklist-JAIL-for-Repeat-Offenders-with-Perma-Extended-Banning/master/action.d/blacklist.conf -O blacklist.conf

/etc/fail2ban/jail.localの末尾へ追記する.

jail.local

[blacklist]
enabled = true
logpath  = /var/log/fail2ban.*
filter = blacklist
banaction = blacklist
bantime  = 31536000   ; 1 year
findtime = 31536000   ; 1 year
maxretry = 10

blacklistに登録されたipが列挙されるファイル/etc/fail2ban/ip.blacklistを作成する.

sudo touch /etc/fail2ban/ip.blacklist
sudo chmod 755 /etc/fail2ban/ip.blacklist

その後,再起動する.

今後の課題

  • しばらくモニタリングして結果を確認
    • 不正アクセス元のIPがブラックリストへ追加されているか
    • 総当たり攻撃が減っているか

参考