Iptables

iptables 添加 ip、埠和 IP

  • January 14, 2020

現在我執行這個:

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命令將不同類型的元素放在同一個集合中。但是您可以使用不同的集合,每種類型一個(完整列表可通過 獲得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的意思是在查找集合中的匹配項時,使用源 IP 地址和數據包中的目標埠地址hash:ip,port

此外,ipset有一個特殊的集合list:set,由其他集合的列表組成。這不會改變使用ipset命令單獨填充集合的方式,但您可以這樣做:

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

並將之前的兩條iptables規則替換為以下一條:

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

這朝著您的目標邁進:這個單一的iptables規則將在有或沒有埠的 set 元素上正常工作,如ipset 中所述。

引用自:https://unix.stackexchange.com/questions/561964