ソフトウェアルーター・ファイアウォールの pfSenseを使って DMZを作ってみます。
いよいよ pfSenseのファイアウォール設定をします。
「pfSenseインストール」で pfSenseを使えるようにして、
「pfSenseで DMZ 1」ではDMZ(非武装地帯)を作りたいなとネットワークのナンチャッテ設計をし、
「pfSenseで DMZ 2」で、pfSenseの初期設定までやり、
「pfSenseで DMZ 3」で、WEBサーバーとして IISを立ち上げ、
「pfSenseで DMZ 4」で、DMZ(にする予定のネットワーク)に WEBプロキシとリバースプロキシを立ち上げ、
「pfSenseで DMZ 5」で、お家の光ルーターに pfSenseへの静的ルートを設定しました。
現時点の環境はこんな感じです。
でもって、いよいよファイアウォールの設定をしていくんですが、pfsenseのファイアウォール設定のドキュメントは以下になります。
Firewall
ざーっと目を通して面白いと思ったのは以下のドキュメントです。
この会社のファイアウォールに対する基本姿勢が書いてあって、デフォルト設定の拠り所になっていますので読んでおくと設定時に理解が早いです。
Firewall Rule Best Practices
それからいくつかデフォルトで設定されているファイアウォール設定(rule)の説明も以下にありました。
Rule Methodology
これらを読んで、いくつかの事を知りました。
大・大・大基本は、
通信は全て遮断が基本!
必要なものだけ穴を開ける!
だそうですので、デフォルト設定もそうなっていれば、これから行う設定は「穴開け」になります。
pfSenseのファイアウォール設定とは、各ネットワークインターフェイスごとに行うものです。
中に入ってくるパケットをフィルタリングします(赤矢印)。
pfSenseでは通信は基本的にステートフルなものとみなして、通信元と通信先の紐付けテーブルを持つとのこと。
これにより返ってくるパケット(青矢印)のための穴開けは自動的にされるので考慮しなくて良いのだそうです。
それから pfSenseでは各ネットワークインターフェイスが全く平等な扱いではなく、[WAN] にはインターネットのように信用ならないネットワーク(Untrusted)を相手にするものと特別な位置づけで初期設定がされています。
これらが Ciscoなどのマジモンルーターと同じなのか、マジモンをイジったことのない私には分かりませんが、家庭用インターネットルーターでは当たり前の構造だとか。
(アメリカだけの話しかも知れませんけど)
では実践です。
Windows Server 2022の Edgeで [http://192.168.2.1] にアクセスして、pfSenseの webContiguratorにアクセスします。
ログインしたら、上のメニューで [Firewall] - [Rules] を選択します。
各ネットワークインターフェイスがタブになっていますね。
これは [WAN] に割り当てられているネットワークインターフェイス(ここでは [em0] )に入ってくるパケットに対しての設定です。
頭が「×」になってるのはブロックかリジェクト、要するに通さないことを表します。
基本が通さないのだからあえて通さない設定をするのは何でか?と思いますが、これから穴を明けて通す設定をした時に、これとの合わせ技になるという事だと理解しています。
通さない設定は通す設定よりも優先されるということですかね。
デフォルトで2つあります。
RFC 1918 networks | プライベートネットワークアドレスです。 [10.0.0.0/8] [172.16.0.0/12] [192.168.0.0/16] の 3つ。 |
Reserved Not assigned by IANA | Bogon Networksってものらしい。 IANAがインターネットのアドレスとして割り当ててないものらしく、 逆に言えばこんなアドレスからのアクセスは怪しいということ。 |
両方ともこれらのネットワークアドレスからはインターネット経由でアクセスしてこないはずと、どのような穴開けがあったとしてもカットしておいて問題なかろうということでしょう。
で、穴開けの設定は 1つも無しと。
[クライアント]から DMZ(VMnet3)にあるNGINX(リバースプロキシ)にアクセスしたいので穴開け設定を追加しましょう。
疑似環境なので [クライアント] が [192.168.1.0/24] にあるため、上のテーブルの [RFC 1918 networks] に相当してしまいますので、これを無効に変えます。
本当のインターネット相手ならいらない設定変更です。
[RFC 1918 networks]行の ⚙(歯車マーク)をクリックします。
[WAN] の設定画面になりますので一番下にスクロールして、
[Block private networks and loopback addresses] のチェックを外し、
Saveを押します。
変更を反映するためApply Changesを押します。
設定変更の度に、Save→Apply Changesの繰り返しになりますので、以降はこの作業についての記述は割愛します。
穴開け設定を追加しますが、↑ Add(一番上に追加)と↓ Add(一番下に追加)のボタンがあります。
上と下で優先度の違いがあるのか分かりませんでした。
今回は ↓ Addを押して下さい。
「どこからでも [192.168.3.200] 宛ての [80/tcp]行きパケットは通す」って感じです。
[WAN] の設定はこれで良いんではないでしょうか。
[LAN] の設定に行きます。
デフォルトで 3つ設定されていました。
Description | 内容 |
---|---|
Anti-Lockout Rule | webConfiguratorにアクセスさせるためのもの (消してはいけない) |
Default allow LAN to any rule | IPv4を何でも通す |
Default allow LAN IPv6 to any rule | IPv6を何でも通す |
内部からのインターネットアクセスがフリーダム過ぎるので制限します。
下の 2つは無効にしましょう。
右にある禁止(日本じゃ駐車禁止)マークをクリックすると無効にできます。
{VMnet2]のクライアントから [VMnet3]にある squidへのアクセスをしたいです。
「どこからでも [192.168.3.200] 宛ての [3128/tcp]行きパケットは通す」って感じです。
[LAN] の設定はこれで良いんではないでしょうか。
[OPT1](DMZ)の設定に行きます。
何も設定されていないので、一切の通信ができないはずです。
NGINX(リバースプロキシ)から [VMnet2]にある Windows Server 2022の IISにアクセスしたいです。(赤矢印)
squid(WEBプロキシ)からインターネットにアクセスしたいです。(青矢印)
赤矢印の方。
青矢印の方(その1 http)。
青矢印の方(その2 https)。
[OPT1](DMZ)の設定はこれで良いんではないでしょうか。
テストしてみましょう。
[クライアント] である Lubuntu 22.04.3の Firefoxで直接 [VMnet2] にある Windows Server 2022の IISにアクセスしてみます。
URLは [http://192.168.2.100] です。
pfSenseのファイアウォールで、[WAN] → [LAN] の穴開けがないので通らないはずです。
想定通りタイムアウトしました。
今度は [VMnet3](DMZ)にあるリバースプロキシの NGINXにアクセスしてみます。
こちらは通って、IISに繋がるはずです。
どうやら外部から内部のWEBサーバーを見る方の穴開けは OKの模様です。
次は内部から外部へのアクセス、[VMnet2] にある Windows Server 2022の Edgeからインターネットに WEBアクセスできるか見てみます。
このホームページ [https://subro.mokuren.ne.jp] を対象にしました。
ダメですね。
暫く調査してみて、DNSを参照できて無いんだろうという結論に至りました。
pfSenseはそれ自体が DNSサーバーとしての動くことができます。
(正しくは DNSリゾルバ・DNSフォワーダーになれる)
デフォルトだと DNSリゾルバとして動いているはずですのでその設定を確認してみます。
pfSenseのメニューから [Services] - [DNS Resolver] を選択します。
[Enable DNS resolver] にチェックが入っているので、動いているはずです。
う〜んと考えを巡らせてみて、そういや pfSenseに家庭内LANでの DNSサーバー(光ルーター)の IPアドレスを設定したことがない事に気付きました。
それじゃダメでしょうと。
pfSenseのメニューから [System] - [General setup] を選択します。
あぁ、入っていませんね…。
光ルーターのIP [192.168.1.1] を入れて、一応ドメイン名も入れ、一番下にあるSaveを押します。
これで pfSenseが DNSサーバーと同じ動きをしてくれるはずなんですが、pfSenseが提供する DNS機能へのアクセスもまたファイアウォールの穴開け対象なのでした。
squidが DNSサーバーを必要としますので、[OPT1] のファイアウォール設定で、DNSアクセスの穴開けをしましょう。
DNSですから、[Protocol] が [TCP/UDP] になっているのがポイントです。
また [Destination] は pfSense自体なので [This firewall (self)] を選択しています。
ここではやりませんが [LAN] の方にも必要なら設定しましょう。
改めて [https://subro.mokuren.ne.jp] にアクセスしました。
今度は OKのようです。
==========
以上、シリーズが 6までとかなり長くなりましたけど、どうにかやれました。
サーバーのお勉強の方法を紹介するホームページなのに、自分がお勉強しちゃってるって結果になってしまいました。テヘペロ
pfSenseをイジる過程でインターネットで調べものをしました結果、これまで私の頭の中にあったルーターの仕組みのイメージ(脳内画像)の誤りを修正できました。
本当に良いお勉強になりました。
今回は 1つのルータ/ファイアウォールから 3方に線が出ている構成になっていますが、お金のある環境ではルータ/ファイアウォールを 2つ使って DMZを作るケースの方が多いんじゃないでしょうか。
更には各々のルータ/ファイアウォールを 2台で冗長化している事がほとんどと思います。
psSenseはいずれの形にも対応できるもののようです。
これは pfSense+入りのハードウェアで、家庭か小規模オフィス用の商品ですね。
今回の [WAN][LAN][OPT1]構成まんまの機械で、ちょっと欲しくなってきてしまいました。
pfSenseを調べるうちに、海外には情報が多いけど日本にはあまり情報がないように思いました。
それ程最新のものではないようですが、日本でももっと売れても良いんではないでしょうか。
家庭用の光ルーターや Wifiルーターでも設定をキリキリと詰めればそこそこやれるようではあるので「pfSenseなんてイラネー」のかも知れませんが、非常に面白いブツであることは確かです。
ぜひイジってみることをオススメします。