Iptables
iptables 添加 ip、埠和 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
您不能使用該
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 中所述。