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

pfSenseで DMZ 4

2023年8月31日

メニューへ戻る

ソフトウェアルーター・ファイアウォールの pfSenseを使って DMZを作ってみます。
WEBプロキシサーバーとリバースプロキシサーバーを作ります。


pfSenseインストール」で pfSenseを使えるようにして、
pfSenseで DMZ 1」ではDMZ(非武装地帯)を作りたいなとネットワークのナンチャッテ設計をし、
pfSenseで DMZ 2」で、pfSenseの初期設定までやり、
pfSenseで DMZ 3」で、WEBサーバーとして IISを立ち上げました、

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

WEBプロキシとして squidを、リバースプロキシとして NGINXを利用したいと思います。
OSは慣れ親しんだ Ubuntu Server 22.04.3にします。

図の位置ではここです。
構成 2
どんどん大きくなってきました。

Ubuntu Server 22.04のインストールについては、
Ubuntu Linux Serverをインストール」と
Ubuntu Serverの初期設定」に書いています。

ただここでの作業順序の関係で、上の図の(ネットワーク上の)位置に置きますと、作業用のクライアントPCからの ssh接続がやや面倒になることもあり、一端 [VMnet0] に置いてサーバー環境として作り上げてから、[VMnet3]に持っていくことにします。
構成 3
図にするほどのものではなかったか…。

これから、NGIXNと squidをインストールするんですが、
NGiNXでリバースプロキシ」と
squidインストール」にそれぞれ書いています。

リバースプロキシを DNZに置くのは疑問がないですが、Webプロキシの squidを DMZに置く意味があるのかと問われると答えに窮してしまいます。

社内にマルウェアに感染した PCがあるとして、インターネットの怪しいサーバーに情報を送信することをできないようにしたいなって思って、社内からインターネットへは直接通信できないようにしようかなと思った次第です。
(httpと httpsは squid経由で抜けてしまいますが…)
構成 4
これも図にするほどのものではなかった。

ベストプラクティスになるのかはさておきで。


インストールします。

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に付け替えます。
VMware Workstation Playerの仮想マシン設定変更

結果こうなりました。
構成 2


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で プロキシサーバーを使えるようにしないといけません。

スタートメニューをクリックすると上に出てくる [⚙(歯車マーク) 設定] をクリックします。

[ネットワークとインターネット] をクリックします。
Windowsの設定

[手動プロキシセットアップ] が設定対象です。
[192.168.2.1] を除外しているのは、pfSenseの設定画面にアクセスする時はプロキシサーバーに行きたくないからです。
以下のようにしまして、保存を押します。
ネットワークの構成

Edgeで [https://subro.mokuren.ne.jp] にアクセスしてみましたけど、こうなってしまいました。
WEBアクセス


というわけで、今回もほとんど pfSenseに関係のないところのセットアップになっていますが、ネットワーク環境周りのテストってこういう風にするしかないんですよねぇ…。

pfSenseで DMZ 5」に続きます。


squidの日本語書籍を探しても、イカしかヒットしませんわ。
これでも食べて、酎ハイでも飲んで下さい。