SSHをデフォルト設定で放置すると危ない

SSH設定周りを見直したので、メモしておきたいと思います。
SSHサーバのOSはCentOSです。

おおよそ、デフォルトのsshd_configに対してなんら対策を施していない場合、非常に多くの情報が既知である為、攻撃者はパスワードを見つける事だけに専念する事でセキュリティを破り、またroot特権を獲得する事ができる。

Secure Shell

ということで、インストール直後の状態でサービス起動、運用なんてことはしてはいけません、と。
インストールしたら、とにかくsshd_configを編集しなさいということです。

公開鍵のみで運用

公開鍵のみ有効になるように制限しています。
そのために、デフォルトでyesになっている以下の設定はのきなみnoにします。

  • PasswordAuthentication
  • PermitRootLogin
  • ChallengeResponseAuthentication
  • X11Forwarding

代わりに、

  • PubkeyAuthentication

をyesにします。

ポートを22以外に

それだけでアタックが減るらしいです。

Port 2000

とかこんな感じで。
(ただ、ポート変えると他との連携がとれないため、私はそのまま22を使ってます)

プロトコルを2だけに制限

SSHはSSH1とSSH2があり、SSH1に関しては脆弱性が報告されています。
設定でSSH2だけに制限するため、

Protocol 2

とします。

ユーザ(グループ)を制限

私のインストールした時点のデフォルトsshd_confにはテンプレートもなかったのですが、

  • DenyUsers
  • AllowUsers
  • DenyGroups
  • AllowGroups

(適用順)

を設定することで、SSHを使用するユーザを制限できます。
空白区切りで

AllowUsers xxxx yyyy mmmm

という感じで。

不正アクセスがないか/var/log/secureをチェック

あとは、不正なアクセスがないか、/var/log/secureを確認する。

svn+sshだけ使うよう制限したいけど

調べきっていないのでメモ。
本当のところ、SSHの使用目的が「SubversionへのSSH経由アクセス」のみで、それ以外を制限とかしたかったのですが、そのやり方は分かってません。

(追記:2008/02/21)

AUTHORIZED_KEYS ファイルの形式
〜略〜
command="command"
このオプションを使うと、認証にこの鍵が使われたときは必ずここで指
定されたコマンドが実行されるようになります。ユーザが (訳注: クラ
イアント側で) 指定したコマンドは無視されます。クライアント側が仮
想端末を要求していれば、ここで指定されたコマンドは仮想端末上で実
行されます。そうでなければ端末なしで実行されます。 8-bit クリーン
な通信が欲しい場合は、仮想端末を要求してはいけません。あるいは
no-pty オプションを使ってください。コマンド文字列中にダブルクォー
トを入れたいときは、前にバックスラッシュをつけてください。このオ
プションは、ある公開鍵には特定の操作だけしかさせないようにするの
に有効です。例として、リモートバックアップだけをさせて、それ以外
な何もさせないような鍵がつくれます。クライアントの TCPX11
送は、明示的に禁止されていない限り可能なので注意してください。ク
ライアントによって元々実行されたコマンドライン環境変数
SSH_ORIGINAL_COMMAND に格納されています。注意: このオプションは
シェル、コマンドまたはサブシステムの実行に適用されます。

sshd

OpenSSHの解説本では、SSH_ORIGINAL_COMMANDを解析してから"exec svnserve -t"に値を渡すコマンドを指定することで、Subversion利用のみを強制するようにとされていた。
このやり方がTortoiseSVNと連携して利用できるかは確認が必要そう。

(追記:2008/03/06)
TortoiseSVNでチェックアウトできることを確認。
authorized_keysには、

command="svnserve -t -r /var/svn",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty 
 ssh-dss AAAAB(中略)M6BA== ****@***

を指定。-rオプション使うならこう。

command="svnserve -t -r /var/svn",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty 
 ssh-dss AAAAB(中略)M6BA== ****@***

(参考にさせていただきました。→http://www.machu.jp/diary/20050923.html)

(変更:2008/04/09)
「追記:2008/03/06」のコマンドで、"no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty "を書いてなかったので書き足し。
各コマンドの説明は、SSHD (8)を参照。

no-port-forwarding
認証にこの鍵が使われたときは TCP 転送が禁止されます。クライアントがポート転送を要求しても、すべてエラーになります。たとえば、これはcommandオプションの指定されている接続などで使われます。

no-X11-forwarding
認証にこの鍵が使われたときは X11 転送が禁止されます。クライアントが X11 転送を要求しても、すべてエラーになります。

no-agent-forwarding
認証にこの鍵が使われたときは、認証エージェントの転送が禁止されます。

no-pty
端末の割り当てを禁止します(仮想端末の割り当てが失敗するようになります)。