
集中型ファイアウォール制御は、iptablesを実行している複数のサーバーやロードバランサー上のファイアウォールを集中管理する方法を提供します。これにより、複数のサーバーに対して1つのコマンドで迅速に許可/ブロック/削除/検索などを行うことができます。 これらのサーバーにはssh経由でアクセスします。
IPv4とIPv6の両方をサポートします。
Debian 6.x / 7.x / 8.x / 9.x でテスト済みですが、他のディストリビューションでも動作するはずです。
IPv6の 'precheck'、'protected'、'findip' 機能を使用するには、'netaddr' Python モジュールがインストールされている必要があります。IPv4 は IP のバイナリ形式でプレフィックスマッチングを使用するため、これは不要です。
Debian: apt-get install python3-netaddr
iptables に加えて 'ipset' を使用する方が効率的です。Ipset は iptables が参照して使用できるリストを管理するために使用できます。これにより動作が高速になり、リストの操作もより柔軟で、このスクリプトを使用する推奨方法です。
Debian: apt-get install ipset
このスクリプトは指定されたサーバーに ssh で接続するため、使用前にそのアクセスが可能である必要があります。
初回は例の設定ファイル cfc.cfg-example を cfc.cfg にコピーしてください。
設定ファイルでは以下の設定が可能です:
action: ルール追加時のアクションを設定、デフォルト: DROP
checkaggrbin: checkaggr.py スクリプトへのパス、デフォルト: ./checkaggr.py
cleanupconfirmation: clean コマンド実行前に確認を求める、cron 使用時は false に設定、デフォルト: true
date: ファイアウォールコメントの日付形式を設定、デフォルト: $(date +%d%m%Y) -> 22062016
dateipset: ipset ファイアウォールコメントの日付形式を設定、一部機能の破損を防ぐためデフォルトのままにしておく、デフォルト: $(date +%Y%m%d) -> 20160622
ipsetname: IPSET リスト名を設定、デフォルト: blockedips
ipsetservers: iptables の代わりに IPSET を使用するサーバーを設定、デフォルト: "lvs05.example.com lvs06.example.com"
fwchain: 追加/削除/検索するファイアウォールチェーン名、デフォルト: INPUT
masklimit: 追加可能な IP 範囲の最大サイズ、デフォルト: /21
precheck: 追加しようとしている IP がすでにファイアウォールに存在するか、より大きな範囲の一部であるかをチェック、IPv6 の大規模ファイアウォールでは少し遅い場合があります(サーバーあたり500のIP範囲を検索するのに約25秒)、デフォルト: true
protected: 追加された保護範囲を有効にする、デフォルト: true
protectedranges: 'add' 機能から除外される IP 範囲、通常はローカルネットワークが所有する範囲、デフォルト: "172.16.0.0/12 10.0.0.0/8 192.168.0.0/16"
pythonbin: 使用する Python バイナリの場所、デフォルト: /usr/bin/python3
servers: iptables のみを使用するサーバーを設定、デフォルト: "lvs01.example.com lvs02.example.com lvs03.example.com lvs04.example.com"
IPv6 関数は '6' サフィックスでマークされています
以下のコマンドで IP/範囲を入力する場合は、CIDR 表記で行ってください。これにより検証され、それ以外は受け付けられません。
add:
cfc.sh add n.n.n.n/NN '<optional comment>'
cfc6.sh add <IPv6_address_range> '<optional comment>'
指定された IP(範囲)を、そのソースからのすべてのトラフィックに対して設定されたアクションでファイアウォールに追加します。デフォルトで現在の日付のコメントが付与され、シングルクォートを使用してオプションのコメントを追加し、その範囲の理由や所有者を例として記述できます。後でそのコメントで検索することもできます。
addstring:
cfc.sh addstring <protocol>:<dport> <string>
cfc6.sh addstring <protocol>:<dport> <string>
特定のプロトコルと宛先ポートに対して iptables に文字列ブロックを追加します。実用的な例としては、複数の Web サーバー宛ての User-Agent をブロックする場合、文字列 Firefox/28.0 を含む tcp ポート 80 宛ての接続をブロックします。つまり、tcp ポート 80 に向けてその文字列に一致するすべての受信トラフィックがブロックされます:
cfc.sh addstring tcp:80 'Firefox/28.0'
注意:文字列が十分に具体的でない場合、重大な結果を招く可能性があります!
clean:
cfc.sh clean <older_than_number_of_days>
n 日より古いすべての CFC ファイアウォールルールをクリーンアップします。デフォルトの日付形式に依存することに注意してください!そのため、日付形式をカスタマイズした場合は、'clean' セクションでスクリプトを調整する必要があります。
del:
cfc.sh del n.n.n.n/NN
cfc6.sh del <IPv6_address_range>
指定された IP(範囲)/ルールをファイアウォールから削除します
delstring:
cfc.sh delstring <protocol>:<dport> <string>
cfc6.sh delstring <protocol>:<dport> <string>
特定のプロトコルと宛先ポートに対する iptables の文字列ブロックを削除します。
find:
cfc.sh find <string>
cfc6.sh find <string>
指定された文字列(大文字小文字を区別しない)でファイアウォールを検索します。これは IP/範囲/コメントの一部である可能性があります。
findip:
cfc.sh findip n.n.n.n/NN
cfc6.sh findip <IPv6_address_range>
指定された IP(範囲)が既存の追加ルールの一部であるかどうかをファイアウォールで検索します。IPv6 の大規模ファイアウォールでは少し遅い場合があります(サーバーあたり500のIP範囲を検索するのに約25秒)。IPv4 は代わりに IP のバイナリ形式でプレフィックスマッチングを使用するため、約500%高速です。これは precheck および protectedranges 機能でも使用されます。
ipsethostinit:
cfc.sh ipsethostinit <server_name>
cfc6.sh ipsethostinit <server_name>
指定されたホストに IPSET リストと、cfc.cfg で定義されたパラメータを使用してそれを参照する iptables ルールを追加します。これはファイアウォールルールを追加する前に一度だけ行う必要があります。
last:
cfc.sh last <nr_of_most_recent_rules>
cfc6.sh last <nr_of_most_recent_rules>
ファイアウォールに追加された最新の 件のエントリを表示します