我有一个 VPS,用于托管一个 Wordpress 网站,我想限制该网站的访问。最终目标是将 SSH 访问限制为两个 IP,并限制除下面规则中指定的端口之外的所有入站。它们似乎在重新启动服务器(reboot 命令)时没有保存。规则似乎在运行后适用,但在服务器重新启动后不适用。我已验证它们正在写入/etc/sysconfig/iptables
。以下是我在控制台中添加到文件的内容:
iptables -F; iptables -X; iptables -Z
iptables -A INPUT -s X.X.X.X -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s X.X.X.X -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -p udp --dport 123 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables-save > /etc/sysconfig/iptables
实际写的内容如下:
# Generated by iptables-save v1.4.7 on Wed Nov 30 16:01:17 2016
*mangle
:PREROUTING ACCEPT [572:59036]
:INPUT ACCEPT [572:59036]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [486:358945]
:POSTROUTING ACCEPT [483:358793]
-A PREROUTING -p tcp -m tcp --sport 110 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p udp -m udp --sport 110 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p tcp -m tcp --sport 1110 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p udp -m udp --sport 1110 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p tcp -m tcp --sport 465 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p udp -m udp --sport 465 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p tcp -m tcp --sport 993 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p udp -m udp --sport 993 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p tcp -m tcp --sport 995 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p udp -m udp --sport 995 -j TOS --set-tos 0x04/0xff
-A PREROUTING -p tcp -m tcp --sport 20 -j TOS --set-tos 0x08/0xff
-A PREROUTING -p udp -m udp --sport 20 -j TOS --set-tos 0x08/0xff
-A PREROUTING -p tcp -m tcp --sport 21 -j TOS --set-tos 0x08/0xff
-A PREROUTING -p udp -m udp --sport 21 -j TOS --set-tos 0x08/0xff
-A PREROUTING -p tcp -m tcp --sport 22 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p udp -m udp --sport 22 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p tcp -m tcp --sport 25 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p udp -m udp --sport 25 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p tcp -m tcp --sport 53 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p udp -m udp --sport 53 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p tcp -m tcp --sport 80 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p udp -m udp --sport 80 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p tcp -m tcp --sport 443 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p udp -m udp --sport 443 -j TOS --set-tos 0x10/0xff
-A PREROUTING -p tcp -m tcp --sport 512:65535 -j TOS --set-tos 0x00/0xff
-A PREROUTING -p udp -m udp --sport 512:65535 -j TOS --set-tos 0x00/0xff
-A POSTROUTING -p tcp -m tcp --dport 110 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p udp -m udp --dport 110 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p tcp -m tcp --dport 1110 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p udp -m udp --dport 1110 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p tcp -m tcp --dport 465 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p udp -m udp --dport 465 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p tcp -m tcp --dport 993 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p udp -m udp --dport 993 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p tcp -m tcp --dport 995 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p udp -m udp --dport 995 -j TOS --set-tos 0x04/0xff
-A POSTROUTING -p tcp -m tcp --dport 20 -j TOS --set-tos 0x08/0xff
-A POSTROUTING -p udp -m udp --dport 20 -j TOS --set-tos 0x08/0xff
-A POSTROUTING -p tcp -m tcp --dport 21 -j TOS --set-tos 0x08/0xff
-A POSTROUTING -p udp -m udp --dport 21 -j TOS --set-tos 0x08/0xff
-A POSTROUTING -p tcp -m tcp --dport 22 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p udp -m udp --dport 22 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p tcp -m tcp --dport 25 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p udp -m udp --dport 25 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p tcp -m tcp --dport 53 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p udp -m udp --dport 53 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p tcp -m tcp --dport 80 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p udp -m udp --dport 80 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p tcp -m tcp --dport 443 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p udp -m udp --dport 443 -j TOS --set-tos 0x10/0xff
-A POSTROUTING -p tcp -m tcp --dport 512:65535 -j TOS --set-tos 0x00/0xff
-A POSTROUTING -p udp -m udp --dport 512:65535 -j TOS --set-tos 0x00/0xff
COMMIT
# Completed on Wed Nov 30 16:01:17 2016
# Generated by iptables-save v1.4.7 on Wed Nov 30 16:01:17 2016
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s X.X.X.X/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -s X.X.X.X/32 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p udp -m udp --dport 123 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
COMMIT
# Completed on Wed Nov 30 16:01:17 2016
似乎 mangle 被附加在过滤器之前。这有什么区别吗?
输出iptables -L -v -n
如下:
Chain INPUT (policy DROP 37 packets, 1951 bytes)
pkts bytes target prot opt in out source destination
1029 86325 ACCEPT tcp -- * * X.X.X.X 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- * * X.X.X.X 0.0.0.0/0 tcp dpt:22
632 316K ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
85 40646 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 128 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:443
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:123
9 678 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
2 100 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 1529 packets, 484K bytes)
pkts bytes target prot opt in out source destination
如果我重新启动服务(但不是整个服务器),service iptables restart
所有内容都会保留,规则似乎仍然有效。但是,如果我使用 重新启动服务器reboot
,/etc/sysconfig/iptables 中的所有内容仍然存在,但是 的输出iptables -L -v -n
现在非常不同,有数千行。我的规则似乎也不再适用,尽管文件中的所有内容看起来仍然相同。
我相信运行级别也设置得适当:
[root@s1 ~]# chkconfig --list iptables
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
所以,我的问题是:1. 为什么服务器重启后规则不适用,尽管它们在服务重启后适用并且似乎保持不变?我怎样才能让它们适用?2. iptables 文件中的 mangle 部分有区别吗?在这种情况下是否需要它?3. 为什么重启后输出不同iptables -L -v -n
?它似乎只在服务器重启后发生变化,而不是在服务重启后发生变化。
非常感谢任何想法和帮助。
答案1
听起来好像有另一个防火墙正在运行。检查是否有任何防火墙服务(如 Shorewall、UFW 等),或者是否有任何其他服务(如 Webmin)干扰您的规则设置。
答案2
我对 Unix 还不是很熟悉,但就我而言,我发现将 iptables 规则创建到一个文件中然后从以下位置运行它很有趣:
/etc/网络/接口