サーバエンジニアの構築めも

Linux関連を中心としたサーバの構築記録

[CentOS 7] firewalld

CentOS7のファイアウォール機能の実装としては、これまで通りiptablesを利用しているが、iptablesの設定はiptablesサービスの代わりにfirewalldサービスを利用して行う。
firewalldサービスの代わりに、これまで通りiptablesサービスを利用してiptablesの設定をすることも可能。

iptablesの稼働状況の確認

iptablesサービスとfirewalldサービスは併用できないため。
iptables/ip6tablesサービスが稼働している場合は停止する。

# systemctl status iptables
iptables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
# systemctl status ip6tables
ip6tables.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

firewalldサービスの起動設定と稼働状態の確認

# systemctl status firewalld.service
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Wed 2016-01-06 15:26:22 JST; 1h 1min ago
 Main PID: 612 (firewalld)
   CGroup: /system.slice/firewalld.service
           `-612 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid

稼働状態については以下のコマンドでも確認できる

# firewall-cmd --state
running

現在の設定の確認

# firewall-cmd --list-all-zones
block
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

dmz
  interfaces:
  sources:
  services: ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

drop
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

external
  interfaces:
  sources:
  services: ssh
  ports:
  masquerade: yes
  forward-ports:
  icmp-blocks:
  rich rules:

home
  interfaces:
  sources:
  services: dhcpv6-client ipp-client mdns samba-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

internal
  interfaces:
  sources:
  services: dhcpv6-client ipp-client mdns samba-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

public (default, active)
  interfaces: ens32
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

trusted
  interfaces:
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

work
  interfaces:
  sources:
  services: dhcpv6-client ipp-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

アクティブな設定のみ確認

# firewall-cmd --list-all
public (default, active)
  interfaces: ens32
  sources:
  services: dhcpv6-client ssh
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:
  • デフォルトでは、「dhcpv6-client」と「ssh」サービスのみが許可された「public」ゾーンがインターフェースに適用されている。
  • 外部へのトラフィックはすべて許可されている。

設定変更

デフォルトの設定ではすべての送信元からのSSHが許可されているが、特定の送信元からのみ許可するように変更する。

# firewall-cmd --permanent --zone=public --remove-service=ssh
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="22" accept"
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.2.0/24" port protocol="tcp" port="22" accept"
# firewall-cmd --reload
# firewall-cmd --list-all
public (default, active)
  interfaces: ens32
  sources:
  services: dhcpv6-client
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:
        rule family="ipv4" source address="192.168.1.0/24" port port="22" protocol="tcp" accept
        rule family="ipv4" source address="192.168.2.0/24" port port="22" protocol="tcp" accept
  • 「--permanent」オプションを指定することで再起動後も設定が有効になる。
  • 「--add-rich-rule」オプションを利用することで指定したソースIPアドレスからのみに限定するなど、きめ細かい設定を行うことが可能になる。