-
Table的优先级是:RAW>MANGLE>NAT>FILTER。
-
数据包的Chain流向是:PREROUTING->INPUT->FORWARD->OUT->POSTROUTING。
-
每个Chain包含若干规则。这些规则将会被从上到下顺序匹配。
-
规则一旦被匹配,数据包将会流向下一个Table和Chain。
-
用户登录OpenVPN系统,系统验证通过后,用户获取一个私有IP地址,同时系统记录其账号名。
-
连接建立后,OpenVPN系统调用Connect脚本。
-
IPtables将用户所属IP加入到对应的规则组Chain中。
-
用户获取到相应的访问权限。
-
用户完成访问,断开连接,IPTables将用户占用IP地址从规则组Chain中去除。
-
所有对象都被配置成组,例如:用户组,网络地址组,端口组。IPTables本身是没有区分数据包的用户或者用户组机制的。想要实现用户和用户组的判定,需要额外的脚本程序和配置数据库配合,这个解决方案建立了一个额外的配置数据库,利用OpenVPN用户帐号和用户IP地址的映射关系,来实现用户的权限设置。
-
FORWARD Chain中的规则为:iptables -A FORWARD -s 1.1.1.1 -j USERGROUP_1,假设每个用户都同时属于20个组,FORWARD规则数为:2000条规则。
-
USERGROUP_1 Chain中的规则为: iptables -A USERGROUP_1 -j RULE_1, 假设每个组同时有20个规则,USERGROUP_1中的规则数为:20条
-
RULE_1 Chain中的规则为:iptables -A RULE_1 -d 1.0.0.0/8 -j PORT_1,假设每个网段开放了10种不同组合的端口,SG_1规则数为:50*10=500条规则。
-
PORT_1 Chain中的规则为:iptables -A PORT_1 -p tcp --dport 80 -j ACCEPT,PORT_1规则数为10条。