Dynamic DNS を使って SSH アクセスを制限する方法
いつでもどこからでもサーバにログインしたくなるときってありますよね。かといって、サーバの sshd への接続を全世界から可能にしておくというのは、たとえパスワード認証を無効化していても避けたいところ。
今までは自宅が事実上固定アドレスだったので、クライアントの IP アドレスによるフィルタリングで問題なかったんだけど、引越後は IP アドレスがコロコロ変わるようになるので、そのままだと対応できない。なのでちょっと頭をひねってみた。こんな感じ。
- SSH ポートについては、 iptables 等パケットフィルタによるアクセス制限を行わない
- sshd も対応している hosts_access を使って、ホスト名の「正引き」による制限を行う
- モバイル環境に Dynamic DNS のクライアントをインストールして、正引きのマッピングを自動更新
具体的には、以下のような感じで設定した。
% crontab -l */3 * * * * /usr/bin/host ???.dyndns.org | awk '/has address/ {print $4}' > /etc/hosts.allow.d/???.dyndns.org % cat /etc/hosts.allow sshd : /etc/hosts.allow.d/???.dyndns.org
これで、「???.dyndns.org」(??? は任意のホスト名) に設定された IP アドレスからだけ接続を受け付けるようになる。IP アドレスが変わると、1〜2分程度のタイムラグは発生するけど、気にしない。普段 EMOBILE つなぎっぱだし。
ただ、FON や EMOBILE みたいな NAT 経由でネットにつないでると、同じ NAT 下の人も sshd の認証まではたどり着けるようになる、というのは覚えておいたほうがいいかも。あくまでも、sshd のセキュリティホールとか負荷対策とか、そういう感じ。
PS. 設定ミス等からの復帰手順は各自で考えてくださいねw