iptablesの設定と設定の永続化

1,はじめに

引き続きConoHa VPSに新設したサーバーの設定の記事です。

本稿では、ファイアウォール「iptables」の導入と基本的な設定、サービスとして自動起動するようにすることの3点について記載します。

本稿の前提条件は下記の通りである。

  • 管理者権限を持つユーザーを使用していること
  • 異常事態が起きてもゲームをしたりして気分転換ができること(嘘)
  • Debian 9系
  • netfilter-persistentとiptables-persistentを用いてiptablesの設定の保持を実施して問題ないこと

2,ファイアウォールを導入する

(1)「iptables」の導入確認

下記のコマンドを実行し、ファイアウォール用のソフト「iptables」が導入されているか確認する(厳密に言うと、iptablesはファイアウォールではなく、linuxカーネルの通信制御を設定するソフトウェアらしい・・・?)。

iptables --version

すると、下記のような出力がでた。

root@TESTSPACE:~# iptables --version
 iptables v1.6.0

iptablesが導入されていることの確認ができた。

3,基本的な設定

(1)総論

今回構築しているサーバーは現状、SSH以外の通信を閉じて問題がない。

ならば、SSHで使用しているポート(22)以外の通信をすべて遮断しよう(ICMPなどの応答も排除する)。

(2)iptablesの設定

(A)既存設定の確認

いきなり設定を変更してもよいのだが、変更を加える前の状態を確認する。

下記のコマンドを使用しiptablesに設定されているフィルタリングルールを確認する。

 iptables -L

実行すると下記が出力された。

root@TESTSPACE:~# 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

あれま、何も設定されていないのね(初期状態だから当然なのだが)。

(B)設定ファイルをiptablesに反映するソフトウェアを導入する

iptablesの設定は、再起動をすると自動で初期値に戻る。

これは都合が悪い。割と困る。

こうした不都合に対処するために、iptablesの設定を設定ファイルから読み込み実施するソフトウェア「netfilter-persistent」と「iptables-persistent」の2つを使用する。

以下の手順でこのソフトウェを導入する。

apt-get install netfilter-persistent

実行すると下記が出力される。

root@TESTSPACE:/var/log# apt-get install netfilter-persistent
 Reading package lists… Done
 Building dependency tree
 Reading state information… Done
 Suggested packages:
   iptables-persistent
 The following NEW packages will be installed:
   netfilter-persistent
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
 Need to get 8,792 B of archives.
 After this operation, 36.9 kB of additional disk space will be used.
 Get:1 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 netfilter-persi                                                                                        stent all 1.0.4+nmu2 [8,792 B]
 Fetched 8,792 B in 0s (10.4 kB/s)
 Selecting previously unselected package netfilter-persistent.
 (Reading database … 25418 files and directories currently installed.)
 Preparing to unpack …/netfilter-persistent_1.0.4+nmu2_all.deb …
 Unpacking netfilter-persistent (1.0.4+nmu2) …
 Setting up netfilter-persistent (1.0.4+nmu2) …
 Created symlink /etc/systemd/system/multi-user.target.wants/netfilter-persistent                                                                                        .service → /lib/systemd/system/netfilter-persistent.service.
 update-rc.d: warning: start and stop actions are no longer supported; falling ba                                                                                        ck to defaults
 Processing triggers for systemd (232-25+deb9u8) …

netfilter-persistentのインストールが完了した。

次に、上記のソフトウェアを補佐するソフトウェア「iptables-persistent」のインストールを行う。

下記のコマンドを実行する。

apt-get install iptables-persistent

実行すると下記の出力が表示される。

root@TESTSPACE:/var/log# apt-get install iptables-persistent
 Reading package lists… Done
 Building dependency tree
 Reading state information… Done
 The following NEW packages will be installed:
   iptables-persistent
 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
 Need to get 10.7 kB of archives.
 After this operation, 43.0 kB of additional disk space will be used.
 Get:1 http://cdn-fastly.deb.debian.org/debian stretch/main amd64 iptables-persistent all 1.0.4+nmu2 [10.7 kB]
 Fetched 10.7 kB in 1s (8,180 B/s)
 Preconfiguring packages …
 Selecting previously unselected package iptables-persistent.
 (Reading database … 25429 files and directories currently installed.)
 Preparing to unpack …/iptables-persistent_1.0.4+nmu2_all.deb …
 Unpacking iptables-persistent (1.0.4+nmu2) …
 Setting up iptables-persistent (1.0.4+nmu2) …

