読者です 読者をやめる 読者になる 読者になる

Drafts

@cm3 の草稿置場 / 少々Wikiっぽく使っているので中身は適宜追記修正されます。

fail2ban を導入

最近各所でセキュリティインシデントが起こっているので、セキュリティ強化が求められている。もちろん外から SSH できるようなサーバには公開鍵認証しか許していないが、それでもアクセス制限などをしておいた方がイイかもしれないと思い、調べてみた。

本当に問題のあるアクセスは来ているか

/var/log/auth.logtail -n 100 /var/log/auth.log | grep "POSSIBLE BREAK-IN ATTEMPT" みたいなコマンドで覗いてみるとけっこうよろしくないアクセスが来ている。もちろん突破されているようなログは見当たらなかった。

使うツール

denyhosts というのがある*1。でもいろいろ更新がストップしていて、セキュリティ対策に使うのには望ましくなさそう。そこで、Fail2ban を使うことにした*2

時間の設定

/etc/fail2ban/jail.conf に禁止する時間 bantime や試行回数をカウントする時間 findtime が設定されているが、デフォルトは 600 秒と非常に短いので、前者を -1 後者を 86400 にした。-1 にすることで永久 ban になるようだ(参考: Permanent block of IP after n retries using fail2ban - Server Fault

ホワイトリスト

/etc/fail2ban/jail.conf

ignoreip = 127.0.0.1/8

と初めから設定されているのでスペース区切りで追加する。うちの場合はプライベートネットワーク "10.0.0.0/8" を追加した。

ブラックリスト

こちらは少々面倒だが、How to make fail2ban bans persistent | zach.seifts.us にその方法が書いてある。/etc/fail2ban/ip.blacklist に IPを列挙し、fail2ban に自動的に追加してもらうと共に、fail2ban 起動時に中身を読み込んで IP tables に禁止を書き込む仕様になっている。結果的に永続化も可能になる。

一応ここにも書いておくと、/etc/fail2ban/action.d/iptables-multiport.conf の actionban と actionstart に

actionban = iptables -I fail2ban-<name> 1 -s <ip> -j DROP
            echo <ip> >> /etc/fail2ban/ip.blacklist
actionstart = iptables -N fail2ban-<name>
              iptables -A fail2ban-<name> -j RETURN
              iptables -I INPUT -p <protocol> -m multiport --dports <port> -j fail2ban-<name>
              cat /etc/fail2ban/ip.blacklist | while read IP; do iptables -I fail2ban-<name> 1 -s $IP -j DROP; done

のような形で1行ずつ追加する。

/etc/fail2ban/ip.blacklist に余計な空行を入れたらエラーになったのでそこは注意。

ルールの追加

もともと /var/log/auth.log を覗いた時に、"reverse mapping checking getaddrinfo ..." というログイン試行っぽいのが気になったわけだが、デフォルトではそれは無視されている。そこでルールを追加する。

/etc/fail2ban/filter.d/sshd.conf の failregex に

^%(__prefix_line)sreverse mapping checking getaddrinfo .* \[<HOST>\] failed - POSSIBLE BREAK-IN ATTEMPT!\s*$

の一行を追加するだけだ。これを含めて、fail2banでSSH攻撃対策を強化する(filter.d/sshd.confを編集する) | 本日も乙に詳しいことが書いてある。

各種コマンド

  • sudo apt-get install fail2ban インストール
  • sudo service fail2ban restart 再起動
  • sudo iptables -nL iptables を確認。"Chain fail2ban-ssh" の下にルールが追加される
  • tail -n 100 /var/log/fail2ban.log fail2ban のログを100行確認
  • tail -n 100 /var/log/auth.log sshd などのログを100行確認
  • wc -l /etc/fail2ban/ip.blacklist ブロックしている ip アドレスの数を表示。経過観察に。
  • grep Accepted /var/log/auth.log 成功したものを列挙する。予期しない成功があったりするとまずい。
  • grep Accepted /var/log/auth.log | awk '{print $1 " " $2 " " $3 "\t" $9 "\t" $11}' これをログしておけばいい感じ。

経過観察

1週間経ってブロックしたアドレスは 81 件でした。初めの2日でかなりブロックされた後は落ち着いた感じです。

f:id:cm3ak:20150805090929p:plain

上が IPアドレスから割当国を調べるDNSサービス を利用して調べた国のリストですが中国、ブラジル、オランダ、アメリカ、…けっこう多様性に満ちています。でも国内からは無いですね。つまり、使用者が国内だけなら国レベルでとりあえずはじいてしまうのも有効かも。

Todo