Hatena::ブログ(Diary)

SEGVな毎日

2016-04-11

CentOS7でsshのポートを変更する(firewalld, SELinux)


さくらVPSにCentOS7をインストールしてssh接続ポートを変更しようとしたらハマったのでメモ

まず,CentOS7ではデフォルトファイアウォールiptablesでなくfirewalldになっています.
そのため,sshのためにポートを開放する方法もCentOS6までとは異なっています.

まずはじめに/etc/ssh/sshd_configを開いて新しく設定するポート番号を指定します.

# 既存のポート番号
Port 22
# 新しいポート番号
Port 10009

この状態でsshd再起動すると正しく起動しません.
CentOS7ではsystemdを採用しているため,従来とサービスの再起動を行う際に指定するコマンドが異なっています.
CentOS7ではサービスの再起動を行う際はsystemctlコマンドを用います.

# systemctl restart sshd.service

この状態でsshd再起動しようとしても,再起動に失敗してしまいます.
ここでsshd再起動しない理由はSELinuxのポリシーが変更されていないためsshdが使用したいポートが使用できないというものです.
そのため,SELinuxのポリシーを変更する必要があります.
semanageコマンドを利用してSELinuxのポリシーを変更します.
手始めにsshとして使用できるポートを調べてみます.

# semanage port -l | grep ssh
ssh_port_t         tcp      22

この時点では22番ポートのみがssh用に開かれているので,新しく使用するポート番号をSELinuxの設定に追加します.

# semanage add -a -t ssh_port_t -p tcp 10009

これでsshとして使用できるポートを確認すると次のように新しく使用するポート番号が追加されています.

# semanage port -l | grep ssh
ssh_port_t         tcp      10009,22

これでsshdが起動できるようになります.
しかし,この時点では新しいポートに外部からアクセスできるようになっていません.
なぜならば,ファイアウォールが新しいポートへのアクセスを許可していないためです.
そのため,新しいポートへ外部からのアクセスを許可するようにファイアウォールの設定を変更します.

CentOS7ではfirewalldが標準のファイアウォールサービスとなっています.
これはサービスごとに外部からのアクセスの可否を制御する方式となっています.
ここで,sshサービスのファイアウォール設定を変更してしまえば新しいポートへのアクセスが可能となります.
sshサービスのファイアウォール設定は/usr/lib/firewalld/service/ssh.xmlに保存されています.
ssh.xmlに保存されているport="22"を新しいポート番号に変更し,ファイアウォール再起動すれば新しいポート番号でssh接続が可能となります.

トラックバック - http://d.hatena.ne.jp/akahana_1/20160411/p1