VPSサーバーにファイアウォールを導入しよう!ポート開放を最低限にしてセキュリティアップ!

記事内に広告が含まれていることがあります。
ConoHa VPS - ファイアウォール記事用アイキャッチ

VPSブイピーエスサーバーは常にインターネット上に広く公開され、その分クラッキング(不正ログイン)を狙う人間やプログラムは日々攻撃対象を探っています。

余計なポート開放は攻撃者に対して攻撃のすきを与えるだけであり、基本的には不要なポートは塞いでおくべきでしょう。

そこで活躍するのがファイアウォールです。

  • ファイアウォールとは何かがわかる!
  • 実際にファイアウォールの設定ができる!
  • 再起動時のファイアウォール自動起動設定もできる!
WordPressカテゴリーCTA
\ココナラでWordPressエラー修正サービス始めました!/

ココナラでWordPressのエラー解決サービスを始めました!

追加オプション無しで3,000円から受け付けておりますが、新規会員登録で300円、僕の紹介コードを入力すると1,000円分のポイントが貰えるので実質1,700円から利用することができます!

  • 突然画面が真っ白になった
  • 英語のエラーが表示されてどうしたらいいかわからない
  • とにかく困っている

どんなことでもぜひお気軽にご相談ください!

紹介コード:K0GR23
スポンサーリンク
スポンサーリンク

ファイアウォールって何?

ファイアウォールは読んで字の如く防火壁。

実際火事になってしまったら延焼を防ぐために防火壁が閉まって被害を最低限に食い止めようとしますよね?

あれと同じように、不必要なポート(通信できる扉)を閉めてしまうというのがこのファイアウォールの役目。

皆さんが使用しているパソコンにもファイアウォールは搭載されていて、実は気付かないうちに色んな攻撃から守ってくれています。

通常Webサーバーとして使う為のサーバーはWebページの通信に必要なポートやFTP、SSH、メール関係のポートを空けておけばOK。

それ以外のポートは必要ないのであれば閉じておくことで安全をより高める事が出来ます。

ポートって何?

ポートはざっくり説明すると部屋番号みたいなもので、例えばHTTP(Webサーバーの標準ポート)は80番、SSL(https)は443番、SSHは22番と予め世界標準で定義されています(もちろんこのポート番号はサーバー側で任意の物に変更する事も出来ます)。

ポートが決まっていれば、何万もあるポートを1から「お前か!?違うかこっちか!?」と試す必要がなくWebの通信なら80番なので、80番の部屋の扉をどんどん!と叩けば勝手にHTTPが反応してくれます。

通信する際のお約束の一つみたいなものですね!

ConoHa VPSのfirewalld

ConoHa VPSコノハ ブイピーエス+KUSANAGIクサナギ managerマネージャーで使ってKUSANAGI環境を構築した場合、標準でファイアウォール(firewalld)はオフになっています。

Zenmap - ポートスキャンの結果
Zenmap – ポートスキャンの結果

こちらがファイアウォール構築前の、ConoHa VPSをKUSANAGI managerを利用して環境構築した時点でのデフォルトのポート開放状況です。

セキュアな通信である22番のSSHや80番のHTTP、443番のHTTPS等が空いていますね。

しかし安全とは言えない21番のFTPやサーバー内のWordPressワードプレスのみでしか使わない場合開放する必要がない3306番のMySQLも開放されてしまっています。

ファイアウォールはちゃんと設定すればダイレクトに安全性を高めてくれるので、しっかり導入して行きましょう!

Linux系OSでファイアウォールと言えばiptablesが有名でしたが、CentOS7系からiptablesではなくfirewalldというサービスに変更されています。
firewalldを止めてiptablesで運用することも出来ますが、新しいOSでfirewalldが採用されているので当記事でもfirewalldを採用しております。

ファイアウォールを設定する

ファイアウォールはfirewalldというサービス名で提供されています。

念の為現在のfirewalldの起動状況を確かめておきます。

