🎃

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