お金をかけずにサーバーの勉強をしよう

pfSenseで DMZ 6

2023年9月1日

メニューへ戻る

ソフトウェアルーター・ファイアウォールの 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への静的ルートを設定しました。

現時点の環境はこんな感じです。
構成 1


でもって、いよいよファイアウォールの設定をしていくんですが、pfsenseのファイアウォール設定のドキュメントは以下になります。
Firewall

ざーっと目を通して面白いと思ったのは以下のドキュメントです。
この会社のファイアウォールに対する基本姿勢が書いてあって、デフォルト設定の拠り所になっていますので読んでおくと設定時に理解が早いです。
Firewall Rule Best Practices

それからいくつかデフォルトで設定されているファイアウォール設定(rule)の説明も以下にありました。
Rule Methodology

これらを読んで、いくつかの事を知りました。
大・大・大基本は、

通信は全て遮断が基本!
必要なものだけ穴を開ける!


だそうですので、デフォルト設定もそうなっていれば、これから行う設定は「穴開け」になります。

pfSenseのファイアウォール設定とは、各ネットワークインターフェイスごとに行うものです。
中に入ってくるパケットをフィルタリングします(赤矢印)。
ファイアウォール設定 1

pfSenseでは通信は基本的にステートフルなものとみなして、通信元と通信先の紐付けテーブルを持つとのこと。
これにより返ってくるパケット(青矢印)のための穴開けは自動的にされるので考慮しなくて良いのだそうです。
ファイアウォール設定 2

それから pfSenseでは各ネットワークインターフェイスが全く平等な扱いではなく、[WAN] にはインターネットのように信用ならないネットワーク(Untrusted)を相手にするものと特別な位置づけで初期設定がされています。

これらが Ciscoなどのマジモンルーターと同じなのか、マジモンをイジったことのない私には分かりませんが、家庭用インターネットルーターでは当たり前の構造だとか。
(アメリカだけの話しかも知れませんけど)


では実践です。
Windows Server 2022の Edgeで [http://192.168.2.1] にアクセスして、pfSenseの webContiguratorにアクセスします。

ログインしたら、上のメニューで [Firewall] - [Rules] を選択します。
pfSense ダッシュボード

各ネットワークインターフェイスがタブになっていますね。
これは [WAN] に割り当てられているネットワークインターフェイス(ここでは [em0] )に入ってくるパケットに対しての設定です。
頭が「×」になってるのはブロックかリジェクト、要するに通さないことを表します。
pfSense [WAN]のファイアウォールルール 1
基本が通さないのだからあえて通さない設定をするのは何でか?と思いますが、これから穴を明けて通す設定をした時に、これとの合わせ技になるという事だと理解しています。
通さない設定は通す設定よりも優先されるということですかね。

デフォルトで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(リバースプロキシ)にアクセスしたいので穴開け設定を追加しましょう。
構成 2

疑似環境なので [クライアント] が [192.168.1.0/24] にあるため、上のテーブルの [RFC 1918 networks] に相当してしまいますので、これを無効に変えます。
本当のインターネット相手ならいらない設定変更です。

[RFC 1918 networks]行の ⚙(歯車マーク)をクリックします。
pfSense [WAN]のファイアウォールルール 1

[WAN] の設定画面になりますので一番下にスクロールして、
[Block private networks and loopback addresses] のチェックを外し、
Saveを押します。
pfSense [WAN]のファイアウォールルール 2

変更を反映するためApply Changesを押します。
pfSense [WAN]のファイアウォールルール 3

設定変更の度に、SaveApply Changesの繰り返しになりますので、以降はこの作業についての記述は割愛します。

穴開け設定を追加しますが、↑ Add(一番上に追加)と↓ Add(一番下に追加)のボタンがあります。
上と下で優先度の違いがあるのか分かりませんでした。
今回は ↓ Addを押して下さい。
pfSense [WAN]のファイアウォールルール 4

「どこからでも [192.168.3.200] 宛ての [80/tcp]行きパケットは通す」って感じです。
pfSense [WAN]のファイアウォールルール 5

[WAN] の設定はこれで良いんではないでしょうか。
pfSense [WAN]のファイアウォールルール 6


[LAN] の設定に行きます。
pfSense [LAN]のファイアウォールルール 1

デフォルトで 3つ設定されていました。

Description内容
Anti-Lockout RulewebConfiguratorにアクセスさせるためのもの
(消してはいけない)
Default allow LAN to any ruleIPv4を何でも通す
Default allow LAN IPv6 to any ruleIPv6を何でも通す

内部からのインターネットアクセスがフリーダム過ぎるので制限します。
下の 2つは無効にしましょう。
右にある禁止(日本じゃ駐車禁止)マークをクリックすると無効にできます。
pfSense [WAN]のファイアウォールルール 2

{VMnet2]のクライアントから [VMnet3]にある squidへのアクセスをしたいです。
構成 3

「どこからでも [192.168.3.200] 宛ての [3128/tcp]行きパケットは通す」って感じです。
pfSense [WAN]のファイアウォールルール 3

[LAN] の設定はこれで良いんではないでしょうか。
pfSense [WAN]のファイアウォールルール 4


[OPT1](DMZ)の設定に行きます。
pfSense [OPT1]のファイアウォールルール
何も設定されていないので、一切の通信ができないはずです。

NGINX(リバースプロキシ)から [VMnet2]にある Windows Server 2022の IISにアクセスしたいです。(赤矢印)
squid(WEBプロキシ)からインターネットにアクセスしたいです。(青矢印)
構成 4

赤矢印の方。
pfSense [OPT1]のファイアウォールルール 1

青矢印の方(その1 http)。
pfSense [OPT1]のファイアウォールルール 2

青矢印の方(その2 https)。
pfSense [OPT1]のファイアウォールルール 3

[OPT1](DMZ)の設定はこれで良いんではないでしょうか。
pfSense [OPT1]のファイアウォールルール 4


テストしてみましょう。

[クライアント] である Lubuntu 22.04.3の Firefoxで直接 [VMnet2] にある Windows Server 2022の IISにアクセスしてみます。
URLは [http://192.168.2.100] です。
pfSenseのファイアウォールで、[WAN] → [LAN] の穴開けがないので通らないはずです。
テスト 1
想定通りタイムアウトしました。

今度は [VMnet3](DMZ)にあるリバースプロキシの NGINXにアクセスしてみます。
こちらは通って、IISに繋がるはずです。
テスト 2

どうやら外部から内部のWEBサーバーを見る方の穴開けは OKの模様です。

次は内部から外部へのアクセス、[VMnet2] にある Windows Server 2022の Edgeからインターネットに WEBアクセスできるか見てみます。
このホームページ [https://subro.mokuren.ne.jp] を対象にしました。
テスト 3
ダメですね。

暫く調査してみて、DNSを参照できて無いんだろうという結論に至りました。

pfSenseはそれ自体が DNSサーバーとしての動くことができます。
(正しくは DNSリゾルバ・DNSフォワーダーになれる)

デフォルトだと DNSリゾルバとして動いているはずですのでその設定を確認してみます。

pfSenseのメニューから [Services] - [DNS Resolver] を選択します。
pfSenseの DNSリゾルバ設定 1

[Enable DNS resolver] にチェックが入っているので、動いているはずです。
pfSenseの DNSリゾルバ設定 2

う〜んと考えを巡らせてみて、そういや pfSenseに家庭内LANでの DNSサーバー(光ルーター)の IPアドレスを設定したことがない事に気付きました。
それじゃダメでしょうと。

pfSenseのメニューから [System] - [General setup] を選択します。
pfSenseの DNSリゾルバ設定 3

あぁ、入っていませんね…。
pfSenseの DNSリゾルバ設定 4

光ルーターのIP [192.168.1.1] を入れて、一応ドメイン名も入れ、一番下にあるSaveを押します。
pfSenseの DNSリゾルバ設定 5

これで pfSenseが DNSサーバーと同じ動きをしてくれるはずなんですが、pfSenseが提供する DNS機能へのアクセスもまたファイアウォールの穴開け対象なのでした。

squidが DNSサーバーを必要としますので、[OPT1] のファイアウォール設定で、DNSアクセスの穴開けをしましょう。
DNSですから、[Protocol] が [TCP/UDP] になっているのがポイントです。
また [Destination] は pfSense自体なので [This firewall (self)] を選択しています。
pfSenseの DNSリゾルバ設定 6
ここではやりませんが [LAN] の方にも必要なら設定しましょう。

改めて [https://subro.mokuren.ne.jp] にアクセスしました。
今度は OKのようです。
テスト 4


==========

以上、シリーズが 6までとかなり長くなりましたけど、どうにかやれました。

サーバーのお勉強の方法を紹介するホームページなのに、自分がお勉強しちゃってるって結果になってしまいました。テヘペロ

pfSenseをイジる過程でインターネットで調べものをしました結果、これまで私の頭の中にあったルーターの仕組みのイメージ(脳内画像)の誤りを修正できました。
本当に良いお勉強になりました。


今回は 1つのルータ/ファイアウォールから 3方に線が出ている構成になっていますが、お金のある環境ではルータ/ファイアウォールを 2つ使って DMZを作るケースの方が多いんじゃないでしょうか。
更には各々のルータ/ファイアウォールを 2台で冗長化している事がほとんどと思います。

psSenseはいずれの形にも対応できるもののようです。


これは pfSense+入りのハードウェアで、家庭か小規模オフィス用の商品ですね。
今回の [WAN][LAN][OPT1]構成まんまの機械で、ちょっと欲しくなってきてしまいました。


pfSenseを調べるうちに、海外には情報が多いけど日本にはあまり情報がないように思いました。
それ程最新のものではないようですが、日本でももっと売れても良いんではないでしょうか。

家庭用の光ルーターや Wifiルーターでも設定をキリキリと詰めればそこそこやれるようではあるので「pfSenseなんてイラネー」のかも知れませんが、非常に面白いブツであることは確かです。
ぜひイジってみることをオススメします。