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,まとめ
以上の手順を踏まえることで、ファイアウォールが稼働する。
最近のコメント