如何使用 ipset 阻止某些協議?
問題是,我目前有 3 台虛擬測試機,Client1、ip
192.168.1.10
、Client2、ip192.168.2.20
和帶有 ip的路由器192.168.1.1
,並192.168.2.1
作為連接 Client1 和 Client2 的網關。在Router上,我
hash:ip,port
設置了,例如:
ipset add myset 192.168.2.20,tcp:80
ipset add myset 192.168.2.20,tcp:443
在Client2上,我設置了 nginx 來偵聽埠 80,並且我不希望Client1能夠通過埠 80 上的 tcp連接到Client2 ,在****路由器上我添加了一條規則:
iptables -A FORWARD -m set --match-set myset dst -j DROP
在Client1我執行
wget 192.168.2.20/index.html
並且由於我在Router上的 iptables 規則,Client1不應該能夠連接到Client2和 grabindex.html
,但是,它不起作用並且可以成功檢索文件。問題僅
hash:ip,port
在於 ipset 的設置類型。如果我選擇hash:ip
類型並將協議/埠部分移出 ipset 到 iptables,一切正常。但是,我需要完全使用 ipset 才能隨時交換阻止列表。我究竟做錯了什麼?所有 3 個虛擬機都在 Ubuntu 17.04 上執行,安裝最少,沒有 GUI。
多虧了這個評論,問題得到了解決: 我不得不使用(兩個dst
而 不是一個)
iptables -A FORWARD -m set --match-set myset dst -j DROP
iptables -A FORWARD -m set --match-set myset dst,dst -j DROP