CentOS下配置iptables碰到域名解析失败的问题

在阿里ECS上配置iptables后,遇到域名解析失败的问题。通过停止iptables服务确认问题源头,发现是iptables未开放DNS解析所需的53端口。尝试添加规则允许53端口的UDP和TCP通信,但问题仍然存在。阿里技术支持建议放开所有输入UDP端口,但问题仍未解决。最终,了解到iptables配置策略和nscd服务对域名解析速度的影响。

1,问题背景。

在阿里ECS上调用第三方短信接口,始终无法成功。接口不是IP地址,而是一个带域名的 URL接口。


2,问题原因

网络调测,首先便是两头一掐,确认别人根本没有收到我的请求,于是开始分析我发出去的报文。

根据发送请求返回的错误码,说是主机名无法解析。我用curl发送的请求,首先是百度一番,还真有人同样的错误码,但细一瞅,就觉得大不同,别人是什么IPV6影响。

我这个都没启动IPV6了。我 寻思 ,既然短信包发不出去,就curl下其它域名网站,百度主页简单,就拿它测试吧。果然不行,证实所有的域名解析都无法成功。

我自然想到了端口限制,为 了安全,配置了server的iptables策略。先证实下是不是这个原因。直接如下命令停用防火墙:service iptables stop,再运行程序,OK啦。

知道原因后,心中也不慌了,找资料得知域名解析用的53端口,于是iptables命令加上53端口(如下UDP和TCP都加满)。

iptables -A INPUT  -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT  -p udp --dport 53 -j ACCEPT
iptables -A INPUT  -p udp --sport 53 -j ACCEPT

iptables -A INPUT  -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 53 -j ACCEPT
iptables -A OUTPUT  -p tcp --dport 53 -j ACCEPT
iptables -A INPUT  -p tcp --sport 53 -j ACCEPT



满以为事情就OVER了,谁知只要启动iptables就不行。依然报域名无法解析。给阿里提了工单,答复如下:


心想,把所有input的端口都要放开,那安全控制咋整。先不管,按别人说的,执行iptables命令,把input的udp端口都放行,output和forward也不管。

结果是居然还不行,依然是域名无法解析,发送http请求,就卡在那了。阿里技术客服发来杀手锏:


事儿越整越复杂了。我继续网上找iptables资料,想着原因都知道了,应该好解决。
既然iptables把input的udp端口都放开了 ,为什么还不行了,难道域名解析还涉及到其他一些TCP端口,或者说我的UDP放行有问题。
而且端口都放开,iptables的 安全也没有意义了。比较好的解决方法是放行这个请求相关的连接响应报文。
iptables早就考虑了这一想法。我把如下命令加入到filter中,试过一切OK

#iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#iptables -A INPUT -m state --state INVALID -j DROP



3,知识延续

在解决问题的过程中,巩固了iptables用法,譬如增加端口,命令持久化到配置文件。

下面命令是启动和停用iptables,save是把策略保存到/etc/sysconfig/iptables里面,每次start直接从这个配置文件里面加载策略。

service iptables start

service iptables stop

service iptables save


一般input配置drop,output和forward配置accept,严格的 话也可配drop。

要注意的是:input配置drop,把ssh远程的自己也档在门外了,默认是22端口,如果server都 连不上,那就无语了....

所以最好是直接vi在etc/sysconfig/下的iptables配置文件,把22端口给予放行,然后再慢慢玩。


#iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT/DROP]

#iptables [-AI 链] [-io 网卡接口] [-p 协议] [-s 源ip/网段] [-d 目标ip/网段] -j [ACCEPT/DROP]


范例一:所有来自lo这个接口的数据包,都予以接受
#iptables -A INPUT -i lo -j ACCEPT


范例二:来自192.168.1.1这个IP的数据包都予以接收
#iptables -A INPUT -i eth0 -s 192.168.1.1 -j ACCEPT
不管什么数据包格式,只要来自192.168.1.1就予以接受


另外还了解到nscd服务,这个是域名解析的缓存,有了它,调用带域名的url接口会快很多(海量请求时)。


### 配置 CentOS 7 上的 iptables 防火墙规则 在 CentOS 7 系统中,`iptables` 已被 `firewalld` 取代作为默认防火墙管理工具。然而,仍可通过安装 `iptables-services` 来使用传统的 `iptables` 命令进行配置。 #### 安装与启用 iptables 1. **停止并禁用 firewalld** ```bash systemctl stop firewalld systemctl disable firewalld.service ``` 2. **安装 iptables 及其服务组件** ```bash yum -y install iptables iptables-services ``` 3. **启动 iptables 并设置开机自启** ```bash systemctl start iptables systemctl enable iptables ``` 4. **保存当前配置以确保重启后生效** ```bash service iptables save ``` #### 基础配置命令 - **查看现有规则** ```bash iptables -L -n -v ``` - **清空所有规则(谨慎操作)** ```bash iptables -F ``` - **允许特定端口流量通过** 比如开放 TCP 协议的 80 端口: ```bash iptables -A INPUT -p tcp --dport 80 -j ACCEPT ``` - **限制特定 IP 地址访问** 添加对来自 192.168.10.103 的请求的限制,例如阻止 8601 端口: ```bash iptables -A INPUT -s 192.168.10.103 -p tcp --dport 8601 -j DROP ``` - **允许本地回环接口通信** ```bash iptables -A INPUT -i lo -j ACCEPT ``` - **设置默认策略** 设置默认拒绝所有传入连接,接受所有传出连接: ```bash iptables -P INPUT DROP iptables -P OUTPUT ACCEPT ``` - **保存更改** ```bash service iptables save ``` #### 示例:开放 SSH 访问 为了保证服务器的安全性同时又能远程管理,通常会开放 SSH 服务(默认为 22 端口),可以执行如下命令: ```bash iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT ``` 此命令添加了一条规则,允许新的 SSH 连接进入系统[^1]。 #### 示例:配置 SNAT 和 DNAT 对于需要网络地址转换的情况,比如将内部网络的多个设备映射到一个公网 IP 上,可以配置 SNAT 或者 DNAT 规则: - **SNAT(源地址转换)** ```bash iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE ``` - **DNAT(目标地址转换)** 将外部请求转发至内网某台主机(假设为 192.168.1.100)上的 Web 服务: ```bash iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 ``` 以上是基本的 `iptables` 配置流程和一些常用示例。实际应用中应根据具体需求调整规则,并测试其有效性以确保网络安全性和功能性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值