更新日 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.