人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SSHのクライアント制限について

SSHサーバを運用しており、特定のクライアントホストにのみSSHの機能を提供しようとしています。SSHサーバはOpenSSH 5.9です。現在、以下の制限を設けています。
* 公開鍵認証のみ許可(クライアントホストで作成した公開鍵をSSHサーバに登録)
* クライアントホストのIPを/etc/hosts.allowやiptablesで制限

この構成上で、以下の2点について、お教えいただければと思います。
(1) さらにセキュリティを高める方法がもしあれば(MACアドレスで制限するなど)
(2) クライアントホストがDHCPでIPを設定している場合、IP制限をどのように代替すればよいか

よろしくお願い致します。

●質問者: takihiro
●カテゴリ:コンピュータ インターネット
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● kodairabase
●20ポイント

(1) さらにセキュリティを高める方法がもしあれば

ワンタイムパスワードにしてはどうでしょう。
OpenSSHにはChallengeResponseAuthenticationオプションがあります。

(2) クライアントホストがDHCPでIPを設定している場合、IP制限をどのように代替すればよいか

なりすましを排除したいなら、そもそもDHCPでIPアドレスを取得するようなクライアントを接続すべきでは無いと思います。


takihiroさんのコメント
ご回答ありがとうございます。 (1)について、公開鍵認証のみの運用のため、記載頂いたオプションはnoにしておりました。 (2)について、ご指摘ありがとうございます。ただ、運用上、DHCPでIPを取得するクライアントから接続することもありますので、できる範囲でセキュリティを高めたいと考えています。

2 ● y-kawaz
●140ポイント

質問内容から察するに同一LAN内からのアクセス制限ですね?
であればMACアドレスは偽装できますしIPアドレスも変更できるのでそれで制限をかけるのは本質的には余り意味が無いかもしれません。

それよりもまず基本は公開鍵認証用の各人の秘密鍵をきちんと守ることでしょうね。
鍵の運用ポリシーとして、パスフレーズは必ず設定するとか、鍵長は長め(4096ビット以上)にするなどのルールを作って定期的に監査するのが有効だと思います。

サーバ側でできることとしてはProtocolは2のみ(今時はデフォルトがこうだと思う)、パスワード認証は無効にする。
あとは、ウィルスなどによる内部からの自動攻撃の対策としてはポート番号をデフォルトの22以外にするのも意外に有効だったりします。

あと更に基本的なことですが鍵付きの部屋やラック内におくことによる物理的なアクセス制限は必須ですね。
サーバへの物理的な接触ができたらrootログインも簡単だしサーバごとHDDを盗むことも簡単で、全ての対策が無意味になりますから。


takihiroさんのコメント
ご回答ありがとうございます。 同一LANからではなく、インターネット上のでSSHサーバについての質問でした。SSHサーバのドメイン登録はせず、クライアントホストのみにSSHサーバのIPを通知して運用しています。 鍵の運用ポリシー、SSHのプロトコル制限、ポート番号変更について、参考にさせて頂きます。ありがとうございます。

y-kawazさんのコメント
グローバルIPが動的になるのであれば、そのISPのIPアドレス範囲を大体ネットマスクで指定して制限すればよいかと。ISP側の都合でIP帯が変わる可能性はありますがそこは運用でのりきると割りきるくらいかな。 DNSの逆引きでの制限はやめたほうが良いですね。DNSの逆引きは誰でも好きなホスト名を名のれますから。

JULYさんのコメント
>DNSの逆引きは誰でも好きなホスト名を名のれますから。 逆引きの結果が当てにならないのは事実ですが、「誰でも」というのは違和感があります。 DNS キャッシュポイズニングやクライアントの hosts ファイルの書き換え、参照先 DNS サーバを悪意のあるサーバへ向ける、といった、「参照する側の問題」が無い限り、DNS の逆引きの結果を設定できるのは、その IP アドレスの逆引きゾーンに関して、権威サーバを持っている人だけです。通常であれば、ISP や、ISP から固定 IP の割り当てを受けている組織で、「誰でも」と言える訳ではありません。

takihiroさんのコメント
追加のご回答ありがとうございます。 やはりIPアドレス範囲での制限になってしまうのですね。単一ホストに制限できる方法があれば…と思っておりました。 DNSの逆引き制限とはhosts.allowやPAMでの制限のことで合っていますでしょうか。動的IPでのドメイン制限は、DNSのキャッシュの影響を受けないか、心配な気がします。 DNSのセキュリティについても、解説頂きありがとうございました。

y-kawazさんのコメント
> 逆引きの結果が当てにならないのは事実ですが、「誰でも」というのは違和感があります。 > その IP アドレスの逆引きゾーンに関して、権威サーバを持っている人だけです。 逆引きのゾーン転送を行なってくれるISPは普通にありまし、正引きのAレコード設定の確認もせずに逆引きの名前を設定させてくれる緩いVPSやレンタルサーバも実際に存在します。 月数百円?数千円程度で固定IPと逆引き設定が手に入れられる今の世の中では十分に「誰でも」といえるんじゃないでしょうか?

