ソフトウェアルーター・ファイアウォールの pfSenseを使って DMZを作ってみます。
WEBプロキシサーバーとリバースプロキシサーバーを作ります。
「pfSenseインストール」で pfSenseを使えるようにして、
「pfSenseで DMZ 1」ではDMZ(非武装地帯)を作りたいなとネットワークのナンチャッテ設計をし、
「pfSenseで DMZ 2」で、pfSenseの初期設定までやり、
「pfSenseで DMZ 3」で、WEBサーバーとして IISを立ち上げました、
現時点の環境はこんな感じです。
WEBプロキシとして squidを、リバースプロキシとして NGINXを利用したいと思います。
OSは慣れ親しんだ Ubuntu Server 22.04.3にします。
図の位置ではここです。
どんどん大きくなってきました。
Ubuntu Server 22.04のインストールについては、
「Ubuntu Linux Serverをインストール」と
「Ubuntu Serverの初期設定」に書いています。
ただここでの作業順序の関係で、上の図の(ネットワーク上の)位置に置きますと、作業用のクライアントPCからの ssh接続がやや面倒になることもあり、一端 [VMnet0] に置いてサーバー環境として作り上げてから、[VMnet3]に持っていくことにします。
図にするほどのものではなかったか…。
これから、NGIXNと squidをインストールするんですが、
「NGiNXでリバースプロキシ」と
「squidインストール」にそれぞれ書いています。
リバースプロキシを DNZに置くのは疑問がないですが、Webプロキシの squidを DMZに置く意味があるのかと問われると答えに窮してしまいます。
社内にマルウェアに感染した PCがあるとして、インターネットの怪しいサーバーに情報を送信することをできないようにしたいなって思って、社内からインターネットへは直接通信できないようにしようかなと思った次第です。
(httpと httpsは squid経由で抜けてしまいますが…)
これも図にするほどのものではなかった。
ベストプラクティスになるのかはさておきで。
インストールします。
subro@dmz:~$ sudo apt -y install nginx squid
〜〜〜 省略 〜〜〜
インストールできました。
NGINXのリバースプロキシ設定から。
[/etc/nginx/sites-available/default]ファイルを以下のように書き換えます。
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm;
server_name _;
location / {
proxy_pass http://192.168.2.100;
}
}
これでこの NGINXに WEBアクセスしてくると、NGINXが代行して [VMnet2]にある Windows Server 2022の IISにアクセスしてくれます。
([VMnet0]にいる今はまだ通信できません)
次は squidの設定です。
[/etc/squid/squid.conf]を以下のように書き換えます。
と言っても、コメント行を全部消して、ピンクの行を足しているだけです。
acl localnet src 0.0.0.1-0.255.255.255 # RFC 1122 "this" network (LAN)
acl localnet src 10.0.0.0/8 # RFC 1918 local private network (LAN)
acl localnet src 100.64.0.0/10 # RFC 6598 shared address space (CGN)
acl localnet src 169.254.0.0/16 # RFC 3927 link-local (directly plugged) machines
acl localnet src 172.16.0.0/12 # RFC 1918 local private network (LAN)
acl localnet src 192.168.0.0/16 # RFC 1918 local private network (LAN)
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
include /etc/squid/conf.d/*.conf
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 3128
coredump_dir /var/spool/squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern \/(Packages|Sources)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern \/Release(|\.gpg)$ 0 0% 0 refresh-ims
refresh_pattern \/InRelease$ 0 0% 0 refresh-ims
refresh_pattern \/(Translation-.*)(|\.bz2|\.gz|\.xz)$ 0 0% 0 refresh-ims
refresh_pattern . 0 20% 4320
squidの設定でセキュリティの縛りを強くできますが、ここの実験でアクセス制限が pfSenseの機能によるのか squidの機能によるのかを分かりやすくするため、squidの設定はなるべくデフォルトのままにしておきました。
これで [192.168.0.0/16] のネットワークからであれば [3128/tcp]にアクセスすれば、WEBアクセスを代行してくれます。
これで DMZ上のサーバーとしてはとりあえず動くでしょうから、ネットワークを付け替えましょう。
VMware Workstation Playerの仮想マシン設定画面で、VMnet3に付け替えます。
結果こうなりました。
IPアドレス周りの設定を [VMnet3] のものに変更します。
Ubuntu 22.04での IPアドレス変更の手順は「Ubuntu 22.04の固定IP変更」に書いています。
具体的には [/etc/netplan/00-installer-config.yaml]ファイルを以下のように書き換えました。
# This is the network config written by 'subiquity'
network:
ethernets:
ens32:
addresses:
- 192.168.3.200/24
nameservers:
addresses:
- 192.168.3.1 ← DNSサーバーは後で pfSenseにやってもらう予定です
search: []
routes:
- to: default
via: 192.168.3.1
version: 2
NGINXの設定変更・squidの設定変更・IPアドレス変更を有効にしないといけませんが、再起動後の動作も見たいのでマシンをリブートしてしまいます。
subro@dmz:~$ sudo reboot
再起動がおわりましたら、ちゃんと通信できないと思いますけど、NGINXのリバースプロキシを試してみます。
ローカルで curlコマンドを使いました。
subro@dmz:~$ curl localhost
全然帰ってきません。
pfSenseで [VMnet3] → [VMnet2] の http通信が遮断されているならこうなりますけど、どうかな…。
今度は squidのテストです。
こちらもダメだと思うけど…。
まず [VMnet2] にある Windows Server 2022で プロキシサーバーを使えるようにしないといけません。
スタートメニューをクリックすると上に出てくる [⚙(歯車マーク) 設定] をクリックします。
[ネットワークとインターネット] をクリックします。
[手動プロキシセットアップ] が設定対象です。
[192.168.2.1] を除外しているのは、pfSenseの設定画面にアクセスする時はプロキシサーバーに行きたくないからです。
以下のようにしまして、保存を押します。
Edgeで [https://subro.mokuren.ne.jp] にアクセスしてみましたけど、こうなってしまいました。
というわけで、今回もほとんど pfSenseに関係のないところのセットアップになっていますが、ネットワーク環境周りのテストってこういう風にするしかないんですよねぇ…。
「pfSenseで DMZ 5」に続きます。
squidの日本語書籍を探しても、イカしかヒットしませんわ。
これでも食べて、酎ハイでも飲んで下さい。