LinuxサーバのメンテナンスといえばSSHを使ってされている方が多いと思うのですが、デフォルトの設定ではパスワードさえ破られてしまうと不正ログインされてしまいます。
ただ、IPアドレスで制限するにしても自宅PCが固定IPといったところは少ないでしょう。途中経路のFWでIP制限できれば一番良いのですがIPで制限できない場合のできる限りのセキュリティ対策は講じておきたいものです。
■TCP_Wrapperを使ったリモートホスト名での制限
/etc/hosts.allowと/etc/hosts.denyで設定します。文字通り/etc/hosts.allowには許可する端末をプロトコルごとに記載しています。下記ではsshとftpに関して制限を行っています。TCP_Wrapperの強みはIPアドレスだけでなくリモートホスト名でも制限ができることだと個人的には思っています。
# vi /etc/hosts.allow # # hosts.allow This file contains access rules which are used to # allow or deny connections to network services that # either use the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers # sshd : 192.168.0.0/255.255.255.0 sshd : *.ocn.ne.jp vsftpd : 192.168.0.0/255.255.255.0 |
/etc/hosts.deny側を記載します。こちらは基本的に全て拒否とします。
# vi /etc/hosts.deny # # hosts.deny This file contains access rules which are used to # deny connections to network services that either use # the tcp_wrappers library or that have been # started through a tcp_wrappers-enabled xinetd. # # The rules in this file can also be set up in # /etc/hosts.allow with a 'deny' option instead. # # See 'man 5 hosts_options' and 'man 5 hosts_access' # for information on rule syntax. # See 'man tcpd' for information on tcp_wrappers # ALL: ALL |
■SSHサーバのセキュリティ設定
必要最低限だと思われる下記の3つの設定を行っておきます。
# vi /etc/ssh/sshd_config <省略> PermitRootLogin yes ※いきなりのrootログインの禁止 PermitEmptyPasswords no ※空のパスワードの禁止 AllowUsers user_name ※指定したユーザだけログイン可 (追記) |
■公開鍵認証の設定
上記だけでもそれなりのセキュリティと言えそうですが、更にレベルを高めるため公開鍵認証方式を採用します。これはID/PASSではなく予め用意した秘密鍵がないとサーバにログインできなくさせるというものです。
サーバOS: Linux (CentOS7 )
クライアント: Windows10
という前提です。公開鍵認証に必要な公開鍵と秘密鍵をクライアントのWindows10で作成を行います。作成するアプリケーションはTeraTermで行います。
TeraTermを起動し設定メニューのSSH鍵生成を選択します。
以下の画面が表示されるのでそのまま生成をクリックします。
鍵が生成されるとともに、パスフレーズ入力欄が入力可能になります。これについては任意でパスフレーズを入力するとログインの際に秘密鍵とパスフレーズの両方が必要となり、より強固なセキュリティとなりますが、空のままにしておくと秘密鍵だけでログインが可能です。
いずれかを選択した後はそれぞれの鍵を保存ボタンをクリックし、ローカルに鍵を保存します。
次にSSHサーバ側の設定を行います。sshd.confに以下の設定を行います。
# vi /etc/ssh/sshd_config <省略> PubkeyAuthentication yes ※公開鍵認証を有効にする PasswordAuthentication no ※パスワード認証を禁止する |
一旦、sshdを再起動します。
# systemctl restart sshd |
TeraTerm側で作成した秘密鍵(id_rsa)と公開鍵(id_rsa.pub)のうち、公開鍵側をサーバ側に登録します。FTPやSCPでサーバ側にアップした後に以下のように公開鍵を登録します。
# mkdir .ssh ※.sshがなければ作る # chmod 755 .ssh # cat id_rsa.pub >> .ssh/authorized_keys # chmod 600 .ssh/authorized_keys |
サーバ側の設定は以上で完了です。
■ログイン方法
WindowsクライアントでTeraTermを使い、公開鍵認証でSSHログインを行います。TeraTermを起動し、ユーザ名および秘密鍵の指定を行います。
通常のパスワード認証であればプレインパスワードですが、今回は公開鍵認証なので「RSA/DSA/ECDSA/ED25519鍵を使う」を選択し、なおかつ秘密鍵で上記で生成したid_rsaを選択し、OKボタンをクリックするとそのままログインできます。(パスフレーズを入力した場合はパスフレーズが必要です)
■TeraTermMenu
公開鍵認証を使用すると通常のID/PASSのログインと比較しセキュリティは向上しますが、利便性という面においてやはり不便となってし まいます。常に使用するPCが同一であればTeraTermMenuを使用することによりこれをかなり軽減することが可能です。
TeraTermMenuはTeraTermに同封されるアプリケーションでインストールの際にチェックを入れることでTeraTermと同時にインス トールが可能です。
インストール後に起動するとタスクバーにTeraTermMenuが表示されます。右クリック→リスト編集で設定していきます。
- 登録名には任意の名前を入力
- 自動ログインを選択し、ホスト名にサーバのIPアドレス、ユーザ名にアカウント名、パスフレーズを生成している場合にはパスワードにそれを入力。
- ttsshにチェックを入れ、鍵ファイルに秘密鍵を指定する。
- ◀ボタンを押してList Itemに追加する。
上記で設定は完了です。あとはタスクバーのアイコンをクリックするとList Itemが表示されますのでそれを選択すると自動でログインまで行われます。