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
以上でファイアーウォールの設定は完了です。