针对域名做iptables

来源:互联网 发布:java 手游辅助工具 编辑:程序博客网 时间:2024/05/20 17:08

前景:

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

第一天运行正常,没有发现异常。

第二天,开始有调用方反馈自己调用接口未成功,第一想法就是iptables应该是有问题的,在和研发人员一路排查的时候,发现所有的调用都拥塞了,out的数据都没有问题,但是返回的数据全部拒掉了,原因是核心设备在别人调用的时候,也调用了第三方的接口,核心机需要接收第三方返回的数据,而第三方是域名;

解决思路:

首先想到的是向调用的第三方取得所有域名下的ip段,但与第三方沟通得知,设备会经常变更,ip段也会变化;想了想,这样可以给个接口什么的,第三方变化可以直接提交新的ip,然后通过脚本来自动更改iptables策略

但想了想,能不能针对域名做策略?

网上开始各种down。。。。。。。然后找到了前同事白大师的一篇贴子,,抓到了救命稻草。。。。


别吐槽,解决问题就行微笑 以下内容转自chinaunix 白大师 贴子

=====================================2008.07.19 v0.0.3        支持 kernel 2.6.26        支持 iptables 1.4.1=====================================2006.07.14 v0.0.2        修正了 iptables-save 时存在的 bug        修正了匹配方式,大幅度提高了匹配效率=====================================2006.07.13 v0.0.1        匹配 DNS 域名解析内容模块 domain 正式发布=====================================复制代码
</pre><pre code_snippet_id="1790226" snippet_file_name="blog_20160728_3_3361293" name="code" class="python">INSTALLdomain v0.0.2  2006.07.14, platinum=======================How to install ?  # make KERNEL_SRC=<your kernel source> IPTABLES_SRC=<your iptables source> installHow to use ?  # iptables -m domain -h复制代码iptables -m domain -hdomain v0.0.2 options:  --name "www.chinaunix.net"            Match the domain named "www.chinaunix.net"  --name "chinaunix.net"                Match the domain named "chinaunix.net"                                        include [url]www.chinunix.net[/url], bbs.chinaunix.net, man.chinaunix.net


转自链接如下:

http://bbs.chinaunix.net/thread-2170400-1-1.html



几天后,在同事的帮助下,用另一种方法实现了业务需求

multiport模块

可以使用multiport模块统一一次指定多个端口。

在写规则时,必须指定“ -m ”参数来检查状态

-m  stat --state  检测包状态

-m multiport这个模块可以匹配一组源或者目的的端口号,最多达15个端口;

状态保持信息:

INVALID意味着这个包没有已知的流或连接与之关联,也可能是它包含的数据或包头有问题。
ESTABLISHED意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已经有数据发送。
NEW表示包将要或已经开始建立一个新的连接,或者是这个包和一个还没有在两端都有数据发送的连接有关。
RELATED说明包正在建立一个新的连接,这个连接是和一个已建立的连接相关的。比如,FTP data transfer,ICMP error 和一个TCP或UDP连接相关。
注意NEW状态并不在试图建立新连接的TCP包里寻找SYN标记,因此它不应该不加修改地用在只有一个防火墙或在不同的防火墙之间没有启用负载平衡的地方。

示例:

1、iptables -A INPUT -p all -m state --state  ESTABLISHED,RELATED  -j  ACCEPT

2、Iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dports 21,80,443,8080 -j ACCEPT





0 0