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

原创 2016年06月01日 19:46:01

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域名不能解析

笔记本装好linux服务器后,突然不能上网了,直接输入域名,打不开网站,但通过IP就能正常访问。后来问题顺利解决,主要参考了下面网页https://www.centos.org/forums/view...

CentOS系统DNS不能解析问题

放到外地公网上去,ip地址已经设好了。dns也设置成功,保存退出。重启service network restart后发现不能解析了。用ip地址可以连,但是不能ping www.baidu.com ...
  • seng3018
  • seng3018
  • 2013年06月16日 16:58
  • 15879

CentOS 域名解析 配置问题

CentOS 域名解析 配置问题  个人小站,正在持续整理中,欢迎访问:http://shitouer.cn  小站博文地址:CentOS 域名解析 配置问题 解决了本人俩个问题: 1...

centos 搭建dns服务器 解析任意域名

linux搭建简单DNS服务器,实现局域网域名解析任意ip 功能: 1.最近公司新上了一台web服务器,比如是111.111.111.111 需要同事测试服务器是否正常,在一个局域网网段...
  • pzlsun
  • pzlsun
  • 2016年09月10日 23:14
  • 4036

针对域名做iptables

前景: 很偶然,由于业务需求,需要对现有的一台核心设备做安全防护,然后第一念头就想到了iptables,接着全网统计ip段,各种INPUT链各种添加规则,很兴奋的就上了线。 第一天运行正常,没有发现异...

Dnsmasq+ipset+iptables基于域名的流量管理

iptables只能根据ip地址进行转发,不能识别域名,而dnsmasq-full不仅可以实现域名-IP的映射,还可以把这个映射关系存储再ipset中,所以使用dnsmasq+ipset就可以实现ip...

Linux服务器无法解析域名解决

java.net.UnknownHostException: api.weixin.qq.com 最近把项目部署到Linux服务器上,发现本地调试好的微信扫码登录突然无法使用了,本地调试却正常!...

linux 无法解析域名 unknown host 解决方案

出现ping:unknownhost 的问题最主要是linux设置的DNS解析不了 nameserver 192.168.1.1 search localdomain 在/etc/r...
  • rually
  • rually
  • 2015年10月31日 14:36
  • 4760

centos7中iptables启动失败

出现这种情况,输入service iptables save命令,iptables启动正常

iptables 无法正常启动且无任何报错

iptables无法正常启动iptables,且启动后无任何提示信息。原因是缺少iptables文件(/etc/sysconfig/iptables)添加放行80端口并保存配置(自动生成/etc/sy...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CentOS下配置iptables碰到域名解析失败的问题
举报原因:
原因补充:

(最多只允许输入30个字)