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

ConoHa VPS - ファイアウォール記事用アイキャッチ

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

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

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

この記事でできる・わかる事

  • ファイアウォールとは何かがわかる!
  • 実際にファイアウォールの設定ができる!
  • 再起動時のファイアウォール自動起動設定もできる!

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

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

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

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

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

通常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は22番ポートで通信しちゃダメ!入り口を隠してVPSサーバーの安全を守ろう!
SSHといえば22番ポート、これ常識です。 だからダメです、今すぐ22番ポートから他のポートへ変えましょう! この記事でできる・わかる事 何故22番ポートがダメなのかわかる! 実際に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有効になっていますね!

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

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

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

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

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

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

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

Wordpress
\お役に立てたらシェアして下さると嬉しいです/
この記事を書いた人
けんちゃん

現役サポートミュージシャン、その他FXやサイト運営で生計を立てています。テクノロジー系の事も好きだったり。
大体1ヶ月にブログだけで40代~50代サラリーマンの年収ぐらい稼いでます。

けんちゃんをフォローする

よく読まれているオススメ記事

L'7 Records

コメント

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