ファイアウォールはfirewall-cmdで様々な操作が行なえます(サービス名はfirewalldですが、コマンドは最後のdが入らずfirewall-cmdです笑)。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --state

コマンド[firewall-cmd
CentOSセントオーエスのfirewalldに関連する一連のコマンド。
オプション[--state
現在の稼働状況を表示するオプション。

コマンド - firewall-cmdの結果
コマンド – firewall-cmdの結果

こんな感じでnot running未稼動と表示されたら言うまでもなく現在firewalldは稼働していません。

という事で、まずはfirewalldを起動するところから始めていきます。

firewalldを起動させるとSSH標準ポートである22番以外は一旦全て塞がれ、SSHのポート番号を変更している場合は基本的に強制的に通信が切断されます。
もし既にSSHのポート番号を変更している場合、ConoHa VPSであればログイン後のコンソールから操作が行えるのでSSHのポート番号の開放だけそちらで行った方が良いと思います。
22番ポートからまだ変更していない場合、そのまま下記の手順で行ってOKです。

firewalldの起動・停止

それではfirewalldを起動させて行きましょう。

コマンド - systemctl
コマンド – systemctl
$sudo systemctl start firewalld

起動・停止に関してはfirewall-cmdではなくsystemctlコマンドで行います。

なお停止は以下のコマンドで行えます。

コマンド - systemctl
コマンド – systemctl
$ sudo systemctl stop firewalld

既にWordPressの設定が終わっていてドメイン名でアクセスできる方は起動後、試しにアクセスして見て下さい。

多分アクセスできないと思います笑。

そう、この状態ではSSH(22番ポート)以外のポートが完全に塞がれているので、HTTP(80番)でのアクセスが出来ません。

もちろんFTPやPOP3、IMAPなんかのサーバーも全て通信が行えません。

ではここから、実際に通信を許可したいポートを開放して行きましょう!

ゾーンの概念

firewalldではゾーンと言う概念が取り入れられています。

なんだか難しそう、と思っちゃうかも知れませんが大した事ありません、ざっくり言えば「このゾーンではこのポートとこのポートを空けておく、このゾーンではこのポートだけ!」のような設定みたいなものです。

ゾーンにはデフォルトで9種類あり、基本的に最初はSSH(22番)のみ開放されたpublicというゾーンになっています。

publicはそのまま公共という意味ですが、Webサーバーには最も適したゾーンです。

他のゾーンについてはとりあえず今回は扱いませんが、機会があればfirewalldのゾーンについて知っておくと良いと思います。

では今回使用するpublicというゾーンの設定を確認してみましょう。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --list-all

オプション[--zone=ゾーン名
ゾーンを指定する為のオプション。
デフォルトのゾーンを指定する場合省略可能(ただし指定先を明確にする為に普段から記載するようにした方が良いと思います)。
オプション[--list-all
ゾーンの設定を表示するためのオプション。

firewall-cmd - publicのデフォルト設定
firewall-cmd – publicのデフォルト設定

つらつら書かれていますが、services行とports行を見ればとりあえずOK。

services行には許可されているサービス名(sshやhttp等)が、ports行は許可されているサービス定義されていないポート番号が表示されます。

ようはここに許可したいサービス名やポート番号が書いてあれば通信できる、という事になりますね!

publicでは標準で許可されているのがsshとIPv6用のDHCPクライアントのみなので、WebサーバーのポートやSSHのポートを変えている場合はそういうポートを許可していく必要があります(ちなみにpublicの場合、サーバー自身からインターネットに対して(Out)のすべての通信が許可されています)。

許可するサービス・ポートの追加

それでは実際にサービスやポートを追加して、ポートを開放して行きましょう。

まずはWordPressを使用するにあたって最重要なHTTP・HTTPSポートです

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --add-service=http --permanent

オプション[--add-service=サービス名
定義されたサービスを追加するオプション。
サービス名にはhttpやsshと言ったサービス名が入る。
オプション[--permanent
通常サービスやポートを追加してもfirewalldを再読込すればリセットされてしまうが、恒久的こうきゅうてきに(再読込してもずっと)適用させるオプション。

上記のコマンドでまずはhttp(80番ポート)が開放されるよう設定されましたが、変更した内容は必ずfirewalldを再読込させる必要があります。

なおオプションに--permanentがついていますが、これがついていないと--reload(再読込)した時に設定が消えてしまいます。

一時的にポート開放を試したい場合は--permanentをつけなくても良いですが、今回のように常用で通信を許可する場合は必ず--permanentオプションを付与しましょう。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --reload

オプション[--reload
firewalldの設定を再読込させて反映させる為のオプション。

このコマンドで再読込が出来たので、実際にhttpが適用されているか--list-allオプションで見てみましょう。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --list-all
firewall-cmd - http
firewall-cmd – http

こんな感じでservicesにhttpが追加されていれば大成功

もちろんこのままではSSL(https)の443番はまだ開放されてないので同様に追加していきます。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --add-service=https --permanent

もちろん追加後はリロードします。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --reload

もう一度--list-allでhttpsが追加されているか見てみましょう。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --list-all
firewall-cmd - http https
firewall-cmd – http https

ばっちりですね!

これで恐らくWordPressにアクセスできるようになったと思います、実際にアクセスして試してみて下さい。

FTP(21番ポート)

FTPについても同様で21番ポートを開放すれば良いんですが、僕はセキュリティ上の理由からFTPサーバーは推奨していません。

SSHを用いて行えるSFTPやSCPを使うべきで、ユーザー名やパスワードが平文で送受信される(暗号化されていない)FTPは基本的に避けるべきです。

SSHのポート変更

SSHについては先述した通りpublicだと標準で開放されています。

しかしSSHの標準ポート22番は攻撃対象になりやすいので基本的には他のポートに変更して運用すべきでしょう。

事前に変更するポート番号が決まっていたら、SSHというサービス名ではなく個別のポート番号で開放を行います。

このような場合、先程の--add-serviceではなく--add-portを使用します。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --add-port=58126/tcp --permanent

これは58126番をTCPというプロトコル(こういう手順で通信するよ!というような約束事)で開放する時の書式です。

僕は今回SSHのポートを58126番に変更して適用していますが、実際の数字はご自身で開放するポート番号を指定して下さい(上記のSSHのポートを変更する記事を見ながら作業されるのが良いと思います)。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --reload

こちらも同じくリロードし、--list-allで確認してみます。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --list-all
firewall-cmd - ports
firewall-cmd – ports

無事ports欄に今指定したポートが追加されましたね!

service:sshの削除

これは実際にSSHのポート変更を終えた後最後の処理ですが、SSHのポート変更を終えたらserviceのsshは削除しておくべきでしょう。

以下の作業は先述したSSHのポート番号変更後に行いましょう。
先にポートを塞いでしまうとConoHa VPSのサイト内にあるコンソール以外からログインができなくなります。

サービスの削除には--remove-serviceオプションを使います。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --remove-service=ssh --permanent

お約束のリロード。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --reload

当然--list-allオプションで正しく削除されてるか確認します。

コマンド - firewall-cmd
コマンド – firewall-cmd
$ sudo firewall-cmd --zone=public --list-all
firewall-cmd - ports
firewall-cmd – ports

serviceからsshが消えていますね、これで無事22番ポートも塞ぐことが出来ました!

ファイアウォール構築後のポート確認

それでは必要なHTTP、HTTPS、SSH(変更後)のポートのみを開放した状態でポート開放のテストを行ってみます。

Zenmap - ポートスキャンの結果
Zenmap – ポートスキャンの結果

先程まで表示されていたFTPやMySQLは表示されていない=きちんと塞がれていますね!

これで21番ポートや3306番ポートを攻撃しようにも、そもそも開放されていないので攻撃出来なくなりました。

ファイアウォールの自動起動

現在は手動でファイアウォールを立ち上げましたが、サーバーを再起動した時に一々手動でコマンド入力して立ち上げるのはさすがにナンセンス。

という事で、サーバーが起動したらファイアウォールも自動起動するように設定していきましょう!

まずは現在の自動起動の状態を確認します。

コマンド - systemctl grep
コマンド – systemctl grep
$ sudo systemctl list-unit-files | grep firewalld

コマンド[grep]
指定した文字列が含まれている行を検索して出力するコマンド。
パイプ[|]
コマンド同士を接続する為に使う記号。
Shiftキー+\キーで入力できる。

上記のコマンドは|(パイプ)を使って、list-unit-filesという定義ファイルの中から「firewalld」がある行を検索して表示しています。

コマンド - systemctl grepの結果
コマンド – systemctl grepの結果

結果はdisabled無効、つまり自動起動は現在していません。

これを有効にするには以下のコマンドで行えます。 

コマンド - systemctl
コマンド – systemctl
$ sudo systemctl enable firewalld.service
コマンド - systemctlの結果
コマンド – systemctlの結果

こんな感じの出力がされればOK!

自動起動が有効になっているか再度grepで確認してみましょう。

コマンド - systemctl grep
コマンド – systemctl grep
$ sudo systemctl list-unit-files | grep firewalld
コマンド - systemctl grepの結果
コマンド – systemctl grepの結果

今度はenabled有効になっていますね!

これでサーバーが再起動してもファイアウォールが自動起動するようになり、不意にファイアウォールが無効になっていた!なんて事も防げて安心です。

サーバーを触っていると、びっくりするぐらいenabledとdisabledという単語を見る機会があります。
僕は頭があんまりよろしく無いので、それぞれの頭文字から良い(Enabled)とダメ(Disabled)とおぼえています・・・笑。
enabledとdisabled、どっちが良いんだっけ・・・?というのはありがちなので、この機会に覚えておきましょう!

ConoHa VPSのKUSANAGI managerを使う場合

ConoHa VPSでKUSANAGI managerを使う場合、60000番ポートを使用して接続しています。

このため、SSHサーバーやHTTP/HTTPSサーバー以外にも60000番ポートを開放しないとKUSANAGI managerのアクセスが弾かれてしまいます。

$ sudo firewall-cmd --zone=public --add-port=60000/tcp --permanent

これで60000番ポートの開放が出来るので、リロードして再度読み込んで下さい。

なおKUSANAGI managerを使用しない場合は塞いでおいても問題ありません。

ファイアウォールは適切に設定して安全に通信しよう

ファイアウォールは何故か設定が難しい・・・と言ったイメージで敬遠される傾向があります。

しかしファイアウォール構築はVPN、サーバーにとって必須であり避けて通ってはいけません。

この記事で紹介してきたように、仕組みは非常に単純で「これとこれだけ許可!後は全部ダメ!」と設定するだけです笑。

もちろん今後メールサーバー等を別途立ち上げる時は必要に応じて追加でポートを開放する必要がありますので、その時に改めて当記事を見直して設定して頂ければと思います!

ConoHa VPS+KUSANAGIで始めるWordPress超高速環境

ConoHa VPS まとめ記事用アイキャッチ

当記事はWordPressを超高速化できるWordPress専用仮想マシンKUSANAGIをConoHa VPSで初心者でも簡単に導入できるというコンセプトの1記事です。

手順通りに行えば誰でもKUSANAGI環境が実現できる!を目指して作成しました。

是非合わせてお読み下さい!

ConoHa VPS+KUSANAGIで始めるWordPress講座!初心者でもステップ形式で導入が可能です!KUSANAGI managerの使い方からコマンドまで全部解説
WordPress高速化エンジンKUSANAGIは、ConoHa VPSと組み合わせて使う事で初心者の方でも比較的簡単に導入が可能です。KUSANAGI managerを使った登録方法から設定やWordPressの設定まで全て解説!日本一分かりやすいKUSANAGIの始め方です!
スポンサーリンク
WordPress
スポンサーリンク
\この記事いいね!と思ったらシェアしてね/
スポンサーリンク
L'7 Records

コメント

タイトルとURLをコピーしました