🎃
firewalldについて(Linux)
はじめに
firewallとは、外部からの不正アクセスやサイバー攻撃から内部ネットワークを保護するためのセキュリティ機能です。IPアドレス、ポート番号、プロトコル、サービスなどの条件に基づいて、通信を許可または拒否するルールを設定することで、ネットワークトラフィックを制御します。
※基本コマンド:firewall-cmd
※設定には原則root権限が必要
1.firewallが現在動作しているか確認
$ sudo firewall-cmd --state
running
# firewallが起動している
$ sudo firewall-cmd --state
not running
# firewallが起動していない
$ systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; preset: enabled)
Drop-In: /usr/lib/systemd/system/service.d
└─10-timeout-abort.conf
Active: active (running) since Tue 2025-06-03 11:05:54 JST; 3h 20min ago
# systemdでも確認できる
2.firewallの起動
$ sudo systemctl start firewalld
3.アクティブなゾーンを表示
$ sudo firewall-cmd --list-<オプション>
# オプションに応じた情報を表示
例)<all>で全て表示
$ sudo firewall-cmd --list-all
FedoraServer (default, active)
target: default
ingress-priority: 0
egress-priority: 0
icmp-block-inversion: no
interfaces: ens160 #ネットワークIF'ens160'で適用
sources:
services: cockpit dhcpv6-client #許可されたサービス
ports:
protocols:
forward: yes #パケットの転送を許可
masquerade: no #IPマスカレード(NAT変換)は無効
forward-ports:
source-ports:
icmp-blocks:
rich rules:
4.リッチルールの追加
$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="<ipアドレス>" service="<サービス>" accept'
# --permanent : 再起動後も設定を保持するかどうかを決めるオプション
# rule family="ipv4" : ルールをIPv4に対して適用(IPv6に適用させるなら別途設定が必要)
# source address="<ipアドレス>" : xxx.xxx.xxx.xxx/24のようにCIDRでも指定できる
例)"192.168.1.0/24"からのssh通信を許可する設定
$ sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" service name="ssh" accept'
例)railsアプリ用に3000番ポートの通信を許可したい時
$ sudo firewall-cmd --permanent --zone=FedoraServer --add-rich-rule='rule family="ipv4" source address="192.168.0.0/24" port port="3000" protocol="tcp" accept'
$ sudo firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="<ipアドレス>" service="<サービス>" accept'
# --remove-rich-rule='~'で設定したリッチルールを削除できる
5.設定の反映
$ sudo firewall-cmd --reload
# 設定したfirewall設定を読み込む
Discussion