iptables基于域名的本机流量控制

背景

公司内网服务器,上面跑了几个程序(爬虫,每天定时从几个域名上拉取数据),为了安全起见,配置了iptables,只放通了内网和本地回环地址,配置完成后几个程序就处于半死状态.


解决流程

将需要访问的域名按行放到文件中,然后起一个定时脚本去读取该文件,将该文件中的域名读取出来,使用nslookup命令找到其解析的ip地址,然后提取ip地址丢入到ipset中就ok了,本来网上查的用dnsmasq,但是没有调试通,很尴尬


一、iptables配置

iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -j DROP
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -d 10.0.0.0/24 -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -j DROP

只放通了内网和本地回环地址以及DNS的53端口,其余的全部drop掉了

二、ipset命令

安装: yum install ipset
安装服务:yum install ipset-service
启动:systemctl start ipset
自启:systemctl enable ipset
创建:ipset create white_domain hash:ip (white_domain这个名字和后面的几个地方要对应起来)
保存:ipset save white_domain  -f /root/white_domain.ipset

三、nslookup

安装: yum install bind-utils
基本用法: nslookup baidu.com
脚本: white_domain_ipset_iptables.sh 内容: 
#!/bin/bash
cat /etc/white_domain.conf | while read line
do
for ip in $(nslookup $line | tail -n+4 | grep "[0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}[.][0-9]\{1,3\}" | xargs -n1 | grep -v 'Address')
do
    ipset add -exist white_domain $ip
done
done

域名文件是/etc/white_domain.conf


四、iptables配置ipset

入网放通: iptables -I INPUT -m set --match-set white_domain src -j ACCEPT
出网放通: iptables -I OUTPUT -m set --match-set white_domain dst -j ACCEPT

定时任务配置

由于不清楚域名到底多久换一次ip地址,所以我创建定时任务,每隔一分钟执行一次脚本,将最新域名对应的ip地址放入到iptables中

crontab -e
*/1 * * * * /white_domain_ipset_iptables.sh

总结

不太清楚是不是有其它的解决方案,如果有欢迎交流(dnsmasq除外,这个没弄出来).
目前不清楚有什么问题,如果有人发现问题了,欢迎留言…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值