我想用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
我假设您的networking是/ 24(如果没有,请在命令中更改CIDR /networking掩码)
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等)和来自外部的所有其他连接(例如,您将无法从外部接收数据)。 build议还要加上:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
这将允许从服务器build立的连接返回数据包。
如果你想允许一个完整的子网,你必须指定子网作为源。
另外,如果你想允许任何服务,你应该删除-p tcp因为它只允许TCP协议。
那么,你将需要放弃不必要的stream量。
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