SSHのポート変更(SELinux,Firewall設定あり)
前提
Azure上に仮想マシンにLinuxOSが存在する事
上記仮想マシンに紐づくNSGが存在する事
上記仮想マシンにSSH接続が既にできる事
変更するポートが決まっている事(今回は2222に変更)
概要
このドキュメントでは、要件に応じて、SSHサービスのポート番号を変更する手順について記載します。
使用技術
Azure VM : Azure VirtualMachines
Azure NSG : Azure Network Security Group
Linux : Red Hat Enterprise Linux 7.6
SSH : OS依存
Firewall : OS依存
SELinux : OS依存
手順(Azure側)
1.Azureポータルにログイン
Azureポータルにログインします。
2.NSGの選択
検索バーから「Network Security Groups」を検索します。
該当のNSG(Network Security Group)を選択します。
3.インバウンドセキュリティ規則の追加
NSG画面で、左ペイン「インバウンドセキュリティ規則」をクリックします。
画面上部の「+追加」を選択します。
4.新しいルールの設定
以下のように新しいインバウンドルールを設定します。

これで、Azure環境で新しいポート(例えば `2222`)を許可する設定が完了しました。
次は、OS側でポートの変更設定を行い、接続テストを行います。
手順(OS側)
1.対象の仮想マシンへログイン・権限昇格
ログイン(PowerShell・SSHツールを利用してログイン)
#xxxは仮想マシンのパブリックIP
ssh -p 22 user1@xxx.xxx.xxx.xxx
Root権限へ切り替え
sudo su -
sudo -i
現在のログインユーザの確認
whoami
2.SELinuxの状態確認 - 設定
SELinuxの状態確認
getenforce
出力結果が「Enforcing」以外の場合、「3.Firewallの状態確認-設定」へ
SELinuxで制御しているsshポートの確認
semanage port -l | grep ssh
# ssh_port_t tcp 22
変更するポートの確認
#ポートが表示されなければ設定可能
semanage port -l | grep 2222
2222ポートの追加
semanage port -a -t ssh_port_t -p tcp 2222
★ポートの削除が必要な場合、以下コマンド(要確認)
semanage port -d -t ssh_port_t -p tcp 2222
SELinuxで制御しているポートの確認(追加分の確認)
semanage port -l | grep ssh
# ssh_port_t tcp 2222, 22
※SELinuxはシステムコンポーネント(アプリケーション、プロセス、ファイル)へのアクセスを制御します。ステータスは以下のようになります。
Enforcing:ラベルによるポリシーが強制される状態。ラベル付けあり。
Permissive:ラベルによるポリシーは強制されないが、ポリシー違反時にログが出力される。ラベル付けあり。
Disabled:ラベルによるポリシーが無効。アクセス制御・ラベル付けは無し。
※ラベルはアクセス制御をする為のもので、ファイル作成、プロセス起動などをトリガーとし、ラベルが割り当てられます。ラベルの割り当てについてはSELinuxポリシーにより決まります。
3.Firewallの状態確認 - 設定
Firewallサービスの状態確認
systemctl is-active firewalld
systemctl status firewalld
出力結果が「active」以外の場合、「4.SSH設定ファイル確認-設定」へ
ポートの確認
firewall-cmd --list-all
# public (active)
# target: default
# icmp-block-inversion: no
# interfaces: eth0
# sources:
# services: ssh dhcpv6-client
# ports:
# protocols:
# masquerade: no
# forward-ports:
# source-ports:
# icmp-blocks:
# rich rules:
ポートの追加
firewall-cmd --add-port=2222/tcp --permanent --zone=public
★ポートの削除が必要な場合、以下コマンド(★要確認 反映も忘れずに)
#firewall-cmd --remove-port=2222/tcp --permanent --zone=public
設定の反映
firewall-cmd --reload
ポートの確認
firewall-cmd --list-all
# public (active)
# target: default
# icmp-block-inversion: no
# interfaces: eth0
# sources:
# services: ssh dhcpv6-client
# ports: 2222/tcp
# protocols:
# masquerade: no
# forward-ports:
# source-ports:
# icmp-blocks:
# rich rules:
4.SSH設定ファイルの確認 - 設定
ステータスの確認 (今、ListenしているSSHポート確認)
systemctl status sshd
# sshd.service - OpenSSH server daemon
# Loaded: loaded ...
# Active: active (running) ...
# ~~~~~~~
# ... Starting OpenSSH server daemon. ..
# ... Server listening on 0.0.0.0 port 22.
# ... Server listening on :: port 22.
# ... Started OpenSSH server daemon.
ポートの確認
#パスが不明な場合、[find / -name *sshd_config*]とかで探す
cat /etc/ssh/sshd_config | grep "Port "
# #Port 22
#コメントアウトで他に記述が無い場合、デフォルトで22番を使う。
★必要な場合、バックアップ(分かり易い命名で)
cp /etc/ssh/sshd_config /etc/ssh/sshd_config_yyyymmdd
ls -lsa /etc/ssh/
ポート追加 (22番コメントアウト解除・2222番ポート追加)
vi /etc/ssh/sshd_config
...
#Port 22
Port 22
Port 2222
...
#ポートの確認(先ほど設定したPortが出る事)
cat /etc/ssh/sshd_config | grep "Port "
# Port 22
# Port 2222:
5.SSHサービスの再起動
ステータスの確認
systemctl status sshd
# sshd.service - OpenSSH server daemon
# Loaded: loaded ...
# Active: active (running) ...
# ~~~~~~~
# ... Starting OpenSSH server daemon. ..
# ... Server listening on 0.0.0.0 port 22.
# ... Server listening on :: port 22.
# ... Started OpenSSH server daemon.
SSH再起動
systemctl restart sshd
ステータスの確認
systemctl status sshd
# sshd.service - OpenSSH server daemon
# Loaded: loaded ...
# Active: active (running) ...
# ~~~~~~~
# ... Starting OpenSSH server daemon. ..
# ... Server listening on 0.0.0.0 port 2222.
# ... Server listening on :: port 2222.
# ... Server listening on 0.0.0.0 port 22.
# ... Server listening on :: port 22.
# ... Started OpenSSH server daemon.
ポート追加の設定は以上となります。
続けて接続テストを行います。
接続テスト
1.22番ポートでのログイン確認
ログイン(powershell・SSHツールを利用してログイン)
#xxxは仮想マシンのパブリックIP
ssh -p 22 user1@xxx.xxx.xxx.xxx
2.2222番ポートでのログイン確認
ログイン(powershell・SSHツールを利用してログイン)
#xxxは仮想マシンのパブリックIP
ssh -p 2222 user1@xxx.xxx.xxx.xxx
以上
元のポートを閉じたい場合AzureのNSG設定を修正する方法がおすすめです。