Ipset

出自 Arch Linux 中文维基

ipset是 Linux 防火牆 iptables 的一個協助工具。 通過這個工具可以輕鬆愉快地屏蔽一組IP地址。

安裝[編輯 | 編輯原始碼]

安裝軟件包 ipset

配置[編輯 | 編輯原始碼]

屏蔽一組地址[編輯 | 編輯原始碼]

先創建一個新的網絡地址的"集合"。下面的命令創建了一個新的叫做"myset"的"net"網絡地址的"hash"集合。

# ipset create myset hash:net

# ipset -N myset nethash

把希望屏蔽的IP地址添加到集合中。

# ipset add myset 14.144.0.0/12
# ipset add myset 27.8.0.0/13
# ipset add myset 58.16.0.0/15

最後,配置 iptables,屏蔽這個集合中的所有地址。這個命令將會向"INPUT"鏈頂端添加一個規則來從 ipset 中 "-m" 匹配名為 "myset" 的集合,當匹配到的包是一個"src"包時,"DROP"屏蔽掉它。

# iptables -I INPUT -m set --match-set myset src -j DROP

屏蔽多個 IP 地址[編輯 | 編輯原始碼]

先創建一個 IP 地址"集合",下面命令創建一個 "myset-ip" 散列集合。

# ipset create myset-ip hash:ip

# ipset -N myset-ip iphash

將要屏蔽的地址加入此集合:

# ipset add myset-ip 1.1.1.1
# ipset -A myset-ip 2.2.2.2

最後,用 iptables 屏蔽集合中的所有地址.

# iptables -I INPUT -m set --match-set myset-ip src -j DROP

使ipset持久化[編輯 | 編輯原始碼]

上面創建的 ipset 存在於內存中,重啟後將會消失。要使ipset持久化,你要這樣做:

首先把 ipset 保存到 /etc/ipset.conf:

# ipset save > /etc/ipset.conf

然後啟用 ipset.service, 與 iptables.service相似,這個服務用於恢復iptables 規則

使用PeerGuardian和其它列表屏蔽[編輯 | 編輯原始碼]

maeyanie.com所作的pg2ipset-gitAURipset-update.sh 腳本配合可以用cron來自動更新多個屏蔽列表。 當前實現了按默認國家屏蔽,tor退出節點屏蔽,和來自Bluetack的pg2列表屏蔽。

其他命令[編輯 | 編輯原始碼]

查看集合。

# ipset list

刪除名為"myset"的集合。

# ipset destroy myset

刪除所有集合。

# ipset destroy

更多信息請參考ipset的man手冊頁。

優化[編輯 | 編輯原始碼]

iprangeAUR工具可以通過合併相鄰範圍或消除重複範圍來幫助減少ipset.conf中的項目。 在表的大小很大時,這有助於改善路由/防火牆的性能。這個工具也可以把一個主機名的列錶轉換成IP列表。

雖然 ipset 設計上可以支持非常大的屏蔽,但並不是無限的。有些國家的 IP 地址空間非常龐大,所以按區域屏蔽的效果並不理想。