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.新しいルールの設定
  
以下のように新しいインバウンドルールを設定します。

sample

これで、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設定を修正する方法がおすすめです。


いいなと思ったら応援しよう!