以前、GeoIPを使用して特定の国を制限または許可する方法を学びましたが、この記事では、iptablesを備えたipsetモジュールを使用して大きなIP範囲をブロックする方法について説明します。 IPsetは、Linuxカーネル内でIPセットと呼ばれるフレームワークを管理するために使用されるコマンドラインベースのユーティリティです。 IPセットは、IPアドレス、ネットワーク、(TCP / UDP)ポート番号、MACアドレス、インターフェイス名、またはそれらの組み合わせを何らかの方法で格納できます。これにより、エントリをセットと照合する際の電光石火の速度が保証されます。 これは、iptables Linuxファイアウォール用の連想アプリケーションであり、ルールをすばやく簡単に設定して、一連のIPアドレスをブロックできます。 ここでは、ipsetモジュールとiptablesを使用して、Linuxベースのマシンで広範囲のIPアドレスをブロックする方法を説明します。
システムの更新
まず、ソフトウェアパッケージを最新の状態に保つために、Linuxマシンのパッケージをアップグレードする必要があります。 システムをアップグレードするには、次のように実行されていることを確認する必要があります sudo またはrootユーザー。 に切り替えるには sudo またはrootアクセスの場合、次のコマンドを実行します。
$ sudo -s
ルートに入ると、システムの更新とアップグレードに進みます。
Debianベースのシステム
# apt update && apt upgrade
Redhatベースのシステム
# yum update
IPsetのインストール
UbuntuやDebianなどのほとんどのLinuxディストリビューションには、最近ipsetがプリインストールされています。 ただし、Centosなどの一部のディストリビューションにはプリインストールされていないため、それらにインストールする必要があります。 実行しているディストリビューションに応じて、次のコマンドを実行してインストールできます。
Debianベースのシステム
# apt install ipset
Redhatベースのシステム
# yum install ipset
IPセットの作成
これで、マシンにipsetがインストールされたので、IPセットの作成に進みます。 ここでは、ブロックまたは制限するネットワークサブネットを含むipsetを作成する必要があります。 したがって、最初に、IPセットに追加するネットワークサブネットのリストを取得する必要があります。 最新のネットワークサブネットを取得するために、最も人気のあるサイトの1つを使用します 国のIPブロック からサブネットのリストを取得できます 国の選択 サイトのページ。 ここでは、テスト目的で中国のいくつかのネットワークサブネットを選択しました。
1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.0.32.0/19
1.1.0.0/24
1.1.2.0/23
1.10.8.0/23
1.202.0.0/15
5.10.68.240/29
5.10.70.40/30
5.10.72.16/29
この記事でブロックするネットワークサブネットのサンプルを次に示しますが、実際には、膨大な数のサブネットがあります。 したがって、任意のスクリプト/プログラミング言語を使用して、次のようにコマンドのリストを生成します。
# ipset create countryblock nethash
# ipset add countryblock 1.0.1.0/24
# ipset add countryblock 1.0.2.0/23
# ipset add countryblock 1.0.8.0/21
# ipset add countryblock 1.1.0.0/24
# ipset add countryblock 1.1.2.0/23
# ipset add countryblock 1.10.8.0/23
# ipset add countryblock 1.202.0.0/15
# ipset add countryblock 5.10.68.240/29
# ipset add countryblock 5.10.70.40/30
# ipset add countryblock 5.10.72.16/29
IPセットの適用
これで、IPセットの準備ができたので、これらのIPセットを適用して、iptablesでipsetモジュールを使用してブロックします。
# iptables -A INPUT -m set --match-set countryblock src -j DROP
上記のコマンドは、countryblockと呼ばれる上記で生成されたセットのサブネットによって定義されたIP範囲から発信されたトラフィックをブロックします。 そのため、そこにリストされているすべてのIPがブロックされます。
ルールを永続的に適用する
構成とルールをテストする準備ができたら、再起動のたびにルールが適用されるように、変更を永続的にすることができます。 そのためには、ファイアウォールコントローラーに対応する次のコマンドを実行する必要があります。
Debianベースのシステム
# ipset save > /etc/ipset.up.rules
# iptables-save > /etc/iptables/rules.v4
上記のコマンドを実行してルールを保存したら、次の行を追加して、再起動するたびにルールをロードします。 /etc/rc.local。
ipset restore < /etc/ipset.up.rules
iptables-restore < /etc/iptables/rules.v4
RHELベースのシステム
#ipset save > /etc/ipset.up.rules
# iptables-save > /etc/sysconfig/iptables
ipsetとiptablesの両方のルールを保存したら、Debianの場合と同様に復元コマンドを追加します。 次のコマンドを内部に追加するだけです /etc/rc.local ファイル。
ipset restore < /etc/ipset.up.rules
iptables-restore < /etc/sysconfig/iptables
このようにして、iptablesでipsetモジュールを使用してipsの特定のブロックをブロックできます。 必要に応じて適用できるように、さまざまな国のIPセットを作成できます。 このような方法は、特定の国または地域から発信される特定のトラフィックをブロックする必要があるが、必要なIP範囲を許可する必要がある場合に非常に効率的です。 これらのためのファイアウォールとiptablesモジュールはたくさんありますが、それは非常に簡単で、速く、そして使いやすいです。 したがって、質問、提案、フィードバックがある場合は、下のコメントボックスに記入してください。 ありがとう ! 楽しみ :-)