web-dev-qa-db-ja.com

iptablesはip、port、さらにIPを追加します

今私はこれを実行します:

create blockipset hash:ip
add blockipset 192.168.1.5 -exist
add blockipset 192.168.3.115 -exist

Iptablesとipsetがip、port、ipをブロックすることは可能ですか?たとえば、リストには次のものが含まれます。

192.168.1.5
192.168.3.115
192.168.1.55,80
192.168.1.53,22
1
Jess Brown

ipsetコマンドを使用して、異なるタイプの要素を同じセットに入れることはできません。ただし、タイプごとに1つずつ、異なるセットを使用できます(ipset helpで利用可能な完全なリスト):

hash:ip
hash:ip,port

例えば:

ipset create blocklistip hash:ip
ipset create blocklistipport hash:ip,port

ipset add blocklistip 192.0.2.3
ipset add blocklistipport 192.0.2.2,80
ipset add blocklistipport 192.0.2.3,udp:53

上記のように、デフォルトでは、特に明記されていない限り、ポートのプロトコルはTCP)です(UDPの場合はudp:、SCTPの場合はsctp:など)。

ここで、スクリプトは、取得した要素のタイプをチェックして、どのipsetに追加するかを知る必要があります。ここでの簡単な例は、ファイル,からリストを読み取りながら、blocklist.txtをチェックしてどこに配置するかを確認することです。

while read -r element; do
    if echo $element|grep -q ,; then
        ipset add blocklistipport $element
    else
        ipset add blocklistip $element
    fi
done < blocklist.txt

また、たとえば次のようにして、リスト内のすべてをブロックできます。

iptables -A INPUT -m set --match-set blocklistip src -j DROP
iptables -A INPUT -m set --match-set blocklistipport src,dst -j DROP

上記のsrc,dstは、hash:ip,portセットで一致するものを探すときに、パケットの宛先ポートアドレスに沿って送信元IPアドレスを使用することを意味します。

また、ipsetには、他のセットのリストで構成される特別なセットlist:setがあります。これにより、ipsetコマンドを使用してセットに個別にデータを入力する方法は変わりませんが、次のようにすることができます。

ipset create blocklist list:set
ipset add blocklist blocklistip
ipset add blocklist blocklistipport

前の2つのiptablesルールを以下のルールのみに置き換えます。

iptables -A INPUT -m set --match-set blocklist src,dst -j DROP

これはあなたの目標に向かっています:この単一のiptablesルールは、ポートの有無にかかわらず、set要素で正しく機能します ipsetに記載されています =。

1
A.B