[備忘録]sshのポート変更でポートが開放されない場合|SELinuxが無効化か確認

[AlmaLinux]sshd.confでポート番号を変更したのに、ポートが開放されないときの対処法。
 
シャチ
駆け出しインフラエンジニアの備忘録です。
施工管理職から転職し2年目になります。
 
関連記事

実現したいこと:VPSサーバからWindows PCにsshでアクセスをできるようにして、ローカルにバックアップを取りたい。   シャチ 駆け出しインフラエンジニアの備忘録です。▷情報処理所持資格[基本情報技術者][情報セキ[…]


経緯
いつもどおりサーバーにsshでログインできるように設定したら、ポートが開放されずにハマってしまった。
原因はSELinuxが有効となっていたことだったのですが、また忘れてハマらないために、備忘録として残します。

sshd_configファイルの設定

VM(AlmaLinux)

・Open SSH serverの設定”sshd_config”でポート番号の変更。

Port番号は任意の番号を指定。

cd /etc/ssh/
cp -p sshd_config sshd_config.bk #設定ファイルのbackup
vi sshd_config
-- 設定変更 --
17 Port 10022 #Portをdefault"22"から変更

 

・Open SSH serverをrestartし、設定を反映させる。

systemctl restart sshd   #Open SSH serverの開始
systemctl status sshd    #Open SSH serverが正常に起動したか確認

 

・firewall public ruleにrich ruleでポート10022の許可設定を追加。

firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.10.0/24 port protocol="tcp" port="10022" accept' --permanent
firewall-cmd --reload
firewall-cmd --list-all
 
・パスワード認証なので、ユーザ/パスワードでログインできるか確認。
ssh -p 10022 192.168.10.XXX

 

いつもならサクッとsshでログインできるはずが、この時点でははじかれてしまう。

ssコマンドや外部からのncコマンドでも確かにポートが開いていない。

シャチ
firewalld以外は特に設定はいらなかったはず、、

サーバー設定がうまくいかない時は、SELinuxを確認

駆け出して間もない頃に、「サーバー設定でうまくいかない時は、SELinuxを疑え」という何かのドキュメントを見た記憶があったので、SELinuxが有効になっているか確認。
・SELinuxの適用状態を確認。
#getenforce
Enforcing

 

Red Hatのドキュメントを見ると、”enforcing – SELinux security policy is enforced.”

つまり、SELinuxのセキュリティポリシーが適用されているとのこと。

 

・SELinuxで許可されているsshポート番号を確認。

#semanage port -l | grep ssh
ssh_port_t                     tcp      22

 

上記の出力結果から、sshd.confでポート番号を変更しfirewalldでは10022を許可したものの、SELinuxのssh許可ポートでは22しか許可されていなかった。

結果として、SELinuxのssh許可ポートで10022を追加する必要があるということだった。

 
・SELinuxのssh許可ポートに10022を追加。
#semanage port -a -t ssh_port_t -p tcp 10022
#semanage port -l | grep ssh
ssh_port_t                     tcp      10022, 22

 

・ちなみにデフォルトのポート22は不要なため、SELinuxの許可ポートから削除しようとすると、エラーが出る。

#semanage port -d -t ssh_port_t -p tcp 22
ValueError: Port tcp/22 is defined in policy, cannot be deleted

 

ポリシーで定義されているため、削除できないとのことのよう。

※sshd.confでポート変更をしているため、外部から22でのチャレンジはされない想定ですが、念のためfirewalldではsshサービスを許可するのではなく、10022をrich ruleで許可設定した。

 

これにて、外部からサーバーへ10022でsshが可能になったため、設定完了。

シャチ
CentOS7で設定したときは、semanageでポート追加しなくともsshd.confの設定変更だけでSELinuxの許可ポートにも追加されたはず。どこか設定漏れがあるのか、、

まとめ:sshのポート変更でポートが開放されない場合|SELinuxが無効化か確認

<<POINT>>
サーバーの設定をするときはSELinuxのステータスを確認。

設定手順

  1.  SELinuxのステータス確認
  2.  sshd.confの設定変更
  3.  firewalldの設定変更
  4.  SELinuxの設定変更

SELinuxを有効にしている時は、設定手順にSELinuxの設定手順を組み込む必要があるということですね。

SELinuxはOS起動時にデフォルトで有効化になっているようなので、ステータスを気にしたことがなかったです、、

シャチ
普段はsemanageコマンドを実行しなくてもポート開放されたのに、なぜ今回だけ必要になったのか調べる必要がありそうです。

>
CTR IMG