CentOS 防火墙、端口、端口转发、selinux、Windows 端口

本文详细介绍了在CentOS系统中进行防火墙配置、端口管理、关闭selinux及实现端口映射的方法。涵盖了iptables命令操作、firewalld服务管理、查看端口占用情况,以及Windows下关闭端口的技巧。

新博客地址:https://blog.iaiot.com/centos-notes.html

1.防火墙基础操作
1) 重启后生效 
开启: chkconfig iptables on 
关闭: chkconfig iptables off 
2) 即时生效,重启后失效 
开启: service iptables start 
关闭: service iptables stop 
参考:https://zhidao.baidu.com/question/303901938543294164.html
3)开放特定端口
方法1:查看状态:iptables -L -n
下面添加对特定端口开放的方法:
使用iptables开放如下端口:/sbin/iptables -I INPUT -p tcp --dport 6379 -j ACCEPT
保存:/etc/rc.d/init.d/iptables save
重启服务:service iptables restart
查看需要打开的端口是否生效:/etc/init.d/iptables status
方法2:直接编辑/etc/sysconfig/iptables
添加:-A INPUT -p tcp -m tcp --dport 6379 -j ACCEPT

 

重启:service iptables restart

 

4)如果CentOS7,service iptables stop 时显示not loaded

可能是用的firewalld

停止firewalld,并禁用这个服务

sudo systemctl stop firewalld.service

sudo systemctl disable firewalld.service

启动firewalld:sudo systemctl start firewalld.service

参考:https://blog.youkuaiyun.com/yelllowcong/article/details/75945339

其他firewalld开放指定端口及相关操作:

firewall-cmd --zone=public --add-port=2377/tcp --permanent

 

firewall-cmd --reload

参考:https://blog.youkuaiyun.com/u012498149/article/details/78772058

 

2.端口管理(部署集群时可以将其写在sh脚本里执行)
禁用指定端口:iptables -I INPUT -p tcp --dport 6379 -j DROP
对指定ip开启指定端口:iptables -I INPUT -s 192.168.1.10 -p tcp --dport 6379 -j ACCEPT
命令开启80端口:iptables -I INPUT -p tcp --dport 80 -j ACCEPT
配置文件开启80端口:修改/etc/sysconfig/iptables文件,添加-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
参考:http://blog.youkuaiyun.com/zhouyufengqingyang/article/details/51737254


3.关闭 selinux
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled
重启
参考:http://bguncle.blog.51cto.com/3184079/957315/
 

 

4.通过防火墙配置实现 端口映射、端口转发

# 打开 ipv4 端口转发

sysctl net.ipv4.ip_forward=1

#  配置端口映射(例:该机器公网ip:8080转到192.168.0.122:80,其中192.168.0.62为该机器的内网ip)
iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.0.122:80

iptables -t nat -A POSTROUTING -d 192.168.0.122 -p tcp --dport 80 -j SNAT --to 192.168.0.62

参考:http://man.linuxde.net/iptables

 

5.linux查看端口占用

1) lsof -i:端口号

2) netstat -tunlp | grep 端口号

参考:https://jingyan.baidu.com/article/546ae1853947b71149f28cb7.html

 

6.Windows关闭端口方法:
netstat -ano | findstr :4200
TaskKill.exe /F /PID 12784
参考地址:https://stackoverflow.com/questions/38586364/ember-s-port-4200-is-already-in-use

<think>我们有两个任务:1. 检查防火墙是否阻止了SSH端口22;2. 根据引用内容提供解决方案。 引用[1]提到可以通过SSH本地端口转发来排查防火墙是否阻止了访问,但这里我们更关注如何直接检查端口22是否被阻止。 引用[2]提供了当防火墙阻止SSH端口22时的解决方法(允许22端口或关闭防火墙)。 引用[3]是关于修改SSH端口到2024并配置SELinux允许该端口。 引用[4]提到在公共WiFi环境下端口22可能被阻止,但这不是服务器端的防火墙问题。 根据问题,我们需要检查防火墙是否阻止了端口22。我们可以通过以下步骤: 1. 检查本地防火墙状态(如ufw, firewalld, iptables等)是否阻止了22端口。 2. 使用telnet或nc等工具从外部测试端口连通性。 3. 检查SSH服务是否在监听22端口。 注意:由于用户可能无法通过SSH连接(如果防火墙阻止了22端口),所以这些检查可能需要通过虚拟机控制台(如VMware vSphere Console, Hyper-V控制台等)或者云控制台进行。 步骤: 一、检查防火墙状态和规则(以Ubuntu/Debian为例,使用ufw): 1. 查看防火墙状态:`sudo ufw status` 如果状态为`active`,则查看22端口是否被允许。在输出中应该看到`22/tcp`允许(ALLOW)。 2. 如果使用firewalld(CentOS/RHEL): `sudo firewall-cmd --list-ports` 查看开放的端口,确认22/tcp是否在列。 `sudo firewall-cmd --list-services` 查看开放的服务,确认ssh服务是否在列。 3. 如果使用iptables(通用): `sudo iptables -L -n -v` 查看规则,检查是否有针对22端口的DROP或REJECT规则。 二、检查SSH服务是否在监听22端口: `sudo netstat -tuln | grep ':22'` 如果输出中包含`LISTEN`,说明SSH服务正在监听22端口。 三、从外部测试端口连通性(在另一台机器上): `telnet <服务器IP> 22` 或者使用nmap:`nmap -p 22 <服务器IP>` 如果连接超时或被拒绝,则可能是防火墙阻止了。 四、如果确定是防火墙阻止了,则按照引用[2]的方法允许22端口: - 允许22端口:`sudo ufw allow 22/tcp`(对于ufw) - 或者对于firewalld:`sudo firewall-cmd --add-service=ssh --permanent` 然后 `sudo firewall-cmd --reload` - 或者临时关闭防火墙(测试用):`sudo ufw disable` 或 `sudo systemctl stop firewalld` 五、如果服务器启用了SELinux(如引用[3]),还需要检查SELinux是否允许22端口: - 查看当前SELinux允许的SSH端口:`sudo semanage port -l | grep ssh` - 如果22不在列表中,则需要添加:`sudo semanage port -a -t ssh_port_t -p tcp 22` 六、如果修改了SSH端口(如引用[3]),则需要检查SSH配置文件(/etc/ssh/sshd_config)中的Port设置,并重启SSH服务。 注意:在公共WiFi环境下(如引用[4]),可能客户端出站被阻止22端口,此时可以尝试使用备用端口(如443)或者使用HTTPS方式(如果支持)。 因此,总结回答如下:</think>### 如何检查防火墙是否阻止 SSH 端口 22 #### 一、检查防火墙状态与规则 1. **查看防火墙状态** ```bash # UFW 防火墙(Ubuntu/Debian) sudo ufw status verbose # 若输出 Status: active 且未允许 22 端口,则被阻止 [^2] # Firewalld(CentOS/RHEL) sudo firewall-cmd --list-all # 检查 services 部分是否包含 ssh 或 22/tcp ``` 2. **检查端口规则** ```bash # 查看所有端口规则 sudo iptables -L -n -v | grep 22 # 若出现 DROP 或 REJECT 规则,则端口被阻止 ``` 3. **检查 SELinux 限制** ```bash sudo semanage port -l | grep ssh # 若输出无 22/tcp,则需添加规则 [^3]: sudo semanage port -a -t ssh_port_t -p tcp 22 ``` #### 二、测试端口连通性 1. **本地测试监听状态** ```bash sudo netstat -tuln | grep ':22' # 若显示 LISTEN 说明服务正常监听 ``` 2. **远程测试连接** 在另一台机器执行: ```bash telnet 目标服务器IP 22 # 或 nc -zv 目标服务器IP 22 ``` - 连接超时 → 防火墙阻止 - Connection refused → 服务未运行 3. **使用 SSH 调试模式** ```bash ssh -vvv user@目标服务器IP # 观察日志中 "Connection timed out" 或 "No route to host" ``` #### 三、解决方案 1. **允许 SSH 端口** ```bash # UFW 防火墙 sudo ufw allow 22/tcp sudo ufw reload # Firewalld sudo firewall-cmd --add-service=ssh --permanent sudo firewall-cmd --reload ``` 2. **启动 SSH 服务** ```bash sudo systemctl start sshd sudo systemctl enable sshd ``` 3. **临时关闭防火墙(测试用)** ```bash sudo ufw disable # UFW sudo systemctl stop firewalld # Firewalld ``` > **关键排查流程**: > ```mermaid > graph LR > A[连接失败] --> B{netstat 显示监听?} > B -- 是 --> C[telnet/nc 测试] > B -- 否 --> D[启动SSH服务] > C -- 超时 --> E[检查防火墙规则] > C -- 拒绝 --> D > E -- 有阻止规则 --> F[允许22端口] > E -- 无规则 --> G[检查SELinux] > ``` #### 四、特殊场景处理 - **公共 WiFi 限制**:某些网络会阻止出站 22 端口,尝试改用 443 端口或 HTTPS 方式连接 [^4] - **云服务器**:检查云平台安全组规则,需单独放行 22 端口 - **端口冲突**:检查是否修改过 SSH 端口(查看 `/etc/ssh/sshd_config` 中 `Port` 设置) 通过以上步骤可精准定位: ✅ 防火墙主动阻止(`iptables` 显示 DROP 规则) ✅ 服务未运行(`systemctl status ssh` 显示 inactive) ✅ SELinux 限制(`semanage` 无 22 端口记录)[^3]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值