我想阻止美国以外的所有子网.我制作了一个包含所有美国子网的脚本.除了我的清单,我想禁止或删除所有内容.有人能给我一个例子,告诉我如何开始拒绝一切吗?
这是-L的输出
Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ftp state NEW DROP icmp -- anywhere anywhere Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
这些都是规则
iptables --F iptables --policy INPUT DROP iptables --policy FORWARD DROP iptables --policy OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -p tcp -i eth0 --dport 21 -m state --state NEW -j ACCEPT iptables -A INPUT -p icmp -j DROP
为了清楚起见,使用这些规则,我仍然可以在没有子网列表的情况下连接到端口21.我想阻止所有子网,只打开美国境内的子网.
解决方法
如果数据包匹配’接受’,则立即接受.如果它与DROP匹配则立即丢弃.
听起来您只希望美国的主机能够连接到ftp.有几种方法可以实现这一目标.
制定许多像这样的复杂规则.
iptables -P INPUT DROP iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT --src 1.2.3.4/24 -p tcp -i eth0 --dport 21 -m state --state NEW -j ACCEPT iptables -A INPUT --src 4.5.6.7/12 -p tcp -i eth0 --dport 21 -m state --state NEW -j ACCEPT iptables -A INPUT --src 8.9.1.2/31 -p tcp -i eth0 --dport 21 -m state --state NEW -j ACCEPT
创建一个新的链,将所有流量发送到链,对所有美国子网使用RETURN,并在链中使用最终规则DROP其他所有内容.这应该是更好的方法,因为将进行较少的条件检查.
iptables -P INPUT DROP iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -N USNETS iptables -A USNETS -s 1.2.3.4/24 -j RETURN iptables -A USNETS -s 4.5.6.7/12 -j RETURN iptables -A USNETS -s 8.9.1.2/31 -j RETURN iptables -A USNETS -j DROP # drop everything that isnt in USNETS iptables -A INPUT -j USNETS # send everything to USNETS # PERMIT traffic that iptables -A INPUT -p tcp -i eth0 --dport 21 -m state --state NEW -j ACCEPT
通过使用单独的更改,您甚至可以在USNETS链中添加/删除内容,而无需在分配新地址空间时重置整个防火墙.我认真地质疑这个想法是否值得付出努力.外面的人都可以进入,他们只会使用代理.
你甚至可以反过来做,并在链中做所有的端口/服务.
iptables -P INPUT DROP iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -N SRVCS iptables -A SRVCS -p tcp -i eth0 --dport 21 -m state --state NEW -j RETURN iptables -A SRVCS -j DROP # drop everything that isnt in allowed SRVCS iptables -A INPUT -j SRVCS # send everything to SRVCS # PERMIT traffic that has been returned from SRVCS iptables -A INPUT --src 1.2.3.4/24 -j ACCEPT iptables -A INPUT --src 4.5.6.7/12 -j ACCEPT iptables -A INPUT --src 8.9.1.2/31 -j ACCEPT