IP セットは、IP アドレス、ネットワーク範囲、MAC アドレス、ポート番号、およびネットワーク インターフェイス名のコレクションを格納したものです。 iptables ツールは、より効率的なルール マッチングのために IP セットを活用できます。たとえば、悪意があることがわかっているいくつかの IP アドレス範囲の 1 つから発信されたトラフィックをドロップしたいとします。 iptables で各範囲のルールを直接構成する代わりに、IP セットを作成し、iptables ルールでそのセットを参照できます。これにより、ルール セットが動的になり、構成が容易になります。ファイアウォールによって処理されるネットワーク識別子を追加または交換する必要があるときはいつでも、IP セットを変更するだけです。
ipset コマンドを使用すると、IP セットを作成および変更できます。最初に、セットの名前、保存方法、およびデータ型を次のように設定する必要があります。
# ipset create range_set hash:net
この場合、range_set は名前、hash は格納方法、net はデータ型です。次に、範囲をセットに追加できます:
# ipset add range_set 178.137.87.0/24 # ipset add range_set 46.148.22.0/24
次に、iptables を使用して、ソースがこのセットの範囲に一致するトラフィックをドロップするルールを構成します。
# iptables -I INPUT -m set --match-set range_set src -j DROP
または、宛先がセットに一致するトラフィックをドロップするには:
iptables -I OUTPUT -m set --match-set range_set dst -j DROP
構文
ipset コマンドの構文は次のとおりです。
# ipset [options] {command}
ネットワーク リストのブロック
1. ネットワークアドレスの新しい「セット」を作成することから始めます。これにより、「myset」という名前の「ネット」ネットワーク アドレスの新しい「ハッシュ」セットが作成されます。
# ipset create myset hash:net
または
# ipset -N myset nethash
2. ブロックしたい IP アドレスをセットに追加します。
# ipset add myset 14.144.0.0/12 # ipset add myset 27.8.0.0/13 # ipset add myset 58.16.0.0/15 # ipset add myset 1.1.1.0/24
3. 最後に、そのセット内のすべてのアドレスをブロックするように iptables を構成します。このコマンドは、「src」パケットで「DROP」またはブロックの場合、「-m」が ipset からの「myset」という名前のセットに一致するように「INPUT」チェーンの先頭にルールを追加します (–match-set)。
# iptables -I INPUT -m set --match-set myset src -j DROP
IP アドレスのリストをブロックする
1. IP アドレスの新しい「セット」を作成することから始めます。これにより、「myset-ip」という名前の「ip」アドレスの新しい「ハッシュ」セットが作成されます。
# ipset create myset-ip hash:ip
または
# ipset -N myset-ip iphash
2. ブロックしたい IP アドレスをセットに追加します。
# ipset add myset-ip 1.1.1.1 # ipset add myset-ip 2.2.2.2
3. 最後に、そのセット内のすべてのアドレスをブロックするように iptables を構成します。
# iptables -I INPUT -m set --match-set myset-ip src -j DROP
ipset を永続化する
作成した ipset はメモリに保存され、再起動すると消えます。 ipset を永続的にするには、次のことを行う必要があります:
1. 最初に ipset を /etc/ipset.conf に保存します :
# ipset save > /etc/ipset.conf
2. 次に、ipset.service を有効にします。これは、iptables ルールを復元するための iptables.service と同様に機能します。
その他のコマンド
1. セットを表示するには:
# ipset list
または
# ipset -L
2. 「myset」という名前のセットを削除するには:
# ipset destroy myset
または
# ipset -X myset
3. すべてのセットを削除するには:
# ipset destroy