Linux
IPTables - 允許兩台主機之間的通信,放棄一切
我有一個路由器,我想將其配置為阻止所有傳出到 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
隊列僅在伺服器問題是路由器時使用,用於處理網路外部的傳入/傳出數據包;它用於阻止/接受網路外部數據包的路由(在路由器級別)。為了在主機級別控制連接,您通常使用
INPUT
或OUTPUT
排隊,無論連接來自何處,因為它們不執行路由(例如,不執行 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(用於本地生成的數據包)。