1. rootパスワードを設定し、SUコマンドを利用
1 2 3 4 5 |
$ sudo passwd root password for <user名> ← 現在のユーザのパスワード Enter new UNIX password: ← 設定するrootパスワードを入力 Retype new UNIX password: ← 設定するrootパスワードを再入力 passwd: password updated successfully |
2. SSHの初期設定
1 2 3 |
$ su - パスワード : # cd /etc/ssh |
1 2 3 |
# vi sshd_config PermitRootLogin no ← #rootでログイン不可にする |
3. SSH鍵認証の設定
#一般ユーザーになり、RSA でキーペアを作成します
1 2 3 4 5 6 |
$ ssh-keygen -t rsa Enter file in which to save the key (/home/masa/.ssh/id_rsa): #保存先 変更なければそのままEnter Created directory '/home/<user>/.ssh'.Enter passphrase (empty for no passphrase): #パスワード設定(そのままEnterでパスワードなし) Enter same passphrase again: |
1 2 |
$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys |
この後、WINSCPなどを用いて id_rsa ファイルをWindowsの適当なところにコピー
パスワード認証をできないようにするために設定ファイルを書き換える。
1 2 3 4 5 |
$ su - # vi /etc/ssh/sshd_config #56行目 パスワード認証不可にする PasswordAuthentication no → PubkeyAuthentication yes |
SSHサービス再起動
1 |
# systemctl restart ssh |
4. UFWによるファイアウォール
まずは以下のコマンドを打ってufwの設定状態を見てみます。
1 2 |
# sudo ufw status Status: inactive |
inactiveと表示されているように、最初はufwの設定が無効になっているはずです。
そのためufwを一度有効化させるために以下のコマンドを打ちます。
1 |
# sudo ufw enable |
上記のコマンドを打つと、人によっては以下のような表示が出る可能性があります。
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
「現在のssh接続を中断させる可能性があります。操作を続けますか?」という意味で、ssh接続などでサーバーに繋いでいるユーザーには出るそうです。
自分の環境ではy(yes)を入力してもsshが切断されるなんてことは無かったため、yを入れても問題ないと思います。
1 2 |
# ufw status Status: active |
(activeと表示されているため有効)
この状態で以下のコマンドを打つとiptablesにいろんな設定が書き込まれているはずです。
1 |
# iptables -nL |
ちなみにufwを無効化したくなった場合は以下のコマンドを打ちます。
1 |
# ufw disable |
#まずは以下のコマンドを打って、一度全ての通信を無効化します。
1 2 3 |
# ufw default DENY Default incoming policy changed to 'deny' (be sure to update your rules accordingly) |
これにより、外からの通信は全て遮断されます。(現状繋いでいるままのssh接続に関しては途中で切れることはありますが、一度ログアウトすると再度sshから接続するのは不可能になってしまうのでご注意ください)
一度全ての通信を遮断し、ここからそれ以外の何の通信は許可するかを決めていきます。
ちなみにこの設定を行っても、無効化した通信はあくまで「外→内」に向かって来る通信であり、「中→外」の外に向かっていく通信は無効化はされていません。
実際に設定を行う
ufwの設定で「ポート番号◯◯に来る通信を許可」としたい場合は以下のようにコマンドを打ちます。
1 |
# ufw allow [ポート番号] |
逆に「ポート番号◯◯に来る通信を許可しない」としたい場合は以下のようにコマンドを打ちます。
1 |
# ufw deny [ポート番号] |
ssh接続を許可
まずは今後もリモートから接続できるように、ssh接続を許可します。
ssh接続を許可するには、以下のコマンドを打ちます。sshポートを5001番に設定と仮定
1 |
# ufw allow 5001 |
ssh接続は5001番ポートに変更のため、5001番への通信を許可します。
5001番ポートに対して適当なパスワードを打ち込み、偶然一致を試みてログイン出来るように連続でアクセスを試みてきます。これをブルートフォース攻撃とも言います。
これの対策として、「連続してアクセスしてくるIPアドレスの接続を許可しない」設定を施しましょう。
以下のコマンドを打ちます。
1 |
# ufw limit 5001 |
これにより「30秒間の間に6回以上接続を試みた IP アドレスを許可しない」ルールが設定されます。
一度これで設定を確認します。以下のように表示されるはずです
1 2 3 4 5 6 |
# ufw status Status: active To Action From -- ------ ---- 5001 LIMIT Anywhere 5001 (v6) 1 LIMIT Anywhere (v6) |
IPv4とIPv6の5001番ポートに対してLIMIT(接続制限)が設定されています。
特定のネットワークからのssh接続のみ許可
上記の設定を施したとしても外部のインターネットにsshのポートを晒していることに変わりはありません。接続の回数に制限を設けたとしても、何らかの方法でパスワードを推測されて接続をされてしまったり、脆弱性を付いた攻撃などから接続をされてしまうことも考えられます。そのため、sshの接続を許可するのは内部からのネットワークのみにして、外部からのssh接続は全て許可しない設定にします。
ローカルエリアネットワーク内には「192.168.11.10」のIPアドレスが振られたホストがあります。
このホストからのみssh接続を許可する。又はこのネットワーク(192.168.11.0/24)からのみssh接続を許可するように設定するには以下のようなコマンドを打ちます。
(192.168.11.0/24からのssh接続を許可)
1 2 |
# ufw allow from 192.168.11.0/24 to any port 5001 Rule added |
1 2 |
# ufw allow from 192.168.11.10 to any port 5001 Rule added |
(192.168.11.0/24からのssh接続を許可した場合の結果)
1 2 3 4 5 6 7 |
# ufw status Status: active To Action From -- ------ ---- 5001 LIMIT Anywhere 5001 ALLOW 192.168.11.0/24 5001 (v6) LIMIT Anywhere (v6) |
そのため、LIMITをつけているルールを削除します。
以下のコマンドでルール番号を表示して設定を確認します。
1 2 3 4 5 6 7 |
# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 5001 LIMIT IN Anywhere [ 2] 5001 ALLOW IN 192.168.11.0/24 [ 3] 5001 (v6) LIMIT IN Anywhere (v6) |
1 2 3 4 5 |
# ufw delete 1 Deleting: limit 5000 Proceed with operation (y|n)? y Rule deleted |
WEBへのアクセスを許可する
WEBサーバーのファイアウォールを設定するのが今回の目的なので、80(HTTP)と443(HTTPS)への接続を許可します。
ポート番号を指定して接続を許可するのもいいですが、アプリケーションを指定しての設定も行えます。
以下のコマンドでアプリケーションの一覧が見れます。
1 |
# vi /etc/services |
1 2 3 4 5 6 7 |
# ufw allow http Rule added Rule added (v6) # ufw allow https Rule added Rule added (v6) |
1 2 3 4 5 6 7 8 9 |
# ufw status Status: active To Action From -- ------ ---- 5001 ALLOW 192.168.11.0/24 80 ALLOW Anywhere 443 ALLOW Anywhere 80 (v6) ALLOW Anywhere 443 (v6) ALLOW Anywhere (v6) |
ipv6のufwを無効
1 2 3 |
# vi /etc/default/ufw IPV6=yes → IPV6=no |
1 |
# systemctl restart ufw |