Centos
白名單 IP 地址 centos 6.10
如何允許特定 IP 地址到 iptables 中的 dport?例如:我有 2 個客戶端,第一個客戶端的 IP 地址是 182.3.3.1,第二個是 202.4.5.6,我有一個埠,比如說 2222。我想要的是,只有這些 IP 地址可以訪問埠 2222。
我寫了這個規則:
iptables -A INPUT -p tcp ! -s 182.3.3.1 --dport 2222 -j REJECT iptables -A INPUT -p tcp ! -s 202.4.5.6 --dport 2222 -j REJECT
發生的情況是只有一個地址可以訪問,而另一個被阻止。怎麼了 ?
iptables 處理規則的方式是:抓取一個數據包並嘗試將其與規則集進行匹配,從上到下。如果規則匹配,則執行它並停止進一步處理(特定情況除外,例如目標是另一個鏈、LOG、RETURN 等)。
每個鏈也有一個 DEFAULT 策略(預設情況下它的 ACCEPT),這就是不匹配任何規則的數據包所發生的情況。
現在,如果你有兩個這樣的規則:
iptables -A INPUT -p tcp ! -s 182.3.3.1 --dport 2222 -j REJECT iptables -A INPUT -p tcp ! -s 202.4.5.6 --dport 2222 -j REJECT
如果您從 IP 182.3.3.1 訪問,則第一個規則匹配並被應用(什麼都不做,並且該規則由鏈 DEFAULT 策略處理,我認為是 ACCEPT)。在第二種情況下,如果 IP 是 202.4.5.6,則第一個規則也匹配並應用(通過拒絕訪問)。
你可能想要的是這樣的(不要只是在你的系統上輸入這些規則,否則你會把自己鎖在外面!):
iptables -P DROP INPUT # Changes the INPUT Chain default policy to DROP iptables -A INPUT -p tcp -s 182.3.3.1 --dport 2222 -j ACCEPT # Allows the access of IP 182.3.3.1 iptables -A INPUT -p tcp -s 202.4.5.6 --dport 2222 -j ACCEPT # Allows the access of IP 202.4.5.6
請理解,通過使用這些規則,您需要更新您的規則集以允許訪問其他服務(例如允許您自己訪問伺服器上的 SSH 和其他服務,因此建議不要將自己鎖定在伺服器之外)。