さくらのVPSでCentOS7のサーバーを構築する その4

このブログでは以前にVMware上でCentOS7のサーバーを構築する手順を解説しましたが、今度はさくらのVPSを使ってサーバーを構築します。4回目となる今回は、引き続きセキュリティ関係の設定を進めます。

本編の目次

  • サーバーコントロールパネルへのログイン~サーバー起動まで(第1回)
  • サーバーへログイン~初回起動時に行う設定
  • SSHログインについて
  • SELinuxの有効化(第2回)
  • 一般ユーザーの作成
  • sudoの有効化
  • SSH経由でのrootログイン禁止設定(第3回)
  • 公開鍵認証の導入
  • ファイアウォール(Firewalld)の設定(第4回)
  • SSHのポート番号変更とSELinux
  • WEBサイト公開用ユーザーの作成とChrootの設定(第5回)
  • Apacheのインストールと設定
  • ユーザーのホームディレクトリ配下にあるpublic_htmlを公開する(第6回)
  • バーチャルホストの設定
  • PHPのインストールと設定(第7回)
  • PHPのCGIモード化
  • MySQLのインストールと設定(第8回)
  • phpMyAdminのインストールと設定(第9回)
  • WordPressを使うためのMySQLの設定(第10回)
  • WordPressのインストール

ファイアウォール(Firewalld)の設定

CentOS7からは、ファイアウォールとしてこれまで使われていた「iptables」に替わり、「Firewalld」がデフォルトでインストールされるようになりました。Firewalldではまず「ゾーン」なるものが定義され、それに対して「どの通信を許可/拒否するか」の設定を行います。そして、ゾーンをサーバーのNIC(ネットワークインターフェースカード)と紐付けし、外敵からの防御を行います。

さくらのVPS標準OSインストールのCentOS7の場合、etc0(通常使われるNIC)に紐づけされているゾーンは「Public」です。そして、デフォルトで許可されている通信はSSH(22番ポート)とDHCPv6-Client(546番ポート)のみです。そのため、サーバーに何かさせるときには、目的に合わせて必要な通信を許可する必要があります。今回はHTTP(80番ポート)とHTTPS(443番ポート)の通信を許可することにします。以下のコマンドを実行してください。 [VIM] sudo firewall-cmd –add-service=http –zone=public –permanent sudo firewall-cmd –add-service=https –zone=public –permanent [/VIM] 「success」と表示されれば成功です。以下のコマンドを打ち、設定を再読込させて反映させます。 [VIM] sudo firewall-cmd –reload [/VIM] 「success」と表示されれば成功です。

なお、HTTP(HTTPS)の通信を拒否する場合は、以下のコマンドを打ちます。 [VIM] sudo firewall-cmd –remove-service=http –zone=public –permanent sudo firewall-cmd –remove-service=https –zone=public –permanent [/VIM]

以下のコマンドで、Firewalldで定義されているサービスの一覧を見ることができます。ここにあるサービスについては、サービス名を指定して通信の許可/拒否の設定を行えます。 [VIM] firewall-cmd –get-services [/VIM] また、デフォルトゾーン(初期設定ではPublic)で通信を許可しているサービスは、以下のコマンドで確認できます。 [VIM] sudo firewall-cmd –list-service [/VIM]

SSHのポート番号変更とSELinux

悪意ある第三者がSSHでrootログインに成功すれば、いとも簡単にサーバーを乗っ取られてしまいます。何とかして不正ログインを防がなければなりませんが、SSHやHTTPなどのプロトコルでは使用されるポート番号がある程度決まっているので(SSHの場合は22番)、第三者はそのポート番号で通信し不正ログインを試みます。これまでに公開鍵認証などの対策は行いましたが、攻撃を避ける必殺技として「ポート番号変更」というものがあります。今回はSSHのポート番号を変更し、不正ログインリスクのさらなる低減を図ります。

そして、ここで出てくるのが第2回で有効化した「SELinux」です。SELinuxの設定を変更しないとポート番号の変更は行えないので、ここでSELinuxの設定変更を行います。以下のコマンドで、SELinuxの設定変更に必要なツールを入れます。以下のコマンドを実行してください。 [VIM] sudo yum install policycoreutils-python [/VIM]

