这个问题可能已经被问过很多次了,但是经过几次失败的尝试,我重复了一遍历史:
如何在运行 CentOS 的服务器上打开端口 25 端口。
这是我的 iptables 配置:
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
REJECT all -- anywhere loopback/8 reject-with icmp-port-unreachable
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:ftp
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ftp
ACCEPT icmp -- anywhere anywhere
LOG all -- anywhere anywhere limit: avg 5/min burst 5 LOG level debug prefix `iptables denied: '
DROP all -- anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DROP all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere tcp spt:ftp-data
以下是 sudo netstat -plntu 的输出
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1283/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1039/sshd
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 5981/master
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 1297/php-cgi
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 1177/mysqld
tcp 0 0 :::22 :::* LISTEN 1039/sshd
tcp 0 0 :::25 :::* LISTEN 5981/master
每当我尝试像这样进行 telnet
远程登录 158.549.236.54 25
连接超时。这里使用的IP是随机的。
答案1
问题不在于您的防火墙(您似乎在顶部添加了一条允许所有流量的规则)。
您的主要问题是端口 25 仅监听 127.0.0.1 和 ::1,这两个都是本地主机。您需要将 SMTP 服务器配置为监听 158.549.236.54 接口(或所有接口)
答案2
配置似乎很好(防火墙允许所有流量和邮件服务器暴露在:25),很可能是您的 ISP 正在阻止到邮件端口的流量(为了打击垃圾邮件)。
一种解决方法是在服务器中添加一个 NAT 重定向,从随机端口(例如 2525)到端口 25 iptables -t nat -I PREROUTING -p tcp --dport 2525 -j REDIRECT --to-port 25
,然后尝试 telnet 到该端口:telnet ip 2525
答案3
我强烈怀疑问题出在你的防火墙规则上。尽管第一条规则似乎允许一切,但这就是为什么 的输出iptables -L
对于诊断这些问题来说毫无用处 -它没有给出接口限制。
我怀疑如果您粘贴输出iptables -L -n -v
,我们会看到第一条规则仅适用于环回接口上的流量。
尝试
iptables -I INPUT 1 -p tcp --dport 25 -j ACCEPT
看看是否能解决任何问题。