如果在linux上明明服务已经启动,外部浏览器还是访问不到页面要注意以下问题。

本文详细介绍了如何使用systemctl和firewall-cmd命令管理Linux防火墙状态,包括查看、开启、关闭防火墙,以及如何永久性地开放或关闭特定端口,适用于系统管理员和技术人员。

一、防火墙的状态。有时打开防火墙外部不能访问。
防火墙的命令:
查看防火墙状态 systemctl status firewalld
开启防火墙 systemctl start firewalld
关闭防火墙 systemctl stop firewalld
开启防火墙 service firewalld start
禁止开机启动防火墙 systemctl disable firewalld.service
先用:systemctl unmask firewalld.service
然后:systemctl start firewalld.service
二、查看你的服务的端口号是否对外开放。
命令:
1.查询已经对外开放的端口
netstat -anp
2.查询指定端口是否已经开放
firewall-cmd --query-port=3306/tcp
返回yes/no。此时也有可能返回firewalld is not running,此时需要打开防火墙在开放端口。
开放端口号命令:
添加指定需要开放的端口:
firewall-cmd --add-port=3306/tcp --permanent
重载入添加的端口:
firewall-cmd --reload
查询指定端口是否开启成功:
firewall-cmd --query-port=3306/tcp

	注:移除指定端口:
	firewall-cmd --permanent --remove-port=3306/tcp
