0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【VirtualBox × firewalld】複数NIC環境でゾーンを使い分けるLinuxファイアウォール設定検証

Posted at

目的

VirtualBox上で複数のネットワークインタフェース(NIC)を持つLinux環境を構築し、
firewalld を用いて ゾーンごとに通信を制御 する検証を行いました。

今回は以下の目的を中心に構成しています。

  • firewalld の基本操作を理解する
  • NICごとにゾーン(internal / external / maintenance)を分離する
  • SSH や Web アクセスをゾーン単位で制御する
  • 検証環境を何度でもリセットできるようにスクリプト化する

検証環境構成(VirtualBox)

仮想マシン構成

項目 内容
ホストOS Windows 11
ゲストOS AlmaLinux 9
仮想マシン数 2台(vm1, vm2)
firewalld バージョン 1.3.4
Python 3.9.21

virtualBoxを使ったVMとネットワーク構成例

  • vm1 も vm2と同じ構成とした。
デバイス名 VirtualBoxのネットワーク種別 用途 firewalldゾーン
enp0s3 内部ネットワーク(intnet_ext) 外部システム提供向け通信 external
enp0s8 Host-Only ホストOSとの通信用 public
enp0s9 内部ネットワーク(intnet_maint) 保守回線用(SSH許可) maintenance

各デバイスとコネクション・接続プロファイルの紐づけ設定

1. NIC 状態確認
nmcli device status
ip link show
2. コネクション作成(interface-name は指定)
sudo nmcli con add type ethernet ifname enp0s3 con-name intnet_ext ipv4.addresses 10.0.10.1/24 ipv4.method manual
sudo nmcli con add type ethernet ifname enp0s9 con-name intnet_maint ipv4.addresses 10.0.20.1/24 ipv4.method manual
3. 接続プロファイルをデバイスに紐付け
sudo nmcli con mod intnet_ext connection.interface-name enp0s3
sudo nmcli con mod intnet_maint connection.interface-name enp0s9
4. 自動接続有効化
sudo nmcli con mod intnet_ext connection.autoconnect yes
sudo nmcli con mod intnet_maint connection.autoconnect yes
5. コネクション有効化
sudo nmcli con up intnet_ext
sudo nmcli con up intnet_maint
6. 接続確認
nmcli device status
ip a show enp0s3
ip a show enp0s9

firewalldのバージョン確認

firewall-cmd --version

または

sudo firewall-cmd --version

firewalld 初期設定手順

① firewalldの状態確認

sudo systemctl status firewalld
sudo firewall-cmd --state

② firewalldの有効化と自動起動設定

sudo systemctl start firewalld
sudo systemctl enable firewalld

③ 現在のゾーンと割り当て確認

sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all

検証用のゾーン設計

ゾーン名 対象NIC 用途 許可サービス
public enp0s3 外部システム向け http, https
internal enp0s8 内部ネットワーク ssh, cockpit
maintenance enp0s9 保守用 ssh のみ

ゾーン作成と割り当て

新しいゾーンの作成

sudo firewall-cmd --permanent --new-zone=internal
sudo firewall-cmd --permanent --new-zone=maintenance

NICをゾーンに割り当て

sudo firewall-cmd --permanent --zone=internal --add-interface=enp0s8
sudo firewall-cmd --permanent --zone=maintenance --add-interface=enp0s9

ゾーンごとのサービス許可

# maintenance では ssh のみ許可
sudo firewall-cmd --permanent --zone=maintenance --add-service=ssh

設定反映

sudo firewall-cmd --reload

動作確認

Pythonの簡易Webサーバ起動(vm1側)

cd ~
python3 -m http.server 8080

ポート許可(vm1)

sudo firewall-cmd --permanent --zone=internal --add-port=8080/tcp
sudo firewall-cmd --reload

接続確認(vm2側)

curl http://10.0.10.1:8080
※通信先のIPはfirewalld設定を行う検証用サーバに向けて実行する

HTMLレスポンスが返れば、通信成功です。


初期化スクリプト(再検証用)

実行方法:

sudo bash reset_firewalld.sh

検証結果まとめ

  • firewalld のゾーンを使うことで、NICごとにセキュリティポリシーを明確化できた
  • ssh は保守NICのみで許可し、他ゾーンからのアクセスを防止できた
  • Python簡易サーバを使って通信確認を行い、正しくポート制御できることを確認
  • 初期化スクリプトにより、再検証・再構築が容易になった

次のステップ

  • 各サーバのNIC構成・ポート設定を変数化した「汎用firewalldセットアップスクリプト」を作成
  • 設定状態を自動レポート化するスクリプトを追加(firewall-cmd --list-all-zones 整形出力)
  • GitHub Actionsなどを使って設定テストの自動化
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?