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)はオフになっています。
こちらがファイアウォール構築前の、ConoHa VPSをKUSANAGI managerを利用して環境構築した時点でのデフォルトのポート開放状況です。
セキュアな通信である22番のSSHや80番のHTTP、443番のHTTPS等が空いていますね。
しかし安全とは言えない21番のFTPやサーバー内のWordPressのみでしか使わない場合開放する必要がない3306番のMySQLも開放されてしまっています。
ファイアウォールはちゃんと設定すればダイレクトに安全性を高めてくれるので、しっかり導入して行きましょう!
ファイアウォールを設定する
ファイアウォールはfirewalldというサービス名で提供されています。
念の為現在のfirewalldの起動状況を確かめておきます。
ファイアウォールはfirewall-cmd
で様々な操作が行なえます(サービス名はfirewalldですが、コマンドは最後のdが入らずfirewall-cmd
です笑)。
$ sudo firewall-cmd --state
こんな感じでnot runningと表示されたら言うまでもなく現在firewalldは稼働していません。
という事で、まずはfirewalldを起動するところから始めていきます。
firewalldの起動・停止
それではfirewalldを起動させて行きましょう。
$sudo systemctl start firewalld
起動・停止に関してはfirewall-cmd
ではなくsystemctl
コマンドで行います。
なお停止は以下のコマンドで行えます。
$ sudo systemctl stop firewalld
既にWordPressの設定が終わっていてドメイン名でアクセスできる方は起動後、試しにアクセスして見て下さい。
多分アクセスできないと思います笑。
そう、この状態ではSSH(22番ポート)以外のポートが完全に塞がれているので、HTTP(80番)でのアクセスが出来ません。
もちろんFTPやPOP3、IMAPなんかのサーバーも全て通信が行えません。
ではここから、実際に通信を許可したいポートを開放して行きましょう!
ゾーンの概念
firewalldではゾーンと言う概念が取り入れられています。
なんだか難しそう、と思っちゃうかも知れませんが大した事ありません、ざっくり言えば「このゾーンではこのポートとこのポートを空けておく、このゾーンではこのポートだけ!」のような設定みたいなものです。
ゾーンにはデフォルトで9種類あり、基本的に最初はSSH(22番)のみ開放されたpublicというゾーンになっています。
publicはそのまま公共という意味ですが、Webサーバーには最も適したゾーンです。
他のゾーンについてはとりあえず今回は扱いませんが、機会があればfirewalldのゾーンについて知っておくと良いと思います。
では今回使用するpublicというゾーンの設定を確認してみましょう。
$ sudo firewall-cmd --zone=public --list-all
つらつら書かれていますが、services行とports行を見ればとりあえずOK。
services行には許可されているサービス名(sshやhttp等)が、ports行は許可されているサービス定義されていないポート番号が表示されます。
ようはここに許可したいサービス名やポート番号が書いてあれば通信できる、という事になりますね!
publicでは標準で許可されているのがsshとIPv6用のDHCPクライアントのみなので、WebサーバーのポートやSSHのポートを変えている場合はそういうポートを許可していく必要があります(ちなみにpublicの場合、サーバー自身からインターネットに対して(Out)のすべての通信が許可されています)。
許可するサービス・ポートの追加
それでは実際にサービスやポートを追加して、ポートを開放して行きましょう。
まずはWordPressを使用するにあたって最重要なHTTP・HTTPSポートです
$ sudo firewall-cmd --zone=public --add-service=http --permanent
上記のコマンドでまずはhttp(80番ポート)が開放されるよう設定されましたが、変更した内容は必ずfirewalldを再読込させる必要があります。
なおオプションに--permanent
がついていますが、これがついていないと--reload
(再読込)した時に設定が消えてしまいます。
一時的にポート開放を試したい場合は--permanent
をつけなくても良いですが、今回のように常用で通信を許可する場合は必ず--permanent
オプションを付与しましょう。
$ sudo firewall-cmd --reload
このコマンドで再読込が出来たので、実際にhttpが適用されているか--list-all
オプションで見てみましょう。
$ sudo firewall-cmd --zone=public --list-all
こんな感じでservicesにhttpが追加されていれば大成功!
もちろんこのままではSSL(https)の443番はまだ開放されてないので同様に追加していきます。
$ sudo firewall-cmd --zone=public --add-service=https --permanent
もちろん追加後はリロードします。
$ sudo firewall-cmd --reload
もう一度--list-all
でhttpsが追加されているか見てみましょう。
$ sudo firewall-cmd --zone=public --list-all
ばっちりですね!
これで恐らくWordPressにアクセスできるようになったと思います、実際にアクセスして試してみて下さい。
FTP(21番ポート)
FTPについても同様で21番ポートを開放すれば良いんですが、僕はセキュリティ上の理由からFTPサーバーは推奨していません。
SSHを用いて行えるSFTPやSCPを使うべきで、ユーザー名やパスワードが平文で送受信される(暗号化されていない)FTPは基本的に避けるべきです。
SSHのポート変更
SSHについては先述した通りpublicだと標準で開放されています。
しかしSSHの標準ポート22番は攻撃対象になりやすいので基本的には他のポートに変更して運用すべきでしょう。
事前に変更するポート番号が決まっていたら、SSHというサービス名ではなく個別のポート番号で開放を行います。
このような場合、先程の--add-service
ではなく--add-port
を使用します。
$ sudo firewall-cmd --zone=public --add-port=58126/tcp --permanent
これは58126番をTCPというプロトコル(こういう手順で通信するよ!というような約束事)で開放する時の書式です。
僕は今回SSHのポートを58126番に変更して適用していますが、実際の数字はご自身で開放するポート番号を指定して下さい(上記のSSHのポートを変更する記事を見ながら作業されるのが良いと思います)。
$ sudo firewall-cmd --reload
こちらも同じくリロードし、--list-all
で確認してみます。
$ sudo firewall-cmd --zone=public --list-all
無事ports欄に今指定したポートが追加されましたね!
service:sshの削除
これは実際にSSHのポート変更を終えた後最後の処理ですが、SSHのポート変更を終えたらserviceのsshは削除しておくべきでしょう。
サービスの削除には--remove-service
オプションを使います。
$ sudo firewall-cmd --zone=public --remove-service=ssh --permanent
お約束のリロード。
$ sudo firewall-cmd --reload
当然--list-all
オプションで正しく削除されてるか確認します。
$ sudo firewall-cmd --zone=public --list-all
serviceからsshが消えていますね、これで無事22番ポートも塞ぐことが出来ました!
ファイアウォール構築後のポート確認
それでは必要なHTTP、HTTPS、SSH(変更後)のポートのみを開放した状態でポート開放のテストを行ってみます。
先程まで表示されていたFTPやMySQLは表示されていない=きちんと塞がれていますね!
これで21番ポートや3306番ポートを攻撃しようにも、そもそも開放されていないので攻撃出来なくなりました。
ファイアウォールの自動起動
現在は手動でファイアウォールを立ち上げましたが、サーバーを再起動した時に一々手動でコマンド入力して立ち上げるのはさすがにナンセンス。
という事で、サーバーが起動したらファイアウォールも自動起動するように設定していきましょう!
まずは現在の自動起動の状態を確認します。
$ sudo systemctl list-unit-files | grep firewalld
上記のコマンドは|(パイプ)を使って、list-unit-filesという定義ファイルの中から「firewalld」がある行を検索して表示しています。
結果はdisabled、つまり自動起動は現在していません。
これを有効にするには以下のコマンドで行えます。
$ sudo systemctl enable firewalld.service
こんな感じの出力がされればOK!
自動起動が有効になっているか再度grepで確認してみましょう。
$ sudo systemctl list-unit-files | grep firewalld
今度はenabledになっていますね!
これでサーバーが再起動してもファイアウォールが自動起動するようになり、不意にファイアウォールが無効になっていた!なんて事も防げて安心です。
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超高速環境
当記事はWordPressを超高速化できるWordPress専用仮想マシンKUSANAGIをConoHa VPSで初心者でも簡単に導入できるというコンセプトの1記事です。
手順通りに行えば誰でもKUSANAGI環境が実現できる!を目指して作成しました。
是非合わせてお読み下さい!
コメント