<think>首先,用户的问题是在Linux服务器防火墙关闭的情况下,22端口SSH无法访问、90端口浏览器无法访问,但能ping通IP。用户提供了几个引用,我应该参考这些引用来构建回答。 用户引用的内容: - 引用[1]:提到能ping通但telnet不通22端口,解决步骤包括检查IP冲突、查看22端口开启状态和SSH服务状态。 - 引用[2]:讨论了即使防火墙关闭,SSH无法登录的问题,解决方案是将SSH端口加入防火墙规则(即使防火墙关闭也需要配置),并重新加载防火墙。 - 引用[3]:提到了SSH连接问题,涉及到权限问题,如私钥文件权限太开放。 用户的具体问题是:防火墙关闭,22端口SSH无法访问,90端口浏览器无法访问,但能ping通IP。我需要提供解决方案。 关键点: - 能ping通IP,表明网络层连接正常。 - SSH和HTTP(浏览器访问90端口)无法访问,表明应用层端口访问问题。 - 防火墙已关闭,所以问题不是防火墙直接阻止了端口。 可能的原因: 1. SSH服务未运行或配置错误。 2. 端口监听问题服务未正确监听在指定的端口。 3. 权限问题:如引用[3]提到的SSH私钥文件权限。 4. 防火墙内部配置:引用[2]提到即使防火墙关闭,端口可能没有被正确允许访问。 5. 其他安全机制:如SELinux或AppArmor。 6. 网络配置:如路由、NAT或代理问题。 用户提到90端口浏览器无法访问,所以90端口可能是一个Web服务端口(如HTTP)。 解决步骤: 1. **检查服务状态**: - 对于SSH:检查sshd服务是否运行:`systemctl status sshd` 或 `service sshd status`。 - 对于90端口:检查相关服务,如Nginx、Apache或自定义服务是否运行。 2. **检查端口监听**: - 使用`netstat -tunpl | grep :22` 检查22端口是否被监听。 - 同样,对于90端口:`netstat -tunpl | grep :90`。 - 或者用`ss -tuln | grep :22`。 3. **检查SSH配置**: - 查看SSH配置文件`/etc/ssh/sshd_config`,确保Port设置为22(或自定义端口)。 - 确保`PermitRootLogin`或其他设置没有阻止访问。 4. **检查端口绑定**: - 确保服务绑定到正确的接口(如0.0.0.0,而不是127.0.0.1)。 - 使用`netstat`查看监听的地址。 5. **权限问题**: - 如引用[3],检查SSH密钥文件的权限:`/etc/ssh/*_key` 文件权限应为600或更严格。 - 对于Web服务,检查相关文件的权限。 6. **防火墙内部状态**: - 尽管防火墙关闭,但引用[2]提到需要将端口加入规则。可能防火墙规则缓存或服务状态问题。 - 检查防火墙彻底关闭:`systemctl status firewalld` 或 `ufw status`(取决于发行版)。 - 如果是firewalld,运行`firewall-cmd --list-ports` 确认规则为空。 7. **SELinux或AppArmor**: - 检查SELinux状态:`getenforce` 或 `sestatus`。如果是Enforcing模式,可能阻止访问端口。 - 临时禁用:`setenforce 0`,然后测试。 - 或者调整策略:`semanage port -a -t ssh_port_t -p tcp 22`(类似命令)。 8. **日志检查**: - 查看SSH日志:`/var/log/auth.log` 或 `/var/log/secure`。 - 查看系统日志:`dmesg`, `journalctl -u sshd`。 9. **网络工具测试**: - 在服务器上测试本地连接:`telnet localhost 22` 检查是否正常。 - 从客户端测试:`telnet <server_ip> 22`(如果telnet失败,表明网络问题服务问题)。 - 对于90端口,类似测试。 10. **浏览器访问问题**: - 确保Web服务运行在90端口。 - 检查是否有代理或浏览器设置。 - 服务器端,检查Web服务日志。 结构化回答: - 由于系统指令,回答必须清晰、结构合理。 - 使用中文。 - 遵循LaTeX格式:行内数学用$...$,独立公式用$$...$$(但问题中可能不需要数学公式)。 - 在引用段落末尾添加引用标识,如[^1]。 - 生成相关问题。 回答结构: 1. **引言**:确认问题并概述解决思路。 2. **详细解决步骤**: - 检查服务状态。 - 检查端口监听。 - 检查防火墙和SELinux。 - 检查权限和配置。 - 测试工具。 3. **总结**。 4. **生成相关问题**。 引用管理: - 引用[1]:检查IP冲突和SSH服务状态。 - 引用[2]:防火墙配置,即使关闭也可能需要规则。 - 引用[3]:SSH文件权限问题。 在回答中引用这些。 相关问题生成: 1. 如何检查Linux上的端口监听状态? 2. SSH配置文件常见选项的解释? 3. SELinux如何影响端口访问? 4. 如何诊断网络连接问题? </think>### Linux服务器防火墙关闭,22端口SSH无法访问、90端口浏览器无法访问(但能ping通IP)的解决方案 您的 Linux 服务器能 ping 通 IP 地址,表明网络层连接正常,但无法访问 22 端口(SSH)和 90 端口(浏览器访问),这表明应用层端口访问存在问题。防火墙已关闭,因此问题可能源于服务状态、端口监听、权限配置或安全机制(如 SELinux)。以下是一个系统化的解决流程,基于您提供的引用和常见故障原因。建议逐步骤排查,每个步骤都包含命令和解释。 --- ### 1. **检查 SSH 和 Web 服务状态** 确保相关服务正在运行,否则端口无法响应连接请求。 - **检查 SSH 服务状态**: ```bash systemctl status sshd # 或 service ssh status ``` - 如果服务未运行,启动它:`sudo systemctl start sshd`。 - 如果启动失败,查看日志:`journalctl -u sshd`,检查错误信息(如配置错误)。 - 引用[1]提到 SSH 服务启动是常见原因,需确保服务处于 `active (running)` 状态[^1]。 - **检查 Web 服务状态(90端口)**: 90端口通常用于 Web 服务(如 Nginx、Apache 或自定义应用)。 ```bash # 查看哪个服务监听90端口 sudo netstat -tunpl | grep :90 # 检查常用服务状态(如 Nginx) systemctl status nginx # 或 apache2、httpd ``` - 如果服务未运行,启动它:`sudo systemctl start nginx`。 - 确认服务配置监听90端口(例如,Nginx 配置文件在 `/etc/nginx/sites-enabled/` 中设置 `listen 90;`)。 --- ### 2. **检查端口监听情况** 服务运行不代表端口正确监听。使用网络工具验证端口是否被绑定到正确接口。 - **检查22和90端口的监听状态**: ```bash sudo netstat -tunpl | grep -E ':22|:90' # -tunpl 显示所有TCP/UDP监听端口 # 或使用 ss 命令:sudo ss -tuln | grep -E ':22|:90' ``` - 期望输出:`tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN`(表示监听在所有接口)。 - 问题示例:如果显示 `127.0.0.1:22`,则服务只绑定到本地环回地址,外部无法访问。需编辑配置文件: - SSH:修改 `/etc/ssh/sshd_config`,确保 `ListenAddress 0.0.0.0`(默认值)。 - Web服务:如 Nginx 的 `listen` 指令需设置为 `0.0.0.0:90`。 - 引用[1]指出,未开启监听是常见问题,需通过 `netstat` 确认[^1]。 - **测试本地端口访问(在服务器上执行)**: ```bash telnet localhost 22 # 测试SSH端口是否本地可访问 curl http://localhost:90 # 测试90端口是否本地可访问 ``` - 如果本地访问失败,表明服务自身问题(如配置错误或未启动)。 - 如果成功,但外部访问失败,转向网络和安全排查。 --- ### 3. **验证防火墙和SELinux状态** 尽管防火墙关闭,但规则残留或安全机制(如 SELinux)可能阻止访问。 - **确认防火墙彻底关闭**: ```bash # 对于 firewalld(CentOS/RHEL) sudo systemctl status firewalld # 确保状态为 inactive sudo firewall-cmd --list-ports # 列出允许的端口,应为空 # 对于 ufw(Ubuntu) sudo ufw status # 确保状态为 inactive ``` - 引用[2]强调,即使防火墙关闭,端口规则可能未清除。建议完全重置: ```bash sudo systemctl stop firewalld # 或 sudo ufw disable sudo firewall-cmd --reload # 或 sudo ufw reload ``` 确保22和90端口无残留规则[^2]。 - **检查 SELinux 是否阻止访问**: SELinux 在 Enforcing 模式下可能阻断端口。 ```bash getenforce # 输出应为 Disabled 或 Permissive;若为 Enforcing,临时禁用: sudo setenforce 0 # 临时禁用SELinux ``` - 如果禁用后问题解决,需调整 SELinux 策略: ```bash # 为SSH端口添加策略(22端口) sudo semanage port -a -t ssh_port_t -p tcp 22 # 为90端口添加策略(假设是HTTP服务) sudo semanage port -a -t http_port_t -p tcp 90 ``` - 引用[2]提到,安全机制如 SELinux 可能限制端口访问,需明确放行[^2]。 --- ### 4. **检查权限和配置文件** 文件权限错误或服务配置问题可能导致端口无法响应。 - **SSH 文件权限问题**: 引用[3]指出,SSH 私钥文件权限过大会导致连接失败。 ```bash ls -l /etc/ssh/ssh_host_* # 检查密钥文件权限 ``` - 权限应严格(如600):`-rw-------`。 - 修复权限:`sudo chmod 600 /etc/ssh/ssh_host_*_key`[^3]。 - 同时检查 `/etc/ssh/sshd_config`: - 确保 `Port 22` 未注释。 - 设置 `PermitRootLogin yes`(测试时临时允许)。 - **Web 服务权限问题**: - Web 根目录或应用文件权限问题可能导致90端口无响应: ```bash ls -l /var/www/html # 或自定义路径 ``` - 确保目录权限:`sudo chmod -R 755 /var/www/html`。 - 检查 Web 服务错误日志: ```bash tail -f /var/log/nginx/error.log # 或 apache2/error.log ``` --- ### 5. **网络诊断和测试工具** 使用工具确认问题范围,并测试本地与远程连接。 - **服务器端自测**: ```bash # 测试22端口监听:sudo nc -lvn 22(临时监听) # 测试90端口:启动临时HTTP服务:python3 -m http.server 90 ``` - 如果临时服务访问,表明原服务配置错误。 - **客户端测试(从您的电脑执行)**: ```bash telnet <服务器IP> 22 # 如果超时,表明端口未被外部访问 curl http://<服务器IP>:90 # 检查HTTP响应 ``` - 如果 `telnet` 失败但 `ping` 成功,问题服务器端(服务未监听或安全机制)。 - 使用 `tcpdump` 抓包(服务器端):`sudo tcpdump port 22`,观察连接尝试是否到达。 --- ### 根本原因总结 - **SSH无法访问(22端口)**:常见于服务未运行、端口监听错误、SELinux 限制或 SSH 文件权限问题。 - **浏览器无法访问(90端口)**:通常由 Web 服务启动、端口绑定到 `127.0.0.1` 或 SELinux 策略导致。 - **能ping通但端口不通**:表明网络路由正常,但应用层或安全层拦截(防火墙残留、SELinux、权限)。 通过以上步骤,90% 的问题可以解决。如果问题依旧,检查路由/NAT设置或联系网络管理员。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值