Linux

IPTables - 允許兩台主機之間的通信,放棄一切

  • March 17, 2017

我有一個路由器,我想將其配置為阻止所有傳出到 Internet 的流量。據我了解,我需要丟棄轉發的數據包。此外,我想允許內部 LAN 中的一台機器和幾台其他機器之間的流量。

做嘗試以下:

IPT="/sbin/iptables"

LOCAL_CONTROLLER="192.168.1.2"
SUBNET="192.168.1."
MACHINE_IPS="100 101 102 103 104"

for MACHINE in ${MACHINE_IPS}; do
   $IPT -A FORWARD -s $LOCAL_CONTROLLER -j ACCEPT
   $IPT -A FORWARD -s $SUBNET$MACHINE -m state --state ESTABLISHED,RELATED -j ACCEPT
   $IPT -A FORWARD -s $SUBNET$MACHINE -d $LOCAL_CONTROLLER -j ACCEPT 
   $IPT -A FORWARD -s $SUBNET$MACHINE -j DROP
done

不幸的是,這並沒有像我預期的那樣工作,並且從 192.168.1.2 到 192.168.1.103 和返回的流量被阻止。

你能指出我的腳本哪裡錯了嗎?

FORWARD隊列僅在伺服器問題是路由器時使用,用於處理網路外部的傳入/傳出數據包;它用於阻止/接受網路外部數據包的路由(在路由器級別)。

為了在主機級別控制連接,您通常使用INPUTOUTPUT排隊,無論連接來自何處,因為它們不執行路由(例如,不執行 IP 轉發)。

如果您真的希望本地網路中的一組機器相互通信,而不是與 Internet 通信,那麼最簡單的方法就是不在這些機器上定義網關。

如果您仍然需要處理,則iptables必須在腳本中使用INPUT隊列來代替FORWARD.

如果您主要擔心的是進入 Internet 的流量,而我不喜歡給他們一個網關出去,您必須使用OUTPUT本地機器中的隊列。

如:

iptables -A OUTPUT -d 192.168.1.0/24 -j ACCEPT
iptables -A OUTPUT -j DROP

(192.168.1.0/24 -> 192.168.1 網路中的所有機器)

請注意,如果您通過 ssh 從另一個網路訪問,您將有效地使用這些規則將自己鎖定在外。

然而,如果你的路由器是一個 linux 機器,寫成 FORWARD 規則來鎖定幾台機器與 Internet 的連接可能就足夠了:

iptables -A FORWARD -s 192.168.1.10 -j DROP
iptables -A FORWARD -s 192.168.1.11 -J DROP

來自man iptables

INPUT(用於發往本地套接字的數據包)

FORWARD(用於通過盒子路由的數據包)

OUTPUT(用於本地生成的數據包)。

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