Centos

白名單 IP 地址 centos 6.10

  • April 14, 2019

如何允許特定 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 和其他服務,因此建議不要將自己鎖定在伺服器之外)。

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