MaxloginsでSSH不正アクセス対策
2 月 8, 2009 6:47 pm FreeBSD謹賀新年のコメントをPOSTしてからはや一ヶ月。そろそろ更新しなきゃな~~と思ってましたが身近な後輩から
「dorakenさん、謹賀新年から1ヶ月も更新されてないっすよ~~、早く更新して下さいよ♪(* ̄ー ̄)v」
という突っ込みが。
「・・・・・・・・ ( ̄  ̄;) うーん 時間がねぇ」と思いつつもさすがにこのまま放置というわけにも行かないので今回は小技にあたるSSHアタック対策の一つ、MaxloginsでSSH不正アクセス対策を行ってみたいと思います。
このソフトを使うと何が出来るかというと「パスワードを規定回数間違えたIPアドレスからのアクセスを一定時間アクセス禁止にする」事が可能です。過去に紹介した日本国内からSSHとsshでログインできるユーザーを決めましょうと併せて対策を行うことでFreeBSD単体で強固な対策が可能になります。出来ればルータでアクセスできるIPアドレスを制限したり、ポート番号を変更したりなどの対策を施せばベストなのですけどね。
Maxloginsはperlで記述されています。オフシャルサイトを見ると「Tested under Perl 5.8.4 and 5.6.1, and FreeBSD 4.7.」と記載がありますのでperl5であればLinuxであっても問題なく使用可能と思います。dorakenはFreeBSD6.4Rで使用しています。
rootでログインした後、オフシャルサイトからプログラム本体をダウンロードするところから始めまてインストール及び調整を行っていきましょう。ディレクトリは何処を使用しても問題有りません。dorakenは「/root」フォルダ直下にダウンロードしました。
fetch http://www.teamits.com/resources/maxlogins.txt
次にダウンロードしたプログラムを[/usr/local/bin]にコピーして、syslogからmaxlogins.plを読み出し、利用できるように調整します。
# cp maxlogins.txt /usr/local/bin/maxlogins.pl
# chown root:wheel /usr/local/bin/maxlogins.pl
# chmod 750 /usr/local/bin/maxlogins.pl
# vi /etc/syslog.conf
auth.info;authpriv.info /var/log/auth.log # 元々記述されている
auth.info;authpriv.info |exec /usr/local/bin/maxlogins.pl # 上記直下に追記する。
最後に[/etc/hosts.allow]にmaxloginsで書き出しされたIPをブロックする設定を記述します。ローカルホストからのログインは常に有効にしたいので下記のようにループバックアドレスの直下に起きましょう。
# vi /etc/hosts.allow
sshd : 127.0.0.1 : allow
sshd : /var/log/maxlogins : deny
最後にsyslogdの再起動を行ってmaxlogins.plがsyslogdから自動的に呼ばれる設定を有効にします。
# killall -HUP syslogd
以上で対策は完了しました。dorakenは最初に説明したとおり、日本国内からのSSHアクセス以外はすべて不許可の設定にしていますので
sshd : 127.0.0.1 : allow
sshd : 常に許可したい接続IPアドレス : allow
sshd : /var/log/maxlogins : deny
sshd : 日本国内のIPアドレス : allow
sshd : ALL : deny
になっています。つまりlocalhostと自分が使用しているプライベートIPアドレスは何があってもSSH接続を許可、maxloginsに記述されたIPはすべてアクセス禁止、日本国内からのアクセスは(基本的に)許可、それ以外は禁止、という設定です。
maxloginsは何日アクセスを禁止するか、何回パスワード認証に失敗したらアクセス禁止IPとするかなどを決めることが可能ですが、それらは後日追記したいと思います。