以上の手順により、iptablesの設定を再起動後も初期化せず保持することが可能となった。

(C)iptablesの設定ファイル

上記(B)で導入したソフトにより、iptablesの設定ファイルが、「/etc/iptables」ディレクトリに作成される。

root@TESTSPACE:/etc/iptables# ls
 rules.v4  rules.v6

IPv4用とIPv6用のフィルタリングルール登録用ファイルが作成される。

今回は、IPv4用の設定を下記の通り行う。

(i)変更前の中身確認

設定変更を実施する前に、「/etc/iptables/rules.v4」の初期登録値を確認する。

root@TESTSPACE:/etc/iptables# cat /etc/iptables/rules.v4
 Generated by iptables-save v1.6.0 on Sun Jun 30 20:28:58 2019
 *filter
 :INPUT ACCEPT [579:58649]
 :FORWARD ACCEPT [0:0]
 :OUTPUT ACCEPT [494:133621]
 COMMIT
 Completed on Sun Jun 30 20:28:58 2019

特に何もフィルタリングルールは記載されていない。

(ii)バックアップの作成

rules.v4ファイルの設定値を変更するため、バックアップを作成する。

cp /etc/iptables/rules.v4 /etc/iptables/rules.v4.20190630
(iii)ファイアウォール登録値の記入

Vimなどのエディタを使用するか、SSHクライアントからのファイル転送機能を用いて、下記の内容を「rules.v4」ファイルに記載する。

*filter
 :INPUT DROP [0:0]
 :FORWARD DROP [0:0]
 :OUTPUT ACCEPT [0:0]
 -A INPUT -i lo -j ACCEPT
 -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
 -A INPUT -p icmp -j DROP
# Allow AAH connection(port:22)
 -A INPUT -p tcp --dport 22 -j ACCEPT
# https://help.sakura.ad.jp/hc/ja/articles/206208121-iptables%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95
# the packet of no-data will be reject
 -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# reject syn flood attack
 -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
# reject stealth scan
 -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
# all packet reject
 -A INPUT -p tcp -j REJECT --reject-with tcp-reset
 -A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
 -A INPUT -j REJECT --reject-with icmp-proto-unreachable
 COMMIT
(iv)記載内容の反映

まず、反映前を確認する。

root@TESTSPACE:/etc/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

次に、設定ファイル記載内容を反映する。

下記のコマンドを実行する。

netfilter-persistent reload

実行されると下記のような出力が出る。

root@TESTSPACE:/etc/iptables# netfilter-persistent 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
root@TESTSPACE :/etc/iptables#

設定が反映されたことを確認する。

root@TESTSPACE:/etc/iptables# iptables -L
 Chain INPUT (policy DROP)
 target     prot opt source               destination
 ACCEPT     all  --  anywhere             anywhere
 ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ES                                                                                        TABLISHED
 DROP       icmp --  anywhere             anywhere
 ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:22
 DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,                                                                                        RST,PSH,ACK,URG/NONE
 DROP       tcp  --  anywhere             anywhere             tcp flags:!FIN,SYN                                                                                        ,RST,ACK/SYN state NEW
 DROP       tcp  --  anywhere             anywhere             tcp flags:FIN,SYN,                                                                                        RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG
 REJECT     tcp  --  anywhere             anywhere             reject-with tcp-re                                                                                        set
 REJECT     udp  --  anywhere             anywhere             reject-with icmp-p                                                                                        ort-unreachable
 REJECT     all  --  anywhere             anywhere             reject-with icmp-p                                                                                        roto-unreachable
 Chain FORWARD (policy DROP)
 target     prot opt source               destination
 Chain OUTPUT (policy ACCEPT)
 target     prot opt source               destination
 root@TESTSPACE:/etc/iptables#

4,まとめ

以上の手順を踏まえることで、ファイアウォールが稼働する。

5,参考

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA