今私はこれを実行します:
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
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に記載されています =。