簡介:
ipset是iptables的擴展,允許你創建匹配整個地址sets(地址集合)的規則。而不像普通的iptables鏈是線性的存儲和過濾,ip集合存儲在帶索引的數據結構中,這種集合比較大也可以進行高效的查找。在許多的linux發布中ipset是一個簡單的安裝包,可以通過linux發行版提供的yum進行安裝。
格式:ipset-6.11版本
顯示已有列表: ipset list
創建列表 : ipset create 表名 hash:net或者hash:ip hashsize 表大小 maxelem 最大條目數
其中hashsize 為表大小默認為1024 maxelem為表項數默認為65535
刪除已有表 : ipset destroy 表名
刪表中項 : ipset del 表名 項
向表添加網段: ipset add 表名 IP/掩碼位
測試是否在表中 iptest test 表名 項
表要關聯到防火牆,例如做nat匹配
iptables -t nat -A POSTROUTING -m set --set 表名 src -m set --set 目的表名 dst -j SNAT --to NAT后地址
這條就是同時匹配源地址和目的地址的NAT轉換(記得要開啟sysctl的ip轉發)
舉例:
下面的ipset/iptables命令:
ipset create myset hash:ip
ipset add myset 1.1.1.1
ipset add myset 2.2.2.2
iptables -A INPUT -m set --set myset src -j DROP
上面的命令創建了兩個地址(1.1.1.1 and 2.2.2.2)的集合(myset表類型是haship,還可以是hashnet) 然后iptables命令通過-m set --set myset src這個選項使用這個集合,這個匹配規則的意思是“匹配源地址包含在集合myset中的數據包”。src表示源地址,dst表示目標地址。如果同時使用src和dst表示既要匹配源地址又要匹配目的地址。
ipset還有另一個應用。假設有一個本地LAN (10.0.0.0/24)需要連接到internet,除此之外還有三個本地網絡(10.30.30.0/24, 10.40.40.0/24, 192.168.4.0/23 和 172.22.0.0/22),執行下面的命令: ipset create routed_nets hash:net
ipset add routed_nets 10.30.30.0/24
ipset add routed_nets 10.40.40.0/24
ipset add routed_nets 192.168.4.0/23
ipset add routed_nets 172.22.0.0/22
iptables -t nat -A POSTROUTING \
-s 10.0.0.0/24 \
-m set ! --set routed_nets dst \
-j MASQUERADE
如你所見,ipset 簡單的實現了精確匹配。該規則偽裝所有來自(10.0.0.0/24)的數據包,而不處理其他在routed_nets集合中的網絡的包。由於該配置完全基於網絡地址,所以你完全不用擔心其他特殊的網絡連接(比如VPN),也不用擔心物理接口和網絡拓撲。
參考文章:http://sw5720.blog.51cto.com/8812314/1623378