接続時のセキュリティの設定(CentOS 7)

VPS接続時のセキュリティを高めるため、SSHのポート設定とファイヤーウォールの設定を行います。
CentOS6まではiptablesを使用していましたが、CentOS7からはデフォルトでfirewalldというものが実装され、このfirewalldを使って設定を行います。

環境

CentOS 7.2.x

【重要】さくらのVPSでSSHポート番号とファイアウォールの設定をする前に

さくらのVPSでは、初心者の方でも基本的なセキュリティが保てるように、VPSのコントロールパネル側でパケットフィルター機能を提供しています。
このパケットフィルター機能が有効になっている場合、本ページで説明するポート番号設定やファイアウォールの設定がうまく動かないため、パケットフィルター機能を無効にする必要があります。

パケットフィルターが利用中になっている場合は、「パケットフィルターを設定」を押して、パケットフィルターを「利用しない」を選択します。

これでポート番号とファイアウォールの設定をする事前準備ができました。

1.SSHのポート変更

初期の22番ポートのままでも問題はないですが、ブルートフォースアタックで不正アクセスを試みようとする大量のログが残ることがありますので、SSHのポート番号を2222(1024~65535の任意の番号可能)に変更します。

まず、ファイアウォールの状態を確認。

[root@ ~]# systemctl status firewalld.service
・・・
Active: active (running)
・・・
[root@ ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

sshd_configを修正するため編集モードで開く。

[root@ ~]# vi /etc/ssh/sshd_config

sshd_configに記載の#Port 22をPort 2222に変更する。

#Port 22
 ↓(行頭の#を削除して、任意のポート番号に変更)
Port 2222

sshdを再起動。

[root@ ~]# systemctl restart sshd

firewalldの設定からSSHを削除。

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

firewalldの設定に新しく2222番ポートの設定を追加する。
/usr/lib/firewalld/servicesにあるssh.xmlをコピーして、/etc/firewalld/services/に2222番ポートの設定ファイル(ssh2222.xml)を作成する。

[root@ ~]# cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/ssh2222.xml

コピーして作成したファイル内の22番ポートを2222番ポートに変更する。

[root@ ~]# vi /etc/firewalld/services/ssh2222.xml
<port protocol="tcp" port="22"/>
 ↓(2222に変更)
<port protocol="tcp" port="2222"/>

新しく作成したssh2222.xmlを設定に追加する。

[root@ ~]# firewall-cmd --permanent --add-service=ssh2222
success

firewalldを再読込する。

[root@ ~]# firewall-cmd --reload

変更後の状態を確認。

[root@ ~]# systemctl status firewalld.service
・・・
Active: active (running)
・・・
[root@ ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh2222
  ports: 22/tcp 2222/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

以上でSSHポート番号の変更完了。

2.ファイアウォールの設定

ファイアウォールの設定は、使用しているサービスのポートは開放し、使用していないサービスのポートは閉じておきます。使用しているサービスと使用していないサービスを事前に確認しておきましょう。

現在のファイアウォールの設定を確認

[root@ ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: dhcpv6-client ssh2222
  ports: 22/tcp 2222/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

[services]の行が現在有効になっているサービスです。
dhcpv6-clientと、先ほど設定したssh2222が有効になっています。
※dhcpv6-clientは、IPv6用のDHCP clientサービスです。このまま有効で大丈夫です。

ファイアウォールに許可するサービスを追加するコマンド

ファイアウォールに許可するサービスを設定するには、下記のコマンドを実行します。

[root@ ~]# firewall-cmd --permanent --zone=public --add-service=許可するサービス名

–permanent は、OS再起動後も設定を継続的に適用するためのオプション。
–zone=public は、ゾーンとしてpublicを使う設定。(デフォルトはpublicなので、このままで大丈夫です。)
–add-service=許可するサービス名 でサービスを指定。
また、設定した内容を反映させるため、コマンドの後に必ず下記のリロードを実行してください。

[root@ ~]# firewall-cmd --reload

許可したサービスを削除するコマンド

[root@ ~]# firewall-cmd --permanent --zone=public --remove-service=削除するサービス名

例えば、httpのサービスを削除する場合

[root@ ~]# firewall-cmd --permanent --zone=public --remove-service=http

削除も同様に内容を反映させるため、リロードを実行します。

[root@ ~]# firewall-cmd --reload

3.各サービスの通信許可

各サービスを許可する設定は下記の通りです。適宜、使用しているサービスによって設定しましょう。

httpを許可する

[root@ ~]# firewall-cmd --permanent --zone=public --add-service=http

httpsを許可する

[root@ ~]# firewall-cmd --permanent --zone=public --add-service=https

pop3を許可する

[root@ ~]# firewall-cmd --permanent --zone=public --add-service=pop3

pop3sを許可する

[root@ ~]# firewall-cmd --permanent --zone=public --add-service=pop3s

imapを許可する

[root@ ~]# firewall-cmd --permanent --zone=public --add-service=imap

smtpを許可する

[root@ ~]# firewall-cmd --permanent --zone=public --add-service=smtp

smtpsを許可する

[root@ ~]# firewall-cmd --permanent --zone=public --add-service=smtps

その他設定できるサービス名は、下記のコマンドで確認可能

[root@ ~]# firewall-cmd --get-services

各サービスを許可した場合も、忘れずにリロードで設定を反映させましょう。

4.ファイアウォールの起動・終了・再起動

基本的なコマンドをご紹介します。

起動

[root@ ~]# systemctl start firewalld

終了

[root@ ~]# systemctl stop firewalld

再起動

[root@ ~]# systemctl restart firewalld

以上でファイアーウォールの設定は完了です。