SSHクライアントの接続元を半自動的にホワイトリスト登録してみる


 まあ、Fail2banの話の続きですな。「完結編の続編とか普通出るだろ」という宇宙戦艦的思想で。
 つっても大した話じゃないんだけど。ホワイトリストに追加するスクリプトを書いてみた、というだけ。色々切り詰めて抜き出すとこんな感じ。

#!/usr/bin/python
import os
import commands

ssh_client_address = os.environ['SSH_CLIENT'].split()[0]

def regist_fail2ban():
    ignore = commands.getoutput('fail2ban-client get fail2ban ignoreip')
    ignore_list = [x.split()[-1] for x in ignore.splitlines()[1:]]
    if ssh_client_address in ignore_list:
        print 'Already ignored.'
    else:
        os.system('fail2ban-client set fail2ban addignoreip ' + ssh_client_address)

def main():
    regist_fail2ban()

if __name__ == '__main__':
    main()

 適当に関数を増やせば、iptablesとかにも応用出来るかな。間違ってsshじゃないシェルで使っても、os.environのとこでKeyError例外貰って即終了なので問題無し。
 こいつを適当に実行権限持たせておいて、sshでログインしたら実行しておく、みたいな使い方を想定した感じだけど、もっと便利になる手法はいくらでもありそうだ。Web UIとか、DDNSとcronの組み合わせとか。作るのめんどいけど。DDNSは既に対応してる人なら一番簡単だろうけどなあ。

追記:
 アドレスが変わった時に旧アドレスの登録抹消などの処理はしないので、真面目に気になってきたら修正するかも。

(Visited 18 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください