在实现了WAF的路由模式之后,在这里做一个总结,以飨读者。

1 背景

WAF透明路由模式在经验WAF的部署模式总结中进行了总结,用一图流表达就是下面这张图

路由模式1.png

client访问的ip是12.12.12.108,但是WABOT有两个网口eth0(11.11.11.10/24)和eth1(12.12.12.10/24),WABOT在Web应用防火墙的基础上兼具路由的功能,将数据包转发到eth1的网段到达Web服务器上。

那么需要实现两件事情:

  1. 如何让数据包转到WABOT上的apache应用?
  2. 如何在经过了WABOT的检测之后转发到后台的Web服务器?

2 实验场景介绍

QQ图片20160420182919.jpg

如图所示共有三个网段分别为:192.168.1.0/24(管理节点网段),192.168.2.0/24(Web server网段),192.168.3.0/24(client网段)

其中WAF具有三个网卡:

eth0:192.168.1.154,eth1:192.168.2.10,eth2:192.168.3.11,client一个网卡为192.168.3.11与waf的eth2相连,server的ip为192.168.2.11通过交换机与waf的eth1相连。

我们要实现的就是来自client(192.168.3.11)的访问到达waf,然后进入到waf的本地Apache服务(18080端口应用),然后转发到Web server(192.168.2.11),然后能够得到192.168.2.11的正确响应。

3 实现方式

3.1 实现策略路由

在经验iptables/netfilter 中介绍了数据包在主机中流转的过程,我们的思路是:

  1. 对符合要求的数据包进行标记set-mark 1
  2. 将标记为1的数据包修改端口为Apache的服务端口18080
  3. 在路由选择的时候,标记为1的数据包查找路由表100
  4. 给路由表100添加路由为本地路由

代码实现如下所示,应该比较容易看懂

DPORT=80
TPORT=18080
# 增加策略路由
ip rule add fwmark 1 lookup 100 2>/dev/null
ip -f inet route add local 0.0.0.0/0 dev lo table 100 2>/dev/null

# 开启路由功能 
echo 1 > /proc/sys/net/ipv4/ip_forward

# 禁用反向路由过滤
cd /proc/sys/net/ipv4/conf
for i in ./*/rp_filter; do
        echo 0 > $i
done
unset i

#设置iptables规则
iptables -t mangle -N DIVERT
iptables -t mangle -A DIVERT -j MARK --set-mark 1
iptables -t mangle -A DIVERT -j ACCEPT

iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
iptables -t mangle -A PREROUTING -p tcp --dport $DPORT -j TPROXY --tproxy-mark 0x1/0x1 --on-port $TPORT

3.2 实现Apache的往后转发

这里采用Apache反向代理的方式,这时候HTTP请求到达了Apache的服务,然后针对端口进行反向代理,这个应该很好理解的吧

 <VirtualHost *:80>
    ProxyRequests Off

    <Proxy *>
        Require all granted
    </Proxy>
    ProxyPass / http://192.168.2.11/
    ProxyPassReverse / http://192.168.2.11/

</VirtualHost>

登录发表评论 注册

反馈意见