CentOS7 でファイアウォールを設定する (firewalld)

はじめに

CentOS7 のファイアウォールのフィルタを、firewalld で設定します。

注意事項

コマンドはすべて root 権限での操作です。

目次

環境

  • VPS : さくらVPS 1G SSD
  • OS : CentOS 7.3

firewalld とは

CentOS7 から、ファイアウォールの設定が iptables を使用したものから、firewalld を使用するものに変更されました。firewalld は、iptables のラッパーで、iptables のルールを簡単に管理できるようにしています。

iptables と firewalld の違い

iptables と firewalld との違いは、以下のようになっています。

  • ゾーンとサービスによる設定
  • 既存のセッションや接続を停止することなく更新できる

firewalld の起動

CentOS7 では、firewalld がデフォルトでインストールされているため、以下のコマンドで開始します。

# systemctl start firewalld

サーバ起動時に、firewalld サービスが開始されるように設定します。

# systemctl enable firewalld

firewalld の設定

firewalld の設定は、firewall-cmd コマンドで行い、設定を永続化するためには --permanent オプションを付ける必要があります。コマンドには以下のようなものがあります。

再起動

firewalld を再起動します。

# firewall-cmd --reload

ゾーンについてのコマンド

デフォルトのゾーンを確認します。

# firewall-cmd --get-default-zone
public

デフォルトのゾーンを変更します。

# firewall-cmd --set-default-zone=internal
success

使用しているネットワークインターフェースを確認します。

# firewall-cmd --get-active-zones
public
  interfaces: eth0

指定したゾーンの設定を確認します。

# firewall-cmd --zone=public --list-all
public (active)
  target: default
  interfaces: eth0
  sources:
  services: dhcpv6-client http ssh
  ports:
  masquerade: no
  foward-ports:
  icmp-blocks:
  rich rules:

サービスについてのコマンド

使用可能なサービスの一覧を確認します。

# firewall-cmd --get-services
RH-Satellite-6 amanda-client …

public ゾーンに、https のサービスを追加します。

# firewall-cmd --zone=public --add-service=http --permanent

public ゾーンから、https のサービスを削除します。

# firewall-cmd --zone=public --remove-service=http --permanent

ポート・プロトコルについてのコマンド

public ゾーンの TCP ポートの 12345 番を許可します。

# firewall-cmd --zone=public --add-port=12345/tcp --permanent

public ゾーンの TCP ポートの 12345 番を拒否します。

# firewall-cmd --zone=public --remove-port=12345/tcp --permanent

同一サーバ内で、80 番ポートから 12345 番ポートへ、ポートフォワーディングを行ないます。

# firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=12345

リッチルールについてのコマンド

IP アドレスが 192.168.0.1 の IPv4 トラフィックを許可します。

# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" suorce address=192.168.0.1 accept'

IP アドレスが 192.168.0.2 で、ポートが 22 の IPv4 トラフィックを拒否します。

# firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" suorce address=192.168.0.2 port port=22 protocol=tcp jeject'

iptables を直接設定するコマンド

カスタムチェインを確認します。

# firewall-cmd --direct --get-all-chains

カスタムルールを確認します。

# firewall-cmd --direct --get-all-rules