るるぷらす

るるぷらす、だおー

OS X 10.7 Lion (Server) に DenyHosts を設定して ssh のセキュリティを向上する。

サーバを外部に公開して ssh を有効にしていると、度々 ssh に対してアタックされるので軽くセキュリティ向上のために DenyHosts をインストールしました。これをインストールすることによって、何回かログインに失敗した host からのアクセスを制限します。

例えば、2回ログインに失敗したホストの IP を hosts.deny というブラックリストのファイルに記録し、hosts.deny に記録された IP からの接続を遮断するということができます。

インストール手順

  1. ダウンロードサイト DenyHosts にアクセスして、"Looking for the latest version? Download DenyHosts-2.6.tar.gz (42.7 kB)" から最新版をダウンロードします。
  2. ファイルを解凍し、わかりやすいところに DenyHosts-2.6 フォルダを保存します。
  3. ターミナルで DenyHosts-2.6 に移動します。(例:cd ~/Desktop/DenyHosts-2.6 )
  4. 更に次のコマンドを入力します。
    sudo python setup.py install

DenyHosts のインストールは python が必要ですが、最近の Mac なら標準でインストールされていることでしょう。

これでインストールは完了しました。次にいろいろ設定ファイルを作成しましょう。いろいろめんどくさいので sudo su で設定しました。

  • sudo su
    Password: (管理者権限のパスワードを入力)
  • cd /usr/share/denyhosts/
  • cp denyhosts.cfg-dist denyhosts.cfg
  • vi denyhosts.cfg
  • 1. i でインサート開始、下記の記述に変更。
  • SECURE_LOG = /var/log/secure.log
  • HOSTS_DENY = /etc/hosts.deny
  • LOCK_FILE = /var/run/denyhosts.pid
  • 2. esc でインサート終了
  • 3. ZZ で vi 終了
  • cp daemon-control-dist daemon-control
  • vi daemon-control
  • 1. i でインサート開始、下記の記述を変更。
  • DENYHOSTS_BIN = "/usr/local/bin/denyhosts.py"
  • DENYHOSTS_LOCK = "/var/run/denyhosts.pid"
  • 2. esc でインサート終了
  • 3. ZZ で vi 終了
  • 拒否する/しないホストを記録するためのファイルを作成する。
    sudo touch /etc/{hosts.deny,hosts.allow}

これで初期設定は完了。試しに起動してみる場合は、sudo /usr/share/denyhosts/daemon-control start で起動できる。

これをサーバ起動と共に動作するようにしたいので、起動スクリプトを作成する。めんどくさいので丸々コピーして CloudApp に保存しておく。

起動スクリプト (StartupItems)
http://api.cld.me/2W3Y2r141q1I052a2c0v/download/DenyHosts.zip
DenyHosts.zip を解凍して、/Library/StartupItems/ にコピー
起動スクリプト (LaunchDaemons)
http://api.cld.me/1c3M471d2f241W0x1I2B/download/DenyHosts.plist
/Library/LaunchDaemons/ にコピー

アクセス権を修復する。

  • cd /Library/StartupItems/
  • sudo chmod -R 755 DenyHosts
  • sudo chown -R root:wheel DenyHosts
  • sudo vi /etc/hostconfig
     /etc/hostconfig に DenyHosts=-YES- を追加する。
  • cd /Library/LaunchDaemons/
  • sudo chmod 755 DenyHosts.plist
  • sudo chown root:wheel DenyHosts.plist

これでサーバを再起動してしばらく様子見。/var/log/denyhosts.log や /etc/hosts.deny をたまに確認して DenyHosts が動作しているか見るといいでしょう。hosts.deny に IP が記録されていたら動作しています。

hosts.deny が成長するとこんな感じになっていきます。→ http://cl.ly/25402t0U3t2j3b2e0i1J

これで少しは安心できる??

参考:DenyHosts で ssh ブルートフォースアタック対策 - maruko2 Note.