关于docker如何通过防火墙做策略限制
1、iptables相关问题
在Iptables防火墙中包含四种常见的表,分别是filter、nat、mangle、raw。
filter:负责过滤数据包。
- filter表可以管理INPUT、OUTPUT、FORWARD链。
nat:用于网络地址转换。
- nat表可以管理PREROUTING、INPUT、OUTPUT、POSTROUTING链。
mangle:修改数据包中的内容,例如服务类型、TTL、QOS等等。
- mangle表可以管理PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD链。
raw:决定数据包是否被状态跟踪机制处理。
- raw表可以管理PREROUTING、OUTPUT链。
4张表的优先级顺序是:raw --> mangle --> nat --> filter
在Iptables防火墙中包含五条链(数据流向是自上而下的):
PREROUTING:需要做目的地址转换(DNAT)的优先走这个表
INPUT:流量进入时会经过的链
FORWARD:负责流量转发时经过的链
OUTPUT:流量离开时会经过的链
POSTROUTING:需要做源的地址转换(SNAT)的优先走这个表
2、Docker部分
查看当前防火墙策略
# itpables -nL 默认是查看filter表中的规则
# iptables -nL -t nat 可以查看nat表中的规则
2.1 进行策略限制
限制192.168.228.129用户访问192.168.228.128:8082端口
3、结论:
当用户通过外部网络访问docker容器时,流量是先经过宿主机,然后通过nat转换成一个叫docker0网卡上的ip去访问容器的
因此想要做限制,分两步:
1、需要先在NAT表上的(NAT优先级>filter)PREROUTING链或者DOCKER链(因为docker程序修改了防火墙策略,优先将PREROUTING链上的规则转发到自定义的DOCKER链)添加一条RETURN策略;
2、因为NAT表是做地址转换的,无法做过滤,所以要在NAT表中添加RETURN策略,让匹配到的流量跳过本张表,流转到filter表中,这样就可以通过filter表中的DROP或REJECT来做限制了。
操作NAT表
# iptables -t nat -I PREROUTING -p tcp -s 192.168.228.129 --dport 8082 -j RETURN
操作filter表
# iptables -A OUTPUT -d 192.168.228.129 --sport 8082 -j DROP