Linuxからアホ話まで、何でもありでござる

2004年12月10日

ssh不正ログインアタックの防止

[Linux備忘録]
さて、不正アクセスを防ぐために色々やってきたが、不正ログインの痕跡のようにsshからログインを試みる輩が後を絶たない。今の状態でも不正ログインを試みるとアクセス禁止になるのだが、やはり不安は残る。

ということで、通常のID+パスワードという認証方式をやめ、公開鍵暗号による認証に切り替えることにした。詳しくはssh dsa rsaなどでググると山ほどヒットするのでそちらを参照して欲しいが、簡単にメモしておく。

まず今使っているパソコンで鍵を作成する。
ssh-keygen -t rsa

作成していくとパスフレーズを聞かれるので入力する。dsa方式にしたければ、rsaのところをdsaにしてやればいい。これで公開鍵と秘密鍵が.sshディレクトリの中に作成される。デフォルトではid_dsa.pubが公開鍵、id_rsaが秘密鍵だ。

次に公開鍵をアクセスしたいPCに転送する。これは読んで字のごとく公開されて一向に構わないので、セキュリティにさほど気を配る必要はないだろう。
scp /home/だれそれ/.ssh/id_rsa.pub ログイン名@ログイン先アドレス:/home/だれそれ2/

ここで「だれそれ」は今使っているPCのアカウント、「ログイン名」はログイン先のアカウント、「ログイン先アドレス」はIPアドレスもしくはホスト名だ。(通常「だれそれ2」と「ログイン名」は同じ)

次に、アクセスしたいPCにログインして公開鍵を登録する。
cat /home/だれそれ2/id_rsa.pub >> /home/だれそれ2/.ssh/authorized_keys
chmod 600 /home/だれそれ2/.ssh/authorized_keys
rm /home/だれそれ2/id_rsa.pub

これで公開鍵暗号方式による認証でログインできる。ためしに一旦ログアウトして再度ログインしてみると、パスワードを聞かれずパスフレーズ入力に切り替わっているはずだ。

しかし、このままではログイン時にパスフレーズを間違えた場合、通常のパスワード認証方式に切り替わってしまう。これじゃ意味がないので、パスワード認証方式は無効に設定しておかなければならない。
まずアクセスしたいPCにログインし、rootになって/etc/ssh/sshd_configをviなどで以下のように変更する。
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
PasswordAuthentication no <- ここ

そしてsshdを再起動させてやれば設定が反映する。
/etc/rc.d/init.d/sshd restart

ここで再起動に失敗したら、/etc/ssh/sshd_configの記述が間違っているので、よーくスペルを確認されたし。

パスフレーズをいちいち入力するのが面倒だという「おうちゃくん」は、ssh-agentを使うとよろしい。
結構なサイトでこのssh-agentの使い方についてeval `ssh-agent`を.bash_profileに登録して.bash_logoutにssh-agent -k としておくなどと書いているが、これではXを使っていてターミナルを開くたびにssh-agentが起動してしまうし、別ターミナルからはパスフレーズを聞かれるようになってしまって意味がない。そこで、俺の場合は.bashrcでXを立ち上げるときにssh-agentを有効にするようにした。(俺の場合はコンソールログインなんで)
echo "alias startx='ssh-agent startx'">>.bashrc

これでX立ち上げ時にssh-agentが起動し、終了時に一緒にssh-agentも終了してくれる。

ssh-agentが動いている状態で、ssh-addでパスフレーズをメモリに保管しておく。単純にssh-addとやればパスフレーズを聞かれるので入力してやればいい。但し、あくまでメモリに保管されるだけなのでssh-agentを終了させればなくなってしまう。永久に有効じゃないことは忘れずに。

*****公開鍵暗号方式の考え方について*****
たまに「公開鍵暗号方式」って公開鍵と秘密鍵を作って云々は聞いてるけど、よく意味がわからないんだ、と言われることがある。
使ってみればわかると思うが、この方式は信用できる相手に公開鍵を渡してその鍵があればこっちも開けてやるぞってもんだから、通常の「アクセスされる側がアクセスを許可する」って考えにとらわれていると理解しづらい。
だから俺は簡単に「いままでのやり方って、普通はアクセスされる側で認証するじゃないか。でもこの方式は、乱暴な言い方をすれば、アクセスする側で認証するようなもんなんだよ。」と言うことにしている。ある意味滅茶苦茶だけど、これが結構納得してくれたりするのだな。

2006/09/19 追記
ピンポンダッシュを締め出したいという方は、こんなスクリプトでもどうぞ。


ブログランキング・にほんブログ村へ
posted by oyajiman at 2004年12月10日 11:28:40



コメント

コメントはありません

トラックバック

トラックバック
このエントリにトラックバックはありません
このトラックバックURLを使ってこの記事にトラックバックを送ることができます。 もしあなたのブログがトラックバック送信に対応していない場合にはこちらのフォームからトラックバックを送信することができます。.

コメントする