共计 1180 个字符,预计需要花费 3 分钟才能阅读完成。
文章转载自:CentOS 8 的 firewalld 已经与 iptables 解绑
今天有人找上我,说之前用的一键安装脚本不好使了,希望我能帮忙看看怎么回事。
根据他的描述,初步断定是系统多次安装某个依赖导致。仔细询问,他每次有问题都直接重建 vps,不应该存在这个问题。接着猜测应该是脚本与当前系统不匹配,脚本太久没更新所以安装报错。他说的脚本既不是我写的也没用过,让他联系作者反馈估计很难也不能解决当下问题,于是帮忙找了另外一个一键安装脚本让其尝试。
新的脚本很快就将所需软件安装成功,但是出现无法连接的问题。考虑到服务器有可能被屏蔽掉,于是用境外服务器连接,同样不能连上。接着指导他排除服务未启动、iptables 端口和服务商防火墙未放行等因素,问题依旧。
很久没碰到这么奇怪的状况,于是向他要了 root 密码,亲自登录服务器查看问题。首先用 ps aux | grep xxx
查看进程,确认软件正常运行;接着 netstat -nltp
查看端口监听,确认端口一直且正在被监听;iptables -nL
查看系统内置防火墙,输出为空,说明 iptables 没有屏蔽进程监听的端口。然而在这样的配置下,依然无法 telnet
远程连接到这台服务器。问题到底出现在哪里?
会不会是因为进程的问题?于是测试用 ssh
进程监听端口,无法连接;换一个端口,还是连不上;改成常用的 80 和 443 端口,也 telnet
不过去。测试了多个进程和端口,除了 ssh
的 22 端口,不管哪个进程监听的其他端口都不行。
走到这个地步,不是系统有问题便是我的水平有问题。于是用 uname -a
查看系统版本,输出如下:Linux xxx 4.18.0-80.7.1.el8_0.x86_64 #1 SMP Sat Aug 3 10:14:00 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
。信息略显杂乱,但还是能让人一眼就看出问题所在:el8,系统竟然是CentOS 8!
到此一切都明朗了:之前的一键安装脚本报错不好用了,因为脚本只适用于 6 和 7,CentOS 8刚出来没多久没有测试过;我找的一键安装脚本能安装和运行,无法连接是因为 CentOS 8 中 firewalld 已经与 iptables 解绑,后端改用 nftables,这便是iptables -nL 输出为空还是无法连接的真正原因;要想连接上,只需要用 nft
或者 firewall-cmd
放行相应的端口即可:
firewall-cmd --permanent --add-port=xxxx/tcp
firewall-cmd --reload
向他解释这些有点难度,于是让他重建 vps 时选CentOS 7,一键安装脚本好用了,也能远程连接过去了。
CentOS 8打开了一个新世界。
参考
- https://www.zdnet.com/article…
- https://developers.redhat.com…