CentOSのfirewalldで日本国内からのみアクセス許可する設定方法

CentOSなどのlinuxサーバにおいて、セキュリティを強化するのにfirewalldが有効です。アクセス元が固定IPアドレスを使用していれば、そのIPアドレスに許可設定を実施すればよいのですが、動的IPアドレスであるのが一般的です。つまりアクセス制限を実施しても、次にアクセスする際には別のIPアドレスに変わってしまい、アクセスできなくなります。そこで、せめて日本国内のIPアドレスに制限して、アクセス制限を実施する方法を紹介します。

なお、日本国内に限定したからといって決して「安全」であるとは限らない事、あらかじめ申し伝えておきます。その理由は、日本にも悪さをする人はいますし、日本国内のPCがウィルスなどに感染して、そこから攻撃を受ける可能性もあります。しかし私の経験上、変なアクセスはほぼなくなるので、海外に開放している場合よりだいぶマシにはなります。

海外からのアクセスを拒否、ブロックし日本国内からのみ許可する設定

早速、具体的に設定する方法を記載します。まず、日本のIPのリストを https://ipv4.fetus.jp/jp.txt よりダウンロードします。

以下のコマンドを実行して、domestic(国内) ゾーンを作成します。

次に、domestic 用の ipset を作成し、そこにIPアドレスリストファイルを流し込み、 ipset を domestic ゾーンに適用します。

作成したdomesticゾーンにサービスを適用します。ここではSSHのみ許可します。

設定に問題がないか、以下のコマンドで確認します。

<アクティブになっているゾーンの確認>

(実行結果の例)
domestic                   ←設定したdomesticゾーンが有効になっている
  sources: ipset:domestic ←アクセス元はipsetで定義
public           ←publicゾーンも有効になっている
  interfaces: enp2s0

<domesticゾーンの設定を確認>

(実行結果の例)
domestic (active)      ←アクティブ(有効)になっている
  target: default
  icmp-block-inversion: no
  interfaces:
  sources: ipset:domestic   ←アクセス元はipsetで定義
  services: ssh           ←sshのサービスを許可
  ports:
  protocols:
  forward: no
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

<domesticゾーンに設定されているipsetの詳細を確認>

(実行結果の例)
1.0.16.0/20
1.0.64.0/18
1.1.64.0/18
…
(以下略)
   
このような形で、日本のIPアドレスが全て列記

最後に、自宅からなど日本国内から実際にSSHでアクセスできるか確認します。海外からの確認は難しいのですが、もしAWSをご利用の場合は、アクセス元がUS(アメリカ合衆国)になるので、動作確認ができると思います。

設定の確認は目視も必要ですが、実際にアクセスしてみて問題ないかを確認することも必要です。私もちゃんと設定できていると思っていても、ちょっとした見間違いや勘違いで、実際にアクセスすると出来ない事が良くあります。次で紹介する項目も含めてしっかり確認するようにしましょう!

海外からの攻撃が遮断されているか確認する

さて、前項でSSHは日本国内からのアクセスに限定したわけですが、ここでいくつか注意点があります。

<注意点1:publicゾーンのSSHの設定>

どうすればよい?CentOSのFirewallを無効・停止せず設定する方法で紹介している通り、初期設定のルールを無効にしていれば良いのですが、もしそちらを設定していなければ、標準でSSHはpublicゾーンで許可されていますので、今回の設定をしても通過してしまいます。domesticの設定を実施した後は、publicゾーンに同じルールが存在しないか確認しましょう。

<注意点2:ドロップログを出力する設定>

Firewallでブロックされたかどうかを確認するには、ドロップログを出力するように設定し、ログファイルでアクセスが拒否されているかを確認します。ドロップログを出力する設定は、

のコマンドで設定します。allの代わりに、unicast、broadcast、multicast、off というオプションもあって、broadcastやmulticastのログが多くて嫌な場合は、unicastにすれば良いです。

なお、上記のいずれも設定後は、以下のreloadコマンドを忘れずに!

これを実行すると、/var/log/messagesファイルにドロップされたログが出力されます。

<注意点3:IPアドレスのリストは日々更新されている>

日本のIPのリストをダウンロードしてきましたが、IPアドレスのリストは日々更新されています。日本のIPアドレスは2億個近くあるので、ピンポイントでこのリストから外れている、ということは滅多にないと思いますが、可能性としては0ではありません。定期的に最新のリストに更新するようにしましょう。自動で更新する方法を紹介しているサイトもあります。

私個人的には、半年 or 1年に1回程度更新すればよいのではないかと考えています。

HTTPでの利用が推奨されるケース

ここで一つ海外からのアクセスを制限し、日本国内からに限定した方がよいケースを、事例を用いて紹介します。それは、HTTP(HTTPS)のアクセスで、管理者サイトや明らかに日本からのみしか閲覧しないページなどです。

管理者サイトは、本来であれば、管理者がアクセスしうる固定IPアドレスを設定するのが望ましいですが、動的IPアドレスで変わってしまう場合もあるので、世界に開放するよりまだ安全な日本からのみ開放する、という考えになります。

次に、日本からのみしか閲覧しないページですが、例えば、国内で開催する検定試験やセミナーといった日本国内向けのサイトでは、海外からもアクセス可能にしておく理由は少ないと思います。そのようにある程度用途が限定できるサイトは、国内限定にした方がよりセキュアになります。

ただしこれにはデメリットもあり、検索サイトのロボットは基本的には海外からやってくるので、検索にヒットしないなどの弊害も考えられます。身内や仲間内にしか公開しないサイトであれば問題ないですね。

アドバイザー
アドバイザー

アクセス元を制限するとセキュアになる反面、グーグルにヒットしなくなるというデメリットもあります。これらが問題がないことを確認して設定するようにしましょう。

セキュアなサーバ構築はアクセス制限から

ここまで海外からのアクセスを制限し、日本国内からのみアクセス許可を設定する方法を述べてきました。基本的にアクセスしうるIPアドレスが少ないほど、安全にサーバを運用できますので、これをしっかり守って、セキュアなサーバ構築を実施ください。

私は、インターネット側にファイアウォールが存在していても、Linuxサーバ側でもfirewalldを有効にし、2重にアクセス制限を実施しています。

それぞれ同じポートが開いているので意味が無いように思われますが、イントラ側に悪いサーバ(ウィルスに感染したサーバ)がいる可能性もあります。また、何かの設定時に誤って開放してしまう場合もあると思います。その時に2重になっていれば、どちらかでブロックしてくれますので、私は設定しておいた方が良いと考えます。手間はかかりますが、是非設定を実施ください。

今回はここまでです。最後までお読みいただきありがとうございました。