iptablesまたはfirewalldの設定

カテゴリ:ファイヤーウォール

ファイヤーウォール機能は CentOS 6 までは iptables、CentOS 7 以降は firewalld がデフォルトとなっています。
そのため、この記事では、iptables と firewalld の両方の各手順を併記していきます。

ファイヤーウォールの設定を書き換える

一般的にファイヤーウォールはホワイトリスト方式で設定するのがセオリーです。
そのため、iptablesではINPUTとFORWARDのデフォルトアクションはDROPにし、以下のように特定のポート、状態のみを受け付けるように設定します。

tcp dpt:20(ftp data)
tcp dpt:21(ftp)
tcp dpt:22(ssh)
tcp dpt:25(smtp)
tcp dpt:80(http)
tcp dpt:110(pop3)
tcp dpt:443(https)
tcp dpt:465(urd)
tcp dpt:587(submission)
tcp dpt:993(imaps)
tcp dpt:995(pop3s)
tcp dpt:10000(webmin)
tcp dpts:60000:60030(ftp passive mode)
state RELATED,ESTABLISHED

現在の設定のバックアップ

念のため現在の設定をバックアップしておきます。
※デフォルト設定の場合はバックアップは不要です。

1. ファイヤーウォールを停止します。

iptablesの場合:

# service iptables stop

firewalldの場合:

# systemctl stop firewalld

2. 設定ファイルをバックアップします。

iptablesの場合:

# cp /etc/sysconfig/iptables ~/

firewalldの場合:

# cp -R /etc/firewalld/zones/ ~/

3. ファイヤーウォールを開始します。

iptablesの場合:

# service iptables start

firewalldの場合:

# systemctl start firewalld

ファイヤーウォール設定の追加

以下のコマンドを実行して、ファイヤーウォールの設定を書き換えます。

iptablesの場合:

iptables -F INPUT
iptables -A INPUT -i lo -p tcp -m tcp -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 20 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 465 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 587 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 993 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 995 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 10000 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 60000:60030 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -F FORWARD
iptables -F OUTPUT

firewalldの場合:

firewall-cmd --add-port=20/tcp --zone=public --permanent
firewall-cmd --add-port=21/tcp --zone=public --permanent
firewall-cmd --add-port=22/tcp --zone=public --permanent
firewall-cmd --add-port=25/tcp --zone=public --permanent
firewall-cmd --add-port=80/tcp --zone=public --permanent
firewall-cmd --add-port=110/tcp --zone=public --permanent
firewall-cmd --add-port=443/tcp --zone=public --permanent
firewall-cmd --add-port=465/tcp --zone=public --permanent
firewall-cmd --add-port=587/tcp --zone=public --permanent
firewall-cmd --add-port=993/tcp --zone=public --permanent
firewall-cmd --add-port=995/tcp --zone=public --permanent
firewall-cmd --add-port=10000/tcp --zone=public --permanent
firewall-cmd --add-port=60000-60030/tcp --zone=public --permanent

Note firewalld ではネットワークインターフェースにゾーンを割り当て、そのゾーン単位で設定を行います。public ゾーン(デフォルト)は公共の場所(パブリックエリア)での使用に適しています。
public ゾーンは初期設定では着信は dhcpv6-clientssh サービスのみが許可されており、それ以外はブロックします。許可したいポートを --add-port オプション、対象のゾーンを --zone オプションで指定して追加します。また、--permanent オプションを付与すると設定が恒久的に保持されます。

設定の再読込を行います。

iptablesの場合:

# iptables-save > /etc/sysconfig/iptables
# service iptables reload

firewalldの場合:

# firewall-cmd --reload

結果:

iptablesの場合:

# iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:20
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:25
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:110
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:465
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:587
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:993
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:995
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:10000
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpts:60000:60030
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED

Chain FORWARD (policy DROP)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

firewalldの場合:

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources:
  services: ssh dhcpv6-client
  ports: 20/tcp 21/tcp 22/tcp 25/tcp 80/tcp 110/tcp 443/tcp 465/tcp 587/tcp 993/tcp 995/tcp 10000/tcp 60000-60030/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

設定のバックアップとリストア

iptablesの場合

iptables の設定は、iptables-save でバックアップ、iptables-restore でリストアする事ができます。

バックアップ

iptables_backファイルとしてバックアップ:

# iptables-save > iptables_back

リストア

iptables_backファイルをリストア:

# iptables-restore < iptables_back

リストアした設定をシステムの起動時(iptablesの開始時)に反映させる場合は、以下のコマンドで、現在の設定を /etc/sysconfig/iptables に保存します。
※既存の iptables の設定ファイルを上書きします。

# iptables-save > /etc/sysconfig/iptables

firewalldの場合

firewalld のデフォルト設定は /usr/lib/firewalld/zones 内に配置されています。

# ls -la /usr/lib/firewalld/zones
合計 36
drwxr-xr-x. 2 root root 163  1月  1  2019 .
drwxr-xr-x. 8 root root  98  1月  1  2019 ..
-rw-r--r--. 1 root root 299 10月 31  2018 block.xml
-rw-r--r--. 1 root root 293 10月 31  2018 dmz.xml
-rw-r--r--. 1 root root 291 10月 31  2018 drop.xml
-rw-r--r--. 1 root root 304 10月 31  2018 external.xml
-rw-r--r--. 1 root root 369 10月 31  2018 home.xml
-rw-r--r--. 1 root root 384 10月 31  2018 internal.xml
-rw-r--r--. 1 root root 315 10月 31  2018 public.xml
-rw-r--r--. 1 root root 162 10月 31  2018 trusted.xml
-rw-r--r--. 1 root root 311 10月 31  2018 work.xml

そして、--permanent オプションを付与して設定した内容は、/etc/firewalld/zones/ 配下に保存されます。例えば public ゾーンの場合は、public.xml というファイル名で保存されます。

/etc/firewalld/zones/public.xml

Note /etc/firewalld/zones/ 内の設定はデフォルト設定よりも優先されます。

バックアップ

/etc/firewalld/zones/ ディレクトリをコピーします。

# cp -R /etc/firewalld/zones/ ~/

リストア

バックアップした zones ディレクトリ内のファイルを /etc/firewalld/zones/ 内にコピーし、firewalld をリロードします。

# \cp -f ~/zones/* /etc/firewalld/zones/
# firewall-cmd --reload

firewalldの設定を初期化する

/etc/firewalld/zones/ 配下の設定を削除して、firewalld をリロードします。
※この場合デフォルト設定のみが読み込まれます。

# rm -fr /etc/firewalld/zones/*
# firewall-cmd --reload

公開日時: 2014年07月21日  11:14:49

本格的なスキルを身につける

Linux/ITエンジニアとしてのスキルを身につけるにはLPI-Japanアカデミック認定校リナックスアカデミーがおすすめですよ。

ファイヤーウォールに戻る

「ファイヤーウォール」に関する他の手順

「ファイヤーウォール」に関する他の手順はありません。

「ファイヤーウォール」に関するTips

「ファイヤーウォール」に関するTipsはありません。

このページのトップに戻る