如何使用 Ipset 阻止來自國家/地區的 IP

之前我們學習瞭如何使用 GeoIP 限製或允許特定國家/地區,但在本文中,我們將介紹如何使用 ipset 模塊和 iptables 來阻止大 IP 範圍。 IPset 是一個基於命令行的實用程序,用於管理 Linux 內核中稱為 IP 集的框架。 IP 集可以以某種方式存儲 IP 地址、網絡、(TCP/UDP)端口號、MAC 地址、接口名稱或它們的組合,以確保在將條目與集匹配時閃電般的速度。 它是 iptables Linux 防火牆的關聯應用程序,它允許我們快速輕鬆地設置規則來阻止一組 IP 地址。 在這裡,我們將看到如何使用帶有 iptables 的 ipset 模塊來阻止基於 linux 的機器中的大範圍 IP 地址。

更新我們的系統

首先,我們需要在我們的 linux 機器上升級我們的軟件包,以便我們的軟件包是最新的。 為了升級我們的系統,我們需要確保我們正在運行 sudo 或 root 用戶。 為了切換到 sudo 或 root 訪問,我們將運行以下命令。

$ sudo -s

一旦我們成為 root,我們現在將繼續更新和升級我們的系統。

基於 Debian 的系統

# apt update && apt upgrade

基於紅帽的系統

# yum update

安裝 IPset

如今,大多數 linux 發行版(如 Ubuntu、Debian)都預裝了 ipset。 但是像 Centos 這樣的一些發行版沒有預先安裝,所以我們需要在它們上安裝。 我們可以根據您正在運行的發行版通過運行以下命令來安裝它。

基於 Debian 的系統

# apt install ipset

基於紅帽的系統

# yum install ipset

創建 IP 集

現在,因為我們已經在我們的機器上安裝了 ipset,我們現在將繼續創建 IP 集。 在這裡,我們需要創建一個 ipset,其中包含我們願意阻止或限制的網絡子網。 因此,首先我們需要獲取我們願意添加到 IP 集中的網絡子網列表。 為了獲得最新的網絡子網,我們將使用最受歡迎的站點之一 國家 IP 塊 我們可以從 國家選擇 網站的頁面。 在這裡,我們選擇了中國的幾個網絡子網進行測試。

1.0.1.0/24
1.0.2.0/23
1.0.8.0/21
1.0.32.0/19
1.1.0.0/24
1.1.2.0/23
1.10.8.0/23
1.202.0.0/15
5.10.68.240/29
5.10.70.40/30
5.10.72.16/29

這是我們將在本文中阻止的網絡子網示例,但在現實世界中,我們將擁有大量子網。 因此,我們將使用任何腳本/編程語言並生成如下命令列表。

# ipset create countryblock nethash
# ipset add countryblock 1.0.1.0/24
# ipset add countryblock 1.0.2.0/23
# ipset add countryblock 1.0.8.0/21
# ipset add countryblock 1.1.0.0/24
# ipset add countryblock 1.1.2.0/23
# ipset add countryblock 1.10.8.0/23
# ipset add countryblock 1.202.0.0/15
# ipset add countryblock 5.10.68.240/29
# ipset add countryblock 5.10.70.40/30
# ipset add countryblock 5.10.72.16/29

應用IP集

現在,隨著我們的 ip 集準備就緒,我們現在將使用 ipset 模塊和 iptables 應用這些 ip 集來阻止。

# iptables -A INPUT -m set --match-set countryblock src -j DROP

上面的命令會阻止來自上面生成的稱為 countryblock 的集合中的子網定義的 ip 範圍的流量。 因此,列出的所有 IP 都將被阻止。

永久應用規則

如果我們準備好測試我們的配置和規則,我們可能希望使更改持久化,以便在每次重新啟動時應用規則。 為此,我們需要針對防火牆控制器運行以下命令。

在基於 Debian 的系統上

# ipset save > /etc/ipset.up.rules
# iptables-save > /etc/iptables/rules.v4

一旦我們運行上面的命令來保存規則,我們現在將通過添加以下幾行來使規則在每次重啟時加載 /etc/rc.local 。

ipset restore < /etc/ipset.up.rules
iptables-restore < /etc/iptables/rules.v4

在基於 RHEL 的系統上

#ipset save > /etc/ipset.up.rules
# iptables-save > /etc/sysconfig/iptables

一旦我們保存了 ipset 和 iptables 的規則,我們現在將添加恢復命令,就像我們為 Debian 所做的那樣。 我們只需在裡面添加以下命令 /etc/rc.local 文件。

ipset restore < /etc/ipset.up.rules
iptables-restore < /etc/sysconfig/iptables

通過這種方式,我們可以使用帶有 iptables 的 ipset 模塊來阻止某些 ips 塊。 我們可以創建不同國家的ip集,以便我們可以根據需要應用它們。 當我們需要阻止來自特定國家或地區的特定流量但允許我們需要的 IP 範圍時,這種方法非常有效。 有很多用於這些的防火牆和 iptables 模塊,但使用起來非常簡單、快速和方便。 因此,如果您有任何問題、建議、反饋,請將它們寫在下面的評論框中。 謝謝 ! 享受 :-)