已解决
发布

因为 oneinstack 默认不带邮件服务器,而我需要一个自己的 SMTP 服务器来发送网站的系统通知邮件等,所以,这几天在自学 postfix 相关的教程。
我注意到 oneinstack 安装时开启了防火墙,不知道是否阻断了 SMTP 要用到的相关端口?如果已经封禁,如何开放?
谢谢!

13 答案

发布
管理员 2015-12-18
# iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
# service iptables save #保存iptables规则
#1
发布

直接复制粘贴你给的命令执行了,第一条执行后没什么返回信息,第二条执行后返回 “OK”:

[root@i oneinstack]# iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
[root@i oneinstack]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@i oneinstack]#

不知道这样对不对?
 

#2
发布
管理员 2015-12-18

是的

#3
发布
匿名用户 2015-12-18

OK, 谢谢指点!
我就照猫画虎,把 SMTP 验证所需要的 995、465 等端口全部都开放吧 。

#4
发布

我是按照这篇教程来配置 postfix 邮件服务器的:
 
http://www.krizna.com/centos/setup-mail-server-centos-7/
 
在教程里面,作者使用 firewall 命令来开放端口,由于 oneinstack 使用的是 iptables 防火墙,所以我就按照博主上面给的方案开放了端口。不过,在教程里面,还有让防火墙批准“服务”的指令,没有端口号,例如:
 

[root@mail ~]# firewall-cmd --permanent --add-service=smtp
[root@mail ~]# firewall-cmd --permanent --add-port=587/tcp
[root@mail ~]# firewall-cmd --permanent --add-port=465/tcp

[root@mail ~]# firewall-cmd --permanent --add-port=110/tcp
[root@mail ~]# firewall-cmd --permanent --add-service=pop3s
[root@mail ~]# firewall-cmd --permanent --add-port=143/tcp
[root@mail ~]# firewall-cmd --permanent --add-service=imaps

 
上述代码里面,第1行、第6行、第8行,这些都是服务。请教一下在 iptables 里面该用什么样的对应指令?
 
谢谢!

#5
发布
管理员 2015-12-18

google搜索下,把所有端口打开,或者关闭iptables(注意:如果启动了redis,iptables不能关闭)

#6
发布

“所有端口都打开”是不是有点危险了?我还是保留现状吧。再说我也启动了 redis(尽管不知道这是干什么用的)。

#7
发布

昨晚我重置了服务器,用一个全新的 centos 7 来从头做。首先我配置了 postfix + dovecot 邮件服务器,已经成功开启了 SMTP 及 POP3 服务,通过 PC 端的 outlook 都可以顺利收发邮件了。
 
然后我再安装了 oneinstack 。安装结束,配置了虚拟主机及 FTP 。
接下来测试 outlook 收发邮件就出错了,提示 10060 及 10061 等错误代码。估计是端口被封。
 
按照您给的方法,我开通了 25 和 110 端口,使用的命令如下:

# iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
# iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
#service iptables save

但是,发现还是无法用 Outlook 收发邮件,返回错误代码 10061 。上网查了一下,说 10061 就代表“connection refused”。请教一下:我的操作是不是哪里有问题?
顺便附上当前我的 iptables 里面的所有规则:
 

[root@oneinstack]#iptables -L -n
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:110
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:25
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:80
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpts:20000:30000
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:443
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 limit: avg 100/sec burst 100
ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 limit: avg 1/sec burst 10
syn-flood tcp -- 0.0.0.0/0 0.0.0.0/0 tcp flags:0x17/0x02
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:25

Chain FORWARD (policy ACCEPT)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination

Chain syn-flood (1 references)
target prot opt source destination
RETURN tcp -- 0.0.0.0/0 0.0.0.0/0 limit: avg 3/sec burst 6
REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
[root@oneinstack]#
#8
发布

补充说明:邮件服务器没有开通 SSL 加密,使用的端口分别是:POP3 110 SMTP 25,在 Outlook 里面就是按这两个端口设置的。

#9
发布

我自己测试了一下,我发现即使用 #service iptables stop 这个命令完全停止 iptables 服务,也仍然无法通过 outlook 连接到邮件服务器,甚至我在 SSH 客户端上执行 #telnet localhost 25 也不能成功。
还望您能抽时间研究一下这个问题,让 Oneinstack 能顺利兼容 postfix + dovecot 邮件服务器。既然 oneinstack 不自带邮件服务器,起码不要阻止邮件服务器(给需要邮件服务器的用户留一个开关吧)。
 
实际上,我发现由于 centos 7 已经自带了 postfix 邮局,而 dovecot 又很容易安装,oneinstack 完全可以考虑把“邮件服务器”作为一个“选项”,需要的人选 yes, 不需要的人选 no 就行了。
谢谢!

#10
发布

为了解决这个问题,我刚刚查看了一下 postfix 邮局的状态,发现 postfix 实际上根本没启动,准确说是“没法启动”:

[root@ etc]# service postfix status
Redirecting to /bin/systemctl status postfix.service
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since Sun 2015-12-20 08:45:16 CST; 3h 0min ago

Dec 20 08:45:16 iZ239i3uk4bZ systemd[1]: Starting Postfix Mail Transport Agent...
Dec 20 08:45:16 iZ239i3uk4bZ aliasesdb[803]: /usr/sbin/postconf: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
Dec 20 08:45:16 iZ239i3uk4bZ aliasesdb[803]: /usr/bin/newaliases: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
Dec 20 08:45:16 iZ239i3uk4bZ postfix[829]: /usr/sbin/postfix: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory
Dec 20 08:45:16 iZ239i3uk4bZ systemd[1]: postfix.service: control process exited, code=exited status=127
Dec 20 08:45:16 iZ239i3uk4bZ systemd[1]: Failed to start Postfix Mail Transport Agent.
Dec 20 08:45:16 iZ239i3uk4bZ systemd[1]: Unit postfix.service entered failed state.
Dec 20 08:45:16 iZ239i3uk4bZ systemd[1]: postfix.service failed.
[root@ etc]#

从上面的截屏可以看出,似乎找不到文件,或者无法加载文件了。但是在安装 oneinstack 之前,postfix 工作是正常的。是不是 oneinstack 在安装过程中某个操作影响到了 postfix ?还请您费心检查一下。谢谢!

#11
发布
管理员 2015-12-20

postfix依赖mysql库,如果你安装了mysql,执行如下操作:

echo '/usr/local/mysql/lib' > /etc/ld.so.conf.d/myql.conf
ldconfig

 

#12
发布
匿名用户 2015-12-20

哦,我是不是可以这么理解:由于我是在纯净版 centos 上面安装 postfix 邮局,所以它自己先安装了一个 mysql ;但是后来我又重新安装 oneinstack,这样被 oneinstack 自带的 mysql 就(干扰、override?)了,所以导致 postfix 无法运行。
 
那么,我尝试这么安装:在纯净版 centos 上面,首先安装 oneinstack,安装结束之后,再配置 postfix 邮局。
好吧,看来我需要再次初始化磁盘,从头练一遍。

#13

请登录或者 注册 来提交答案