y-kawazさんのコメント
まぁ、実際にはそれなりにお金もかかって面倒なので普通の人はそこまでしないと思うので、それなりの制限としては使えはします。なので、 > DNSの逆引きでの制限はやめたほうが良いですね。 というのは言い過ぎで、それに頼り切らない方が良いです、くらいのニュアンスです。 でもさらに言えばそもそも動的IPのアドレス範囲での制限というのも、許可されている人と同じISPに加入すれば同じIPアドレス帯のIPを自分が使うことができてしまう、というとても単純な穴があります。 固定IPをくれるISPなんていくらでもあるので、セキュリティを考えるなら接続元に固定IPを取得してもらうのが一番でしょうね。

JULYさんのコメント
>月数百円?数千円程度で固定IPと逆引き設定が手に入れられる >今の世の中では十分に「誰でも」といえるんじゃないでしょうか? 私が「誰でも」という言葉に違和感を感じたのは、「任意の IP アドレスに対して」誰もが逆引きを設定出来る、という印象にならないかなぁ、と思った次第です。 ... という事を、y-kawaz のコメントで認識出来ました(^^;。 例え数百円でも、ある IP アドレスを「買った」状態であれば、その IP アドレスに対する上位ゾーンの持ち主が許可すれば、逆引きを設定出来ますが、例えば、19.194.106.59.in-addr.arpa の PTR レコードを、全くの第3者が設定出来る訳ではありません(ちなみに、今、www.hatena.ne.jp を正引きした結果の IP です。で、この逆引きには PTR レコードは設定されていませんでした)。 今、ポイントになっているのが「つないで来た相手の IP アドレスが、本当に想定しているユーザの物か?」という点なので、「全く別な人が、その人が固定的に使っている IP アドレスにの逆引きに、同じドメイン名を設定する事が可能なので当てにならない」という点で、y-kawaz さんの言う通りです。 私が違和感を感じたのは、より広い意味で「逆引きなんて無法地帯で、誰でも好き勝手に出来ちゃうんだから」という雰囲気に読んでしまったためでした。 逆引きを使うなら、UseDns を yes にすれば、逆引きして得られたドメイン名を正引きして得られた IP アドレスと、元の IP アドレスが合っているかを確認する、という動きになるので、y-kawaz さんが心配されているケースは、これで防げる事になります。もし、それでもなお、つないで来た相手が第3者だったとしたら、本来の持ち主の DNS サーバがやられちゃっていることになります。 http://www.unixuser.org/~euske/doc/openssh/jman/sshd_config.html

3 ● JULY
●140ポイント ベストアンサー

あと思いつくのは AllowUsers ぐらいかな。

順番に考えていきましょう。

まず、接続元となるクライアントを制限したい、ということであれば、すでに実践されているようですが、クライアント側の IP アドレスが特定できないのであれば、y-kawaz さんの回答にあるように、ある程度大きな単位で許可せざるを得ません。

たとえば、geoip を使って、国外からの接続を拒否する、というのをやっている例があります。
GeoIPでSSHに接続できる国を制限する - ts1の日記

ポート番号をデフォルトの物から変える、というのも一定の効果はあります。ただし、takihiro さんが誰かに狙われていない場合(^^;。多くのポートスキャンは、何か使えるホストがないかを探すだけなので、22 番以外で ssh サーバが動いていても素通りされます。ただ、もし本当に狙われている場合だと、ある TCP ポートが開いている事は分かる訳ですから、そのポートで何が動いているのかを詮索されると、SSH サーバである事が分かってしまう事になります。ポート番号を変更するのは、あくまでも「目くらまし」としての効果です。

あとは、そのユーザが信用できるか、ですが、ユーザの認証方式として公開鍵認証のみであれば、後は運用が大切、というは y-kawaz さんと同意見です。

で、公開鍵認証にプラスαするとしたら、PermitRootLogin が No であることは当然として、AllowUsers で制限しておけば、不用意にユーザが認証可能な状態になってしまう事を防げます。

あと、公開鍵認証のみにしている場合では問題ないのですが、ssh サーバが動いている、と分かると、ブルートフォースアタックがしつこく行われます。Red Hat 系であれば、/var/log/secure に、その記録が大量に残ります。このログは、パスワード認証を無効にしていても出力されます、で、接続の頻度を iptables で制限する事が可能です。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m hashlimit --hashlimit-name ssh --hashlimit-mode srcip --hashlimit 20/hour --hashlimit-burst 5 --hashlimit-htable-expire 3600000 -j ACCEPT

上記の設定は、同一ホストから1時間に 20 回、一時的には連続5回までで、制限に達した場合、3,600,000 msec = 1時間、接続を受け付けなくなります。パラメータは用途や運用状況によって変更する必要があると思いますが、こうしておくと、5回試しただけで、後はあきらめてくれるようになります。


takihiroさんのコメント
ご回答、ありがとうございました。 GeoIPや/etc/hosts.allowでのaclexec設定など、初めて知りました。ありがとうございます。 ポート番号については、nmapなどで簡単に検出できることは存じておりました。 ブルートフォースアタックの対応についても、ディスク溢れを防ぐのに重要そうですね。参考にさせて頂きます。ありがとうございます。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