無法訪問 CentOS7服務器上應用監聽的端口
參考資料
- 雲主機上Centos7配置Iptables規則開啟80、3306等端口https://blog.csdn.net/qq_37960007/article/details/80374782
- CentOS 7 找不到 iptables 文件(需要安裝 iptables 服務)
https://www.cnblogs.com/miracle-luna/p/13714709.html - 如何在CentOS 7 的機器上配置白名單
https://www.cnblogs.com/miracle-luna/p/13714809.html - 關於mysql服務器3306端口不能遠程連接的解決
https://blog.csdn.net/m0_37477061/article/details/83275408 - Linux關閉防火牆命令
https://blog.csdn.net/qq_39399966/article/details/102660601 - CentOS7開啟端口(永久)
https://blog.csdn.net/zx110503/article/details/78787483 - centos7 打開mysql 3306端口並 設置外部訪問
https://www.cnblogs.com/yangxunwu1992/p/6091422.html
問題由來
我在自己的虛擬機中的CentOS7 中(MySQL 8 安裝過程)並啟動了 mysql 8 服務,並且確認了服務啟動沒有問題。
定位問題:
- telnet 服務器的22 端口,訪問正常
- netstat -ntpl |grep 3306 查看監聽端口,沒有問題
- telnet 服務器的3306端口,無法訪問
經過百度,發現是防火牆的問題。
防火牆開啟端口供其他訪問
1. 使用 firewalld 開啟端口
1、運行命令:
firewall-cmd --get-active-zones
運行完成之后,可以看到zone名稱,如下:
2、執行如下命令命令:
# --permanent 表示 永久生效
firewall-cmd --zone=public --add-port=3306/tcp --permanent
3、重啟防火牆,運行命令:
firewall-cmd --reload
4、查看端口號是否開啟,運行命令:
firewall-cmd --query-port=3306/tcp
5、如果firewall 已經注銷的了,運行以下命令可恢復:
systemctl unmask firewalld
2. 使用 iptables
在CentOS 7.x 的機器上,給指定主機和指定端口配置白名單的時候,發現機器的 /etc/sysconfig/
目錄下沒有找到 iptables 文件。
原因是因為CentOS 7.x 默認是使用 firewalld 服務作為防火牆,我們需要禁用該服務,安裝 iptables 服務。
1、停止 firewall 服務
systemctl stop firewalld
2、注銷 firewall 服務
systemctl mask firewalld
可以通過systemctl unmask firewalld 重新注冊 firewalld 服務
3、安裝 iptables 服務
yum install -y iptables
yum install iptables-services
4、啟動 iptables 服務
systemctl start iptables
或者
service iptables start
5、設置 iptables 開機自啟動
systemctl enable iptables
6、查看 iptables 狀態
systemctl status iptables
或者
service iptables status
7、查看 iptables 文件
此時可以在 /etc/sysconfig/ 目錄下看到 iptables 文件
8、編輯 iptables 文件,加入防火牆規則
vi /etc/sysconfig/iptables
加入 3306 端口規則
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
注意: 3306 端口規則 一定不能是兩個 icmp-host-prohibited 中間,否則仍然不能訪問!
====== 錯誤示范========
之前新增的規則,在兩個 icmp-host-prohibited 中間,所以不能訪問:
====== 錯誤示范========
9、重啟 iptables
systemctl restart iptables.service
然后再查看
iptables -L -n
10、Telnet 服務器 3306 端口
訪問正常。
iptables 一些命令
# iptables 服務的停止命令
systemctl stop iptables
或者
service iptables stop
# iptables 服務的重啟命令
systemctl restart iptables
或者
service iptables restart
# Saving firewall rules to /etc/sysconfig/iptables
service iptables save
# 重載 iptables 文件
systemctl reload iptables
或者
service iptables reload
# 查看已配置的iptables規則:
iptables -n -L
iptables -n -L --line-numbers