|
发表于 2007-6-7 07:50:50
|
显示全部楼层
似乎在防火墙ip地址列表很多时可以提高性能。这种情况下全部用iptables的话内核处理每个包都要走过所有的规则,而ipset通过在内核建立对应这些地址列表的高效数据结构,用一条或几条iptables规则即可完成同样的功能。
例子:
# ipmap set storing the IP addresses of two machines
# 建立一个名为servers的IP列表,包含两个地址
ipset -N servers ipmap --network 192.168.0.0/16
ipset -A servers 192.168.0.1
ipset -A servers 192.168.0.2
# portmap set storing the allowed ports for 192.168.0.2
# 建立一个名为ports的端口列表,包含3个端口
ipset -N ports portmap --from 1 --to 1024
ipset -A ports 21
ipset -A ports 22
ipset -A ports 25
# Binding, which attaches ports to 192.168.0.2
# 将servers集合的192.168.0.2和ports集合关联
ipset -B servers 192.168.0.2 -b ports
# iptables rule using the set match
...
# 只允许访问0.1(所有端口),只允许访问0.2的三个端口
iptables -A FORWARD -m set --set servers dst,dst -j ACCEPT
iptables -A FORWARD -j DROP
这个dst,dst比较难懂:似乎是可以有不同的src/dst组合,最多六级,然后根据所给集合的关联去搜索最多六层。不过一般也用不到这么复杂。
显然,当你内网有上百台机器,你需要逐一按ip/mac去控制哪些可以上网,哪些不行时,或者更加复杂的策略时,ipset就有用了。 |
|