Contents
1. SSHサービスのセキュリティ設定
SSHサービスはデフォルトでrootユーザーのログインを許可しています。rootユーザーはユーザー名が既に判明しているためパスワードが判明すると、管理者権限でサーバーへログイン出来るため、これを拒否する設定を行います
1.1 一般ユーザーの作成
Ubuntu 20のインストール時に一般ユーザーを作成している場合は、本手順は不要です。
サー バーに作成されているユーザーがrootのみの場合、SSHによるリモートログインが出来なくなりますので、OSのインストール時にユーザーを作成していない場合、事前にユーザーを作成する必要があります。OSのインストール時にユーザーを作成している場合は、本手順は不要です。
ユーザーの作成は"useradd"コマンドで行います。"-m"オプションでホームディレクトリの作成、"-p"オプションでパスワードを指定します。
例えばユーザーアカウント名として「ubuntuuser」、パスワードとして「123456」を設定する場合は、以下のように実行します。
1 |
# useradd -m -p 123456 ubuntuuser |
1.2 SSHサービスの設定ファイル変更
SSHサービスの設定を変更するために設定ファイルを変更します。SSHサービスの設定ファイル は"/etc/ssh/sshd_config"になります。
今回はデフォルトのSSHポート22から2244に変更して進めます。
1 |
# vi /etc/ssh/sshd_config |
#16行目にssh接続ポート2244を追加
# port 22
Port 2244
#35行目付近に記載がある"PermitRootLogin prohibit-password"パラメータを変更します。パラメータ"prohibit-password"はrootについてはパスワード認証を無効にするという意味合いになります。
# Authentication:
#LoginGraceTime 2m
#PermitRootLogin prohibit-password
↓ コメントアウト#を削除
PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
SSHサービスの再起動
1 |
# systemctl restart sshd |
エラーが出力しなければ、再起動は完了しています。SSHクライアントで、サーバーへルートでリモート接続を行い、接続が拒否されることを確認する。
サーバー側の認証に関するログ"/var/log/auth.log"にも以下のように接続を拒否した内容が出力されています。
1 2 3 4 |
# vi /var/log/auth.log Oct 31 17:32:51 ubuntu-10 sshd[1422]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=192.168.241.10 user=root Oct 31 17:32:54 ubuntu-10 sshd[1422]: Failed password for root from 192.168.241.10 port 50730 ssh2 |
2. RSA 公開鍵暗号方式を用いた認証によるSSH接続
2.1 公開鍵、秘密鍵ペアの作成
OpenSSH 使って Linux サーバに接続するユーザの公開鍵と秘密鍵のペアを作成します。
鍵ペアの作成は ssh-keygen をを使います。
今回はSSH プロトコル Version 2 で利用する RSA 暗号を利用した鍵セットを作成します。
公開鍵と秘密鍵のペアの作成はリモートログインするユーザ権限で実行します。
作成先・ファイル名を指定しなければ、 /home/(ユーザ名)/.ssh/ に id_rsa, id_rsa.pub が作成される。 途中、鍵用のパスワードも入力する。
1 |
# su - <ユーザー名> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ /usr/bin/ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/home/nuy/.ssh/id_rsa): /home/nuy/.ssh/id_rsa Enter passphrase (empty for no passphrase): xxxxxxx ←任意のパスワード Enter same passphrase again: xxxxxxx ←任意のパスワード再入力 Your identification has been saved in /home/foo/.ssh/id_rsa. Your public key has been saved in /home/nuy/.ssh/id_rsa.pub. The key fingerprint is: 96:af:59:18:9c:a0:c2:da:86:7e:d7:24:05:d0:31:da foo@p183 The key's randomart image is: +--[ RSA 2048]-----------------------------------------+ | .oo. | | oo. | | . Eo | | . . + o | | o . . S | | + . . o + | |o o + . o | |.. . . . + | | .. . o | |
1 2 3 |
$ chmod 700 ~/.ssh $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys $ chmod 600 ~/.ssh/authorized_keys |
Winscpなどを利用し、秘密鍵 (~/.ssh/id_rsa) を Windows の適当な場所に保存する。
2.2 SSH 設定ファイルの編集
パスワード認証をできないようにするため、 SSH 設定ファイルを編集する。
今度は一般ユーザではなく、 su - で rootになり行う。
1 2 |
$ su - Password: |
1 2 3 4 5 |
# vi /etc/ssh/sshd_config 59行目 # PasswordAuthentication yes PasswordAuthentication no ← noに変更 |
1 |
# systemctl restart ssh |
Tera Termで接続方法
ホストアドレス(ホスト名)、TCPポート、ユーザー名は各自サーバーに合わす
2.3 PuTTYgen を使った秘密鍵の作成
Winscpを起動しツールからputtygen.exe を起動し、Loadをクリック[ ファイルを開くダイアログ ] が開くのでファイルの種類を [ All Files (*.*) ] に変更して Linux サーバから転送した秘密鍵 id_rsa を読み込みます。
ホストアドレス(ホスト名)、TCPポート、ユーザー名は各自サーバーに合わす
CAパスワードとは上記「2.1 公開鍵、秘密鍵ペアの作成」で設定したパスワード
3. ファイヤーウォールの設定
Ubuntuでは「ufw」というソフトウェアを使ってファイアウォールを設定することが多いので、ufwを利用したファイアウォール設定を行います。
ufwはOSの導入時にインストールされています。インストール後に最低限のフィルタ設定を行う手順を紹介します。
ufwで設定するフィルタルール
• サーバーに転送されるパケットは全て拒否
• サーバーから外部へ送信されるパケットは全て許可
• 最初に許可するポートはSSH用のポート(2244)
• サーバーに入ってくるパケットを制限
3.1 ufwパッケージの確認
インストールされているパッケージを、パッケージを表示するための"dpkg"コマンドで確認
1 2 |
# dpkg -l | grep ufw ii ufw 0.36-6 all program for managing a Netfilter firewall |
インストールされている「ufwパッケージ」が表示されました
ufwの動作状況を確認するために"systemctl status"コマンドを実行
1 2 3 4 5 |
# systemctl status ufw ● ufw.service - Uncomplicated firewall Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled) Active: inactive (dead) Docs: man:ufw(8) |
ufwサービスが停止していることが「Active: inactive (dead)」と表示されていることから確認できます。
3.2 基本的なファイアウォールルールの設定
ufwを有効にするとデフォルトのファイアウォールルールが適用されます。このまま有効にするとサーバーと通信ができなくなる可能性がありますので、ufwを有効にする前に基本的なルールを設定しておきます。
3.2.1 受信パケット デフォルトルールの設定
まず受信パケットに対するルールを設定します。受信パケットは特定の通信以外、全てを拒否する形が一般的なルールになります。全ての受信パケットを基本的に拒否するように"ufw default deny incoming"を実行します。
1 2 3 |
# ufw default deny incoming Default incoming policy changed to 'deny' (be sure to update your rules accordingly) |
3.2.2 送信パケット デフォルトルールの設定
送信パケットは全てを許可する形が一般的なルールになります。送信パケットを基本的に許可するように"ufw default allow outgoing"を実行します。
1 2 3 |
# ufw default allow outgoing Default outgoing policy changed to 'allow' (be sure to update your rules accordingly) |
3.3 ufwの有効化
ufwの自動起動を有効にします。が、SSHリモート接続できなくなる可能性がありますので、先にSSH接続の許可を設定します。デフォルトのSSHポートは22です。次のコマンドで許可設定
1 2 |
# ufw allow ssh # ufw reload |
独自に2244ポート(例)に設定している場合は
1 2 |
# ufw allow 2244/tcp # ufw reload |
"ufw enable"コマンドを実行します。
1 2 3 |
# ufw enable Command may disrupt existing ssh connections. Proceed with operation (y|n)? y Firewall is active and enabled on system startup |
コマンドの実行時にSSH接続が切断される確認が表示されます。ルールでSSHを許可していますので、切断されることはありません。ここでは「y」を入力します。
3.4 ufwの設定確認
有効後にファイアウォールに設定したルールの確認を行います。"ufw status verbose"を実行します。
1 2 3 4 5 6 7 |
# ufw status verbose Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 2244/tcp ALLOW IN Anywhere 2244/tcp (v6) ALLOW IN Anywhere (v6) |
3.5 サーバーに入ってくるパケットを制限許可
ufwの設定で「ポート番号◯◯に来る通信を許可」としたい場合は以下のコマンド
# ufw allow [ポート番号]
逆に「ポート番号◯◯に来る通信を許可しない」としたい場合は以下のコマンド
# ufw deny [ポート番号]
3.5.1 連続してアクセスしてくるIPアドレスの接続を許可しない
先程設定したSSHポート2244を例にして説明
ssh接続は2244番ポートに変更のため、2244番への通信を許可します。
2244番ポートに対して適当なパスワードを打ち込み、偶然一致を試みてログイン出来るように連続でアクセスを試みてきます。これをブルートフォース攻撃とも言います。
これの対策として、「連続してアクセスしてくるIPアドレスの接続を許可しない」設定をします。以下のコマンドを打ちます。
1 |
# ufw limit 2244 |
これで「30秒間の間に6回以上接続を試みた IP アドレスを許可しない」ルールが設定されます。
設定を確認します。以下のように表示。
1 2 3 4 5 6 |
# ufw status Status: active To Action From -- ------ ---- 2244 LIMIT Anywhere 2244(v6) 1 LIMIT Anywhere (v6) |
3.5.2 特定のネットワークからのssh接続のみ許可
上記の設定を施したとしても外部のインターネットにsshのポートを解放しているので、接続の回数に制限を設けたとしても、何らかの方法でパスワードを推測されて接続をされてしまったり、脆弱性を付いた攻撃などから接続をされてしまうことも考えられます。
そのため、sshの接続を許可するのは内部からのネットワークのみにして、外部からのssh接続は全て許可しない設定にしてしまいましょう。
例としてローカルエリアネットワーク内には「192.168.11.10」のIPアドレスが振られたホストがあります。このホストからのみssh接続を許可する。又はこのネットワーク(192.168.11.0/24)からのみssh接続を許可するように設定するには以下のようなコマンドを打ちます。
192.168.11.0/24からのssh接続を許可
1 |
# ufw allow from 192.168.11.0/24 to any port 2244 |
1 |
# ufw allow from 192.168.11.10 to any port 2244 |
192.168.11.0/24からのssh接続を許可した場合の結果
1 2 3 4 5 6 7 |
# ufw status Status: active To Action From -- ------ ---- 2244 LIMIT Anywhere 2244 ALLOW 192.168.11.0/24 2244 (v6) LIMIT Anywhere (v6) |
1 2 3 4 5 6 7 |
# ufw status numbered Status: active To Action From -- ------ ---- [ 1] 2244 LIMIT IN Anywhere [ 2] 2244 ALLOW IN 192.168.11.0/24 [ 3] 2244 (v6) LIMIT IN Anywhere (v6) |
1 2 3 4 5 |
# ufw delete 1 Deleting: limit 2244 Proceed with operation (y|n)? y Rule deleted |
3.5.3 web等その他サービスの許可
ポート番号を指定して接続を許可する方法と、アプリケーションを指定しての設定も行えます。
以下のコマンドでアプリケーションの一覧が見れます。
1 |
# vi /etc/services |
1 2 3 |
# ufw allow http Rule added Rule added (v6) |
1 2 3 |
# ufw allow https Rule added Rule added (v6) |
3.5.4 ipv6のufwを無効
1 2 3 |
# vi /etc/default/ufw IPV6=yes → IPV6=no 書き換える |
1 |
# systemctl restart ufw |