IPTables - 允许两个主机之间的通信,放弃其他一切

IPTables - 允许两个主机之间的通信,放弃其他一切

我有一个路由器,我想将其配置为阻止所有传出互联网的流量。据我了解,我需要丢弃转发的数据包。此外,我想允许内部 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 以及返回的流量被阻止。

你能指出我的脚本哪里错了吗?

答案1

FORWARD仅当服务器有问题时才使用队列是路由器,用于处理网络外部的传入/传出数据包;它用于阻止/接受网络外部数据包的路由(在路由器级别)。

为了在主机级别控制连接,通常使用INPUTOUTPUT队列,无论连接来自何处,因为它们不执行路由(例如,不执行 IP 转发)。

如果您确实希望本地网络中的一组计算机能够相互通信,而不是与 Internet 通信,那么最简单的方法就是不在这些计算机上定义网关。

如果您仍然需要这样做,iptables则必须INPUT在脚本中使用队列来代替FORWARD.

如果您主要担心的是进入互联网的流量,虽然我不喜欢给他们一个出去的网关,但您必须使用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 规则就足以锁定几台来自互联网的机器:

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(对于本地生成的数据包)。

相关内容