Linuxのファイアウォール設定

[2014-07] 新規作成。[2022-03] CentOS Stream 9, openSUSE 15.4 設定例。

Linuxでファイアウォールを設定する方法。

Fedora 18までは, ファイアウォールは, NetfilterとIPTablesの組み合わせで設定していました。また, GUIは system-config-firewall でした。

Fedora 19 & CentOS 7 からは, firewalld を使うようになっています。裏では, iptables toolが使われています。

firewalld

iptablesは、設定が宣言的でなく, さまざまなプログラムから設定を自動的に変更するのが難しい。

そこで, ファイアウォールを抽象化し, また、外部からAPIで設定変更できるようになっています。

内部で iptables を使っていますが, iptablesサービスとは併用できません。もし iptablesサービスが有効になっていた場合は, あらかじめ止める必要があります。

(2014.7) GUIでの設定は, firewall-config コマンドを使う。パッケージは firewall-config パッケージ。マンマや。

実際の設定例

[2022-03]

CentOS 7 で iptables から代わった. iptables コマンドもまだ現役。CentOS Stream 9 では, iptables の設定ファイル /etc/sysconfig/iptables はない

次のポートのみ開ける。

サービス ポート番号
ssh 22
http 80
https 443
smtp 25 これはメールサーバ間. 認証なし
smtp over ssl 465
dns tcp 53, udp 53
imap 143 これは開けなくてよい。
imap over ssl 993

設定ファイルは /etc/firewalld/zones/public.xml. 開けるサービスだけを書いていけばOK.

HTML/XML
[RAW]
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <zone>
  3. <short>Public</short>
  4. <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  5. <service name="ssh"/>
  6. <service name="dns"/>
  7. <service name="http"/>
  8. <service name="https"/>
  9. <!-- SSL/TLS -> 993 (imaps), STARTTLS -> 143 (imap) -->
  10. <service name="imaps"/>
  11. <!-- メールサーバ間.
  12. See https://www.infraexpert.com/study/tcpip18.html
  13. SSL/TLS -> 465 (smtps), STARTTLS -> 587 (smtp-submission) -->
  14. <service name="smtp"/>
  15. <service name="smtps"/>
  16. <forward/>
  17. </zone>

再起動。

# systemctl restart firewalld

動作の確認。

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: dns http https imaps smtp smtps ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

iptables

以前のiptablesサービスを使う場合は, firewalldサービスは停止しておかなければならない。

設定ファイルは /etc/sysconfig/iptables です。例えば、次のように書きます。

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT

# SSHは通す
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

SSH デーモン

リモートシェルのSSH。設定ファイルは /etc/ssh/sshd_config です。