我的VPS上的防火墙似乎阻止我的网站发送电子邮件。 工作正常,直到上个月底。 我的托pipe服务提供商(Webfusion)已经无用了。
我可以发送电子邮件,如果我打开input端口32768-65535,但不是如果这些端口closures。 为什么会这样?
我在我的防火墙中有以下规则( 注意,我排除了仅限于我的IP的规则,例如ssh等):
# sudo iptables -L Chain INPUT (policy DROP) target prot opt source destination VZ_INPUT all -- anywhere anywhere Chain FORWARD (policy DROP) target prot opt source destination VZ_FORWARD all -- anywhere anywhere Chain OUTPUT (policy DROP) target prot opt source destination VZ_OUTPUT all -- anywhere anywhere Chain VZ_FORWARD (1 references) target prot opt source destination Chain VZ_INPUT (1 references) target prot opt source destination ACCEPT tcp -- anywhere anywhere tcp dpt:www ACCEPT tcp -- anywhere anywhere tcp dpt:https ACCEPT tcp -- anywhere anywhere tcp dpt:smtp ACCEPT tcp -- anywhere anywhere tcp dpt:ssmtp ACCEPT tcp -- anywhere anywhere tcp dpt:pop3 ACCEPT tcp -- anywhere anywhere tcp dpt:domain ACCEPT udp -- anywhere anywhere udp dpt:domain ACCEPT tcp -- anywhere anywhere tcp dpts:32768:65535 ACCEPT udp -- anywhere anywhere udp dpts:32768:65535 ACCEPT tcp -- localhost.localdomain localhost.localdomain ACCEPT udp -- localhost.localdomain localhost.localdomain Chain VZ_OUTPUT (1 references) target prot opt source destination ACCEPT tcp -- anywhere anywhere ACCEPT udp -- anywhere anywhere
VPS正在运行Plesk 10.4.4
编辑:邮件服务器是qmail
编辑:规则由“Virtuozzo Power Panel”的防火墙模块创build
(请询问是否需要更多的技术信息来帮助我)
我认为你正在回答简单的答案。 尝试添加它
-m state --state RELATED,ESTABLISHED -j ACCEPT
到VZ_INPUT
我想你需要阅读短暂的端口,所以你可以更多地了解你的机器如何进行出站连接。
当您的服务器进行出站SMTP连接时(目标端口25,由您非常宽松的OUTPUT规则所允许),响应将返回到您的服务器从中获取连接的临时端口。 默认情况下,Linux临时端口范围是32768到61000.当您不允许端口32768到65535上的INPUTstream量时,您将阻止来自远程SMTP服务器的响应。
这些防火墙规则对我来说似乎相当不合常规。 至less根据我的经验,非常不典型的是看到不利用ip_conntrack和有状态过滤的防火墙规则。 一些search名称“VZ_FORWARD”,“VZ_INPUT”等,向我显示这些是一些非常典型的规则集,一些虚拟服务器pipe理包正在创build。 我个人会使用有状态过滤,但是对于VPS提供者来说可能会有这样的performance。
编辑:
如果您有兴趣了解关于netfilter的更多信息, 官方文档并不是一个糟糕的地方,尽pipe其中一些文档有些过时。 你没有提到你使用的是什么发行版,但你可以在那里find一些发行版的特定文档。 你在另一个评论中提到,你想限制你正在使用的GUIpipe理器的修改。 这可能会限制您对configuration进行重大更改的能力。 即使你不打算手动修改configuration,你也可能通过阅读netfilter来获得有用的知识。
re:你的OUTPUT链 – 一个有安全意识的pipe理员希望lockingOUTPUTstream量,这样,如果恶意攻击者以非超级用户的身份获得了对服务器计算机的控制权,那么他们受限于哪些types的stream量可以从机器上网。 例如,某些蠕虫希望能够将HTTP(或FTP或TFTP)请求返回到Internet以下载其“第二阶段”组件。 当您删除服务器向Internet发送任意请求的function时,可以限制恶意攻击者可能导致您的计算机执行的操作。 (显然,如果他们获得了超级用户访问权限,那么“游戏结束” – 他们可以修改防火墙规则。)
看着VZ_INPUT:
接受tcp – 任何地方任何地方tcp dpt:smtp
这允许传入连接到您的SMTP服务器。
你的输出规则允许任何东西
但是,当你发送电子邮件时,你的机器作为CLIENT而不是服务器。
所以当你尝试发送邮件的时候,SYN数据包从端口32768到端口25,然后从端口25返回到端口32768,这只与最后添加的愚蠢规则匹配。
因此向VZ_INPUT添加反向规则将允许stream量:
ACCEPT tcp -- anywhere anywhere tcp spt:smtp
或者,因为Mosebuild议允许VZ_INPUT上的相关stream量。 后者实际上是一个更好的解决scheme,因为上面的无状态版本不会阻止攻击者强制客户端口访问您的服务器端口到25。
你真的应该在你的服务器上实现适当的出口过滤 – 因此,你应该(如丹尼斯所说)允许在vz_output上build立相关的连同有效的客户端协议,例如DNS,SMTP和NTP以及默认的DENY策略。
顺便说一句:你怎么得到一个shell的系统,当它不允许ssh / rsh / telnet?