更新日 2019/08/08 18:12

記事

DebianのサーバにFW設定をする方法を説明します。

Debianではiptablesを使用します。iptablesの設定永続化には iptables-persistent というパッケージを追加でインストールします。

前提

  • Debian9 を最小構成でインストールしていて、事前の iptables の設定は何もない状態とします。
  • ここでは22(ssh)+80(http)+PINGのみ通す設定を想定します。実際のサーバ構築ではネットワーク設計等に従って設定内容を調整します。
  • ipv6 は使用しないとします

iptablesの設定状況確認

まだ設定がなく、すべて許可の状態とします。

# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

# ip6tables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

 

iptablesの設定追加

ループバックインタフェース、22番ポート、80番ポート、PING以外はドロップするように設定します。

# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -j ACCEPT
# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
# iptables -A INPUT -J DROP
# iptables -A FORWARD -j DROP
# iptables -P FORWARD DROP
# iptables -P INPUT DROP

ipv6は使用しないので、DROPにしてしまいます。

# ip6tables -P INPUT DROP
# ip6tables -P FORWARD DROP

ここで通信を確認します。

 

iptables-persistentのインストール

iptablesを設定後、その設定がサーバ再起動後も自動で反映されるようにするため、iptables-persistent パッケージを追加します。

# apt install iptables-persistent

今のメモリ上の iptables 設定を書き出すかどうか、IPv4とIPv6でそれぞれ質問されます。先ほどの設定を保存しますので、どちらもYesと答えます。

Save current IPv4 rules?  Yes

Save current IPv4 rules?  Yes

もしくは、後でnetfilter-persistantコマンドで保存します。

# netfilter-persistant save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables save
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables save

設定は /etc/iptables/ ディレクトリに保存されます。

設定のリロードの確認もnetfilter-persistantコマンドを使います。

# netfilter-persistant reload
run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start

netfilter-persistent がサーバ起動時に立ち上がるかどうかは、systemctl コマンドでステータス確認します。enabledとなっていれば自動起動します。

# systemctl status netfilter-persistent
● netfilter-persistent.service - netfilter persistent configuration
   Loaded: loaded (/lib/systemd/system/netfilter-persistent.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sun 2019-07-14 02:25:05 JST; 3 weeks 4 days ago
 Main PID: 387 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/netfilter-persistent.service

Jul 14 02:25:05 fdevkit-strage systemd[1]: Starting netfilter persistent configuration...
Jul 14 02:25:05 fdevkit-strage netfilter-persistent[387]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/15-ip4tables start
Jul 14 02:25:05 fdevkit-strage netfilter-persistent[387]: run-parts: executing /usr/share/netfilter-persistent/plugins.d/25-ip6tables start
Jul 14 02:25:05 fdevkit-strage systemd[1]: Started netfilter persistent configuration.