控制IP访问服务器,使用iptables

控制IP访问服务器,使用iptables

我想使用 linux 命令 iptables 来控制只允许同一子网 IP 访问服务器,我想做的是允许来自 10.168.1.0 的任何服务访问此服务器,能否建议我需要做的只是在服务器中运行以下命令,而无需执行其他操作?谢谢

/sbin/iptables -A INPUT -p tcp -s 10.168.1.0 -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -s 10.168.1.0 -j ACCEPT

答案1

我假设你的网络是 /24(如果不是,请在命令中更改 CIDR/网络掩码)

iptables -A INPUT -p tcp -s 10.168.1.0/24 -j ACCEPT
iptables -P INPUT DROP

第一个命令将允许来自 10.168.1.0/24 的所有 tcp 连接,第二个命令将设置 INPUT 的默认策略为 DROP(如果数据包与第一个规则不匹配,则将被丢弃)。

PS:这还将阻止任何传入的 UDP 数据包(包括 DNS 等)和来自外部的所有其他连接(例如,您将无法接收来自外部的数据)。建议还添加:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

这将允许您从服务器建立的连接返回数据包。

答案2

如果您想允许完整的子网,您必须指定该子网作为源。

此外,如果您想允许任何服务,您应该删除,-p tcp因为它只允许 TCP 协议。

然后,您将需要删除不需要的流量。

iptables -A INPUT -s 10.168.1.0/24 -j ACCEPT
iptables -P INPUT DROP

如果你将 iptables 设置为有状态的,那么你当然不需要OUTPUT链。在这种情况下,规则将是:

iptables -A INPUT -s 10.168.1.0/24 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP

OUTPUT如果由于某种原因,服务器必须发起与子网主机的连接,则需要使用链,但源 IP-s应该是您的服务器 IP 地址(但也可以省略),并且您可以指定目标以仅允许给定的子网:

iptables -A OUTPUT -s serverip -d 10.168.1.0/24 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# or
iptables -A OUTPUT -d 10.168.1.0/24 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# in both cases
iptables -P OUTPUT DROP

相关内容