CentOS7.1 で SSH のポート番号を変更する方法

SSH へのブルートフォースアタックのログの確認

[root@localhost ~]# cat /var/log/secure | grep "Invalid user"
Nov  5 04:00:12 localhost sshd[27467]: Invalid user admin from 103.207.37.115
Nov  5 04:00:16 localhost sshd[27469]: Invalid user admin from 103.207.37.115
Nov  5 04:00:23 localhost sshd[27477]: Invalid user pi from 103.207.37.115
Nov  5 04:00:31 localhost sshd[27492]: Invalid user test from 103.207.37.115
Nov  5 04:00:33 localhost sshd[27498]: Invalid user admin from 103.207.37.115
Nov  5 04:00:37 localhost sshd[27500]: Invalid user user from 103.207.37.115
Nov  5 04:00:40 localhost sshd[27502]: Invalid user info from 103.207.37.115
Nov  5 04:00:42 localhost sshd[27504]: Invalid user guest from 103.207.37.115
Nov  5 04:00:45 localhost sshd[27506]: Invalid user git from 103.207.37.115
Nov  5 04:00:52 localhost sshd[27514]: Invalid user ubnt from 103.207.37.115

(以下略)

以下のコマンドでも確認可能。

cat /var/log/secure | grep "Failed password"
cat /var/log/messages | grep "failure"

うまくいかなかった方法

1.「/etc/ssh/」ディレクトリに移動

[root@localhost ~]# cd /etc/ssh/

2.ファイル一覧を表示

[root@localhost ssh]# ls
moduli              ssh_host_ecdsa_key.pub    ssh_host_rsa_key
ssh_config          ssh_host_ed25519_key      ssh_host_rsa_key.pub
ssh_host_ecdsa_key  ssh_host_ed25519_key.pub  sshd_config

3.バックアップをとる

[root@localhost ssh]# cp sshd_config sshd_config.old

4.バックアップされているか確認

[root@localhost ssh]# ls
moduli                  ssh_host_ed25519_key      sshd_config
ssh_config              ssh_host_ed25519_key.pub  sshd_config.old
ssh_host_ecdsa_key      ssh_host_rsa_key
ssh_host_ecdsa_key.pub  ssh_host_rsa_key.pub

5.vi で「sshd_config」ファイルを開く

以下の「Port」の行を修正。

変更前

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

変更後

# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 22222
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

「:wq」でファイルを保存する。

6.以下のコマンドを実行

[root@localhost ssh]# semanage port -a -t ssh_port_t -p tcp 22222
-bash: semanage: コマンドが見つかりません

7.以下のコマンドで policycoreutils-python をインストール

[root@localhost ssh]# yum -y install policycoreutils-python

うまくインストールできていない。

8.再度コマンドを実行

[root@localhost ssh]# semanage port -a -t ssh_port_t -p tcp 22222

変わらず。

9.firewall で新しいポートを許可

[root@localhost ssh]# firewall-cmd --permanent --zone=public --add-port=22222/tcp
success

10.firewall を再起動

[root@localhost ssh]# firewall-cmd --reload
success

11.sshd を再起動

[root@localhost ssh]# systemctl restart sshd.service

12.新しいポートで運用されているか確認

[root@localhost ssh]# ss -tnlp | grep ssh
LISTEN     0      128          *:22222                    *:*                   users:(("sshd",pid=7992,fd=3))
LISTEN     0      128         :::22222                   :::*                   users:(("sshd",pid=7992,fd=4))

ここまでやったができず。
この時点でログアウトすると SSH でログインできなくなる可能性があるので絶対にログアウトしない。

うまくいった方法

1. firewalld の設定確認

[root@localhost ssh]# firewall-cmd --list-all
dmz (active)
  target: default
  icmp-block-inversion: no
  interfaces: em1
  sources:
  services: ftp samba ssh
  ports: 4000-4005/tcp 25565/tcp
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

2. firewalld の設定から SSH を削除

[root@localhost ssh]# firewall-cmd --permanent --remove-service=ssh
success

3. firewalld の設定に ssh-2222 を追加

ssh.xml をコピーして ssh-2222.xml を作成

[root@localhost ssh]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh-22222.xml

ssh-2222.xml を開いてポート番号を 22 から 22222 に変更。

[root@localhost ssh]# vi /etc/firewalld/services/ssh-22222.xml

変更前

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22"/>
</service>

変更後

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="22222"/>
</service>

4. firewalld に 22222 を追加

[root@localhost services]# firewall-cmd --permanent --add-service=ssh-22222
success

5. firewalld をリロード

[root@localhost services]# firewall-cmd --reload
success

6. 変更後の状態を確認

[root@localhost services]# firewall-cmd --list-all
dmz (active)
  target: default
  icmp-block-inversion: no
  interfaces: em1
  sources:
  services: ftp samba ssh-22222
  ports: 4000-4005/tcp 25565/tcp
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

CentOS の一覧