Linuxには大抵、TCPWrapperという仕組みがあって、アクセスしてくる接続を拒否したり、許可したりという事が比較的簡単にできる様になっています。
ネットワーク接続制限
TCPWrapperは、タイトルの通り2つのファイルで制御されています。
- hosts.allow
- hosts.deny
この2つのファイルは、allow(許可)、deny(拒否)という意味なので、設定のポリシーにもよりますが、denyにALL記述(全拒否)した状態で、allowに特定のIPアドレスやドメイン(プロバイダ)を記述して一部だけ許可するのが一般的かなと思います。
ウチのサーバーの場合は、Webサーバーとしても稼働させたいので、ネット接続全拒否は現実的では無くその方法は取りませんが、一番安全な方法としては全拒否して一部だけ許可とする事でしょう。
なお、全拒否と表現しましたが、「SSH接続だけ全拒否」ということも出来ますので、ウチの場合はSSHは全拒否、一部のSSHだけ許可という感じで細かく制御する方法を取らざるを得ません。それでもTCPWrapperによる接続制限は手軽なので是非使いたい方法です。
この辺りからは各自の探究心も大きく関わってきます。深く理解しようと思うと色々考えてみて実験して経験値を上げていくしかありません。
私は手抜きできる事は手抜きしたい方ですが、しっかりやっておきたい事は検証をして確実にステップを踏んで行きたいタイプです。まずはいきなりsshを全拒否して、自分もssh接続出来ないようにしてみます。
hosts.denyの検証
/etc/hosts.denyに下記を記して検証です。
ALL : ALL
これで全ての接続を拒否となるので、sshでの接続は当然不可となります。
TCPWrapperはサービスの再起動等は特に必要ありません。上記の2つのファイルを編集して保存すればそれ以降のアクセスをコントロール出来ます。
WindowsパソコンのPuTTYからSSHで接続して拒否られる事を確認しました。さっきまで接続できていたので、ALL:ALLの拒否は効いていると言えます。
次にSSHはALL拒否にしてみます。
ssh : ALL
ところがアクセス出来てしまいます。なんとなく思い出してきたのですがここはsshじゃなくsshdとしなければならなかった様な。
sshd : ALL
やはりその様です。
hosts.allowの検証
ここで、/etc/hosts.allowに許可を登録します。
sshd : .kocint01.ap.so-net.ne.jp
うちのネット回線(ソネット)は地域毎の区分が有りますので上記の様なパターンにしました。これでソネットの高知(kocint01)のみという絞り込み許可が出来ました。ソネットで地域は問わないのであれは「.ap.so-net.ne.jp」とすれば良い訳です。
各自、「診断くん」辺りを使って自分のネットの「REMOTE_HOST」の値を調べてみると良いでしょう。ちなみにhosts.allowへの列記は可能で、スペースで区切って複数のアドレスを指定出来ます。
これでソネット(高知)からの接続は許可される様になったので、後は必要に応じてネットワークアドレスを追加して行けば良いと思います。うちの場合はモバイルWi-Fiからもアクセスする事があるのでそれも追加しなくてはならないと思っています。
私が知っている範囲では、OCNも地域を分類している様で、ネットワークが分かれば、どの辺りからアクセスして来ているかが分かります。これを利用すればプロバイダの更に地域レベルまで絞り込んで許可設定出来る訳です。固定IPアドレスで指定すれば強力にセキュリティレベルが上がるハズです。
まだセキュリティ的にできることがまだある
ネット回線の(プロバイダ)特徴を確認して、SSHでの接続許可を絞り込みました。ピンポイントでうちのネットからだけを許可したいのは山々ですが、固定IPでは無いのでイチイチこの設定を変更するのは手間でそれは現実的に難しい運用です。
それでも、この後でSSH接続に鍵認証(鍵認証によるSSH接続)も加える予定なので、TCPWrapperでプロバイダレベル(地域)まで接続相手を絞り込めたら十分です。ざっくり言えば世界中からSSHを突かれるのを避けられるだけでかなりセキュリティ的には上がっています。
ネットからの接続はTCPWrapperによって、国内の回線、しかもソネットに限定となりましたので、あとはSSHの認証を鍵方式にレベルアップしてやれば、かなりセキュアな環境になると思います。
コメント