インストールが完了したら、以下のコマンドでSSH用に使えるポート番号を確認します。 [VIM] sudo semanage port -l | grep ssh #おそらく22番のみ使える設定になっている ssh_port_t tcp 22 [/VIM]

SSH用に使用する新しいポート番号(1024~65535の間で決定。TCPやUDPにおけるポート番号の一覧 – Wikipediaなどで他のサービスと競合していないか確かめるとGood)を決め、以下のコマンドを実行します。 [VIM] sudo semanage port -a -t ssh_port_t -p tcp 10000 [/VIM] この例では10000番をSSH用に設定しています。実行する時は任意の番号に差し替えてください。また、ここで決めたポート番号はSSH接続時に毎回使うものなので、決して忘れないように。

使用できるポート番号が追加されたことを、以下のコマンドで確かめましょう。 [VIM] sudo semanage port -l | grep ssh #10000番が追加されている ssh_port_t tcp 10000, 22 [/VIM]

ちなみに、追加したポート番号を削除する場合は以下のコマンドを用います。 [VIM] sudo semanage port -d -t ssh_port_t -p tcp 10000 [/VIM]

今度はSSHサービスの設定を行います。 [VIM] sudo vim /etc/ssh/sshd_config [/VIM] 設定ファイルを開いたら、17行目辺りにある記述を以下のように編集し、保存してください。 [VIM] #編集前 #Port 22 #編集後(コメントアウトを外してポート番号を追加) Port 22 Port 10000 [/VIM]

保存し終わったら、編集ミスがないか以下のコマンドで確認しましょう。特に何も表示されなければ大丈夫です。 [VIM] sudo /usr/sbin/sshd -t [/VIM] 大丈夫そうであれば、以下のコマンドでSSHサービスを再起動しましょう。 [VIM] sudo systemctl restart sshd [/VIM]

SSHサービスの設定が終わったら、Firewalldの設定を行います。以下のコマンドでSSHサービスの定義ファイルをコピーします。 [VIM] sudo cp /usr/lib/firewalld/services/ssh.xml /usr/lib/firewalld/services/ssh-alt.xml [/VIM]

コピーしたファイルを編集しましょう。 [VIM] sudo vim /usr/lib/firewalld/services/ssh-alt.xml [/VIM] 5行目辺りに記載されているポート番号を書き換えましょう。実際に編集する場合は、各自使用するポート番号を入力してください。 [VIM] #編集前 #編集後 [/VIM]

ファイルを保存したら、以下のコマンドでポート番号を変更したSSHサービスの通信を許可します。 [VIM] sudo firewall-cmd –add-service=ssh-alt –zone=public –permanent [/VIM] 「success」と表示されれば成功です。以下のコマンドを打ち、設定を再読込させて反映させます。 [VIM] sudo firewall-cmd –reload [/VIM] 「success」と表示されれば成功です。ここまで終わったら、新しいポート番号を使ってログインできることを確かめてください。

新しいポート番号でログインできることを確かめたら、22番ポートでのログインを禁止します。まずはSSHサービスの設定です。 [VIM] sudo vim /etc/ssh/sshd_config [/VIM] 設定ファイルを開いたら、「Port 22」の記述を削除して保存してください。設定ファイルを保存したら、以下のコマンドでSSHサービスを再起動します。 [VIM] sudo systemctl restart sshd [/VIM]

続いてFirewalldの設定です。以下のコマンドを順番に実行します。 [VIM] sudo firewall-cmd –remove-service=ssh –zone=public –permanent sudo firewall-cmd –reload [/VIM]

ここまでの設定で、22番ポートに接続してもSSH接続はできなくなっているはずです。22番ポートで接続できなくなっていることを確認すれば、ひとまず目的達成です。

このブログを応援する・寄付する

当ブログでは暗号通貨による寄付を募っております。

モナゲボタン モナゲボタン

Bitcoin:

Monacoin:

Litecoin: