firewalld高级应用-2

1. Firewall直接规则

Firewall提供了“direct interface(直接接口)”,它允许管理员手动编写的iptables、ip6tables、ebtables规则直接插入到firewall的管理区域中,适用于应用程序,而不是应用程序;直接端口使用firewall-cmd命令中的 --direct选项实现

1)例:卡其黑名单,添加一些规则将某个IP范围列入黑名单

firewall-cmd --direct  --permanent  -add-chain ipv4 raw  blacklist

\# 使用firewall-cmd命令调用iptables规则参数,在raw表中创建规则链“blacklist”。 ipv4 指的是iptables


firewall-cmd --direct  --permanent --add-rule Ipv4 raw PREROUTING 0 -s 192.168.1.0/24 -j blacklist

\# 在路由之前检测到192.168.1.0/24网段的IP地址的数据包,加入到blocklist规则链中。


firewall-cmd  --direct  --permanent  --add-rule  ipv4  raw  blacklist  0  -m limit --limit 1/min -j LOG --log-prefix blacklisted

\# 每分钟生成以下日志文件


firewall-cmd --direct --permanent --add-rule  ipv4  raw  blacklist  1  -j  DROP

\# 将来自规则链“blacklist”中的数据包丢弃

2)firewall执行优先级

直接规则 > 富规则 > 区域规则

<think>好的,用户现在遇到了telnet连接被拒绝的问题,特别是端口9006和9007,尽管firewalld显示这两个端口已经开放。我需要结合之前的对话和用户提供的引用来分析可能的原因和解决方案。 首先,用户之前已经尝试过检查防火墙配置,开放端口,验证端口状态,以及常见问题排查。但问题依旧存在,所以需要更深入地排查。 根据引用[1],提到了放行telnet的默认端口23,但用户现在使用的是9006和9007,所以可能需要检查这两个端口是否在防火墙中正确开放。用户已经执行了firewall-cmd的命令,但日志显示已启用却无法连接,可能存在其他因素。 引用[2]提到了ERR_CONNECTION_REFUSED错误,可能涉及服务未启动或端口冲突。用户需要确认服务是否真的在监听9006和9007端口。比如,使用ss或netstat命令查看是否有进程在监听这些端口。如果服务未正确绑定,即使防火墙开放了端口,连接也会被拒绝。 引用[3]讨论了UDP和TCP的区别,但用户的问题是关于telnet,属于TCP连接,可能需要确认服务是否使用TCP协议。此外,UDP没有连接状态,但telnet使用TCP,所以需要确保服务配置正确。 接下来,可能的步骤包括: 1. 确认服务是否在本地运行并监听目标端口。使用ss -tuln | grep 9006等命令,如果没有输出,说明服务未启动或配置错误。 2. 检查SELinux是否阻止了端口访问。临时禁用SELinux测试,如果可行,需要调整策略。 3. 查看云服务器的安全组设置,确保入站规则允许9006和9007端口。 4. 检查是否有多个防火墙服务同时运行,比如firewalld和iptables冲突。 5. 检查应用程序的配置,确保绑定到0.0.0.0而不是127.0.0.1,以便接受外部连接。 6. 查看系统日志,如dmesg或journalctl,寻找被拒绝的连接记录。 7. 使用tcpdump抓包,分析连接请求是否到达服务器,以及是否有响应。 用户提到firewalld日志显示端口已启用,但无法连接,可能问题出在服务本身或网络配置的其他部分。需要一步步排除可能性,从服务状态到网络配置,再到安全策略,逐一验证。</think>以下是根据引用内容和问题特征整理的排查方案,采用分步诊断方式: ### 一、关键诊断流程 #### 1. 验证服务真实监听状态(核心步骤) ```bash ss -tulnp | grep -E '9006|9007' # 显示进程名和PID ``` *预期结果示例*: `tcp LISTEN 0 128 0.0.0.0:9006 0.0.0.0:* users:(("nginx",pid=1234,fd=6))` *异常情况处理*: - 无输出 → 服务未启动或配置错误[^3] - 显示`127.0.0.1:9006` → 需修改为`0.0.0.0:9006`接受外部连接 #### 2. 深度检查firewalld配置(引用[1]增强验证) ```bash # 查看运行时配置与永久配置差异 firewall-cmd --list-ports && firewall-cmd --permanent --list-ports # 检查9006/9007端口的zone分配 firewall-cmd --get-active-zones | grep -A10 'public' ``` #### 3. SELinux策略验证(易忽略项) ```bash # 查看端口标签 semanage port -l | grep -E '9006|9007' # 临时允许端口(示例为HTTP服务类型) semanage port -a -t http_port_t -p tcp 9006 ``` ### 二、高级排查方法 #### 1. 数据包追踪(需root权限) ```bash tcpdump -i any port 9006 -nn -vv ``` *操作说明*:另开终端执行`telnet 服务器IP 9006`,观察是否有SYN包到达 #### 2. 连接状态分析 ```bash conntrack -L -d 服务器IP --dport 9006 # 查看连接追踪记录 ``` #### 3. 内核日志检查 ```bash dmesg | grep -i 'DROP' # 查看内核级拦截记录 ``` ### 三、典型故障场景解决方案 #### 场景1:服务绑定到IPv6导致的问题 ```bash ss -tuln | grep 9006 # 若显示:::9006表示只监听IPv6 # 解决方案:修改服务配置绑定到0.0.0.0:9006 ``` #### 场景2:Docker容器网络隔离 ```bash # 检查容器端口映射 docker ps --format "table {{.Names}}\t{{.Ports}}" | grep 9006 # 需确保有映射参数:-p 9006:9006 ``` #### 场景3:端口冲突(引用[2]相关) ```bash # 查找占用进程 lsof -i :9006 || ss -tulnp | grep 9006 ``` ### 四、firewalld配置强化建议 ```bash # 创建专用服务定义(持久化配置) cat > /etc/firewalld/services/my-service.xml <<EOF <?xml version="1.0" encoding="utf-8"?> <service> <short>My Service</short> <description>Custom service for ports 9006-9007</description> <port protocol="tcp" port="9006"/> <port protocol="tcp" port="9007"/> </service> EOF # 应用服务配置 firewall-cmd --permanent --add-service=my-service firewall-cmd --reload ``` ### 五、最终诊断树 1. 本地`telnet 127.0.0.1 9006`失败 → 服务未运行/配置错误[^3] 2. 本地成功但外部失败 → 防火墙/SELinux/安全组问题 3. 数据包到达但无响应 → 应用层拒绝(如白名单限制) 4. 间歇性连接失败 → 检查conntrack表溢出`sysctl net.netfilter.nf_conntrack_max` --- ### 相关问题 1. 如何诊断Docker容器与宿主机之间的端口连通性问题? 2. 当`firewall-cmd --reload`后规则丢失应该如何处理? 3. 如何为特定IP段设置firewalld的端口访问白名单? [引用说明] [^1]: 基于firewalld服务管理的标准操作流程 [^2]: 网络连接拒绝错误的通用排查思路 [^3]: TCP端口监听状态的判断依据
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值