iptables基于域名的访问控制

说明

测试环境中的机器需要控制只能请求某些地址,其他的都屏蔽掉,如果在每台机器的iptables中配置,重复工作太多。 只需将局域网中的默认网关指向一台机器,然后再这台机器上控制iptables即可。

iptables一般只能做对IP的访问控制,如果做域名的控制,iptables会自动解析成IP写入iptables规则中。所以需要使用dnsmasq+ipset+iptables

  • dnsmasq:dns服务器,这里有两个作用,一个是做dns转发,本身不提供dns解析功能。二是将域名解析到的ip自动添加到ipset的表中(高版本的dnsmasq才支持ipset)
  • ipset:作为iptables和dnsmasq的中转,一个用来记录dnsmasq解析出来的IP,二是iptables使用ipset的表来控制访问权限

配置

主机名 IP
route-a 192.168.111.100
work-b 192.168.111.101

网关服务器配置

  • 安装dnsmasq

    [root@route-a ~]# wget http://www.thekelleys.org.uk/dnsmasq/dnsmasq-2.70.tar.gz
    [root@route-a ~]# tar zxvf dnsmasq-2.70.tar.gz
    [root@route-a ~]# cd dnsmasq-2.70
    [root@route-a ~]# make install
    
  • 查看dnsmasq是否支持ipset

    [root@route-a ~]# dnsmasq -v
    Dnsmasq version 2.70  Copyright (c) 2000-2014 Simon Kelley
    Compile time options: IPv6 GNU-getopt no-DBus no-i18n no-IDN DHCP DHCPv6 no-Lua TFTP no-
    conntrack ipset auth no-DNSSEC
    
    This software comes with ABSOLUTELY NO WARRANTY.
    Dnsmasq is free software, and you are welcome to redistribute it
    under the terms of the GNU General Public License, version 2 or 3.
    
  • 配置dnsmasq

    [root@route-a ~]# vim /etc/dnsmasq.conf
    ...
    server=/.com/114.114.114.114
    conf-dir=/etc/dnsmasq.d
    
    [root@route-a ~]# vim /etc/dnsmasq.d/domain.conf
    ipset=/.baidu.com/bdlist
    

    将.com结尾的域名转发到114.114.114.114 DNS服务器解析,将baidu.com的解析的ip记录到dblist的ipset表中

  • ipset配置

    创建dblist表

    [root@route-a ~]# ipset create dblist hash:ip
    [root@route-a ~]# ipset list
    Name: bdlist
    Type: hash:ip
    Revision: 1
    Header: family inet hashsize 1024 maxelem 65536
    Size in memory: 16560
    References: 1
    Members:
    115.239.211.112
    115.239.210.27
    

    members 对应的IP就是域名解析的IP,如果members为空是因为还没有通过dnsmasq请求过baidu.com

  • 启动服务

    [root@route-a ~]# dnsmasq -C /etc/dnsmasq.conf
    
  • 配置转发

    [root@route-a ~]# sed -i 's/net.ipv4.ip_forward = 0/net.ipv4.ip_forward = 1/' /etc/sysctl.conf
    [root@route-a ~]# sysctl -p
    
    
  • iptables删除默认规则

    [root@route-a ~]# iptables -F
    
  • iptables配置默认拒绝所有转发

    [root@route-a ~]# iptables -P FORWARD DROP
    
  • iptables开放白名单

    [root@route-a ~]# iptables -A FORWARD -s 192.168.111.101 -m set --match-set bdlist dst -j ACCEPT
    

    允许111.101服务器访问dblist中的地址,而dblist中存放的是baidu.com的地址,所以允许该服务器访问baidu

节点服务器配置

  • 配置默认网关到网关服务器

    [root@work-b ~]# sed -i 's/^GATEWAY.*/GATEWAY=192.168.111.100/' /etc/sysconfig/network-scripts/ifcfg-eth0
    [root@work-b ~]# service network restart
    
  • 配置dns

    [root@work-b ~]# vim /etc/resolv.conf
    nameserver 192.168.111.110
    

你可能感兴趣的:(iptables基于域名的访问控制)