xtables-addons:按國家/地區過濾軟體包

xtables-addons:按國家/地區過濾軟體包
阻止來自某些國家/地區的流量的任務看似簡單,但第一印象可能具有欺騙性。 今天我們將告訴您如何實現這一點。

關於這個主題的谷歌搜尋結果令人失望:大多數解決方案早已“腐爛”,有時似乎這個主題已被永遠擱置並被遺忘。 我們梳理了許多舊記錄,並準備分享現代版本的說明。

我們建議您在執行這些命令之前閱讀整篇文章。

操作系統準備

將使用該實用程式配置過濾 iptables的,這需要擴充才能處理 GeoIP 資料。 該擴展可以在以下位置找到 xtables 插件。 xtables-addons 將 iptables 的擴充功能安裝為獨立的核心模組,因此無需重新編譯作業系統核心。

在撰寫本文時,xtables-addons 的當前版本是 3.9。 但是,在標準 Ubuntu 20.04 LTS 儲存庫中只能找到 3.8,而在 Ubuntu 18.04 儲存庫中只能找到 3.0。 您可以使用以下命令從套件管理器安裝擴充功能:

apt install xtables-addons-common libtext-csv-xs-perl

請注意,3.9 版本和專案目前狀態之間存在微小但重要的差異,我們將在稍後討論。 要從原始碼構建,請安裝所有必需的軟體包:

apt install git build-essential autoconf make libtool iptables-dev libxtables-dev pkg-config libnet-cidr-lite-perl libtext-csv-xs-perl

克隆儲存庫:

git clone https://git.code.sf.net/p/xtables-addons/xtables-addons xtables-addons-xtables-addons

cd xtables-addons-xtables-addons

xtables-addons 包含許多擴展,但我們只感興趣 xt_geoip。 如果您不想將不必要的擴充功能拖曳到系統中,可以將它們從建置中排除。 為此,您需要編輯該文件 配置文件。 對於所有需要的模組,安裝 y,並標記所有不需要的 n。 我們收集:

./autogen.sh

./configure

make

並以超級使用者權限安裝:

make install

在安裝核心模組的過程中,可能會出現類似如下的錯誤:

INSTALL /root/xtables-addons-xtables-addons/extensions/xt_geoip.ko
At main.c:160:
- SSL error:02001002:system library:fopen:No such file or directory: ../crypto/bio/bss_file.c:72
- SSL error:2006D080:BIO routines:BIO_new_file:no such file: ../crypto/bio/bss_file.c:79
sign-file: certs/signing_key.pem: No such file or directory

這種情況的出現是由於無法簽署內核模組,因為沒有什麼好簽署的。 您可以透過幾個命令解決這個問題:

cd /lib/modules/(uname -r)/build/certs

cat <<EOF > x509.genkey

[ req ]
default_bits = 4096
distinguished_name = req_distinguished_name
prompt = no
string_mask = utf8only
x509_extensions = myexts

[ req_distinguished_name ]
CN = Modules

[ myexts ]
basicConstraints=critical,CA:FALSE
keyUsage=digitalSignature
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid
EOF

openssl req -new -nodes -utf8 -sha512 -days 36500 -batch -x509 -config x509.genkey -outform DER -out signing_key.x509 -keyout signing_key.pem

已編譯的核心模組已安裝,但係統未偵測到。 讓我們要求系統建立一個考慮到新模組的依賴關係圖,然後載入它:

depmod -a

modprobe xt_geoip

讓我們確保 xt_geoip 已載入到系統中:

# lsmod | grep xt_geoip
xt_geoip               16384  0
x_tables               40960  2 xt_geoip,ip_tables

此外,請確保擴充功能已載入到 iptables 中:

# cat /proc/net/ip_tables_matches 
geoip
icmp

我們對一切都很滿意,剩下的就是將模組名稱添加到 / etc /模塊以便模組在重新啟動作業系統後可以工作。 從現在開始,iptables 可以理解 geoip 命令,但它沒有足夠的資料可以使用。 讓我們開始載入 geoip 資料庫。

取得 GeoIP 資料庫

我們建立一個目錄,其中將儲存 iptables 擴充功能可以理解的資訊:

mkdir /usr/share/xt_geoip

在文章開頭,我們提到來自原始程式碼的版本和來自套件管理器的版本之間存在差異。 最明顯的區別是資料庫供應商和腳本的變化 xt_geoip_dl,下載最新數據。

套件管理器版本

腳本位於路徑 /usr/lib/xtables-addons 中,但是當您嘗試執行它時,您將看到一個資訊不多的錯誤:

# ./xt_geoip_dl 
unzip:  cannot find or open GeoLite2-Country-CSV.zip, GeoLite2-Country-CSV.zip.zip or GeoLite2-Country-CSV.zip.ZIP.

此前,GeoLite 產品(現稱為 GeoLite Legacy)經許可分發,並被用作資料庫 知識分享 ASA 4.0 公司 的MaxMind。 該產品同時發生了兩個事件,「破壞」了與 iptables 擴充功能的兼容性。

首先是2018年XNUMX月 宣布 關於終止對該產品的支持,並於2019年2月2日,從官網刪除了所有下載舊版資料庫的連結。 建議新用戶使用GeoLiteXNUMX產品或其付費版本GeoIPXNUMX。

其次,自2019年XNUMX月起MaxMind 他說 關於資料庫存取方面的重大變化。 為了遵守加州消費者隱私法,MaxMind 決定透過註冊「覆蓋」GeoLite2 的分發。

由於我們想使用他們的產品,因此我們將在此頁面上註冊。

xtables-addons:按國家/地區過濾軟體包
然後您將收到一封電子郵件,要求您設定密碼。 現在我們已經建立了一個帳戶,我們需要建立一個許可證金鑰。 在您的個人帳戶中我們找到該項目 我的許可證密鑰,然後按一下按鈕 產生新的許可證密鑰.

建立金鑰時,我們只會被問到一個問題:我們會在 GeoIP 更新程式中使用此金鑰嗎? 我們給予否定的回答並按下按鈕 確認。 該密鑰將顯示在彈出視窗中。 將此密鑰保存在安全的地方,因為一旦關閉彈出窗口,您將無法再查看整個密鑰。

xtables-addons:按國家/地區過濾軟體包
我們可以手動下載 GeoLite2 資料庫,但其格式與 xt_geoip_build 腳本所需的格式不相容。 這就是 GeoLite2xtables 腳本可以發揮作用的地方。 若要執行腳本,請安裝 NetAddr::IP perl 模組:

wget https://cpan.metacpan.org/authors/id/M/MI/MIKER/NetAddr-IP-4.079.tar.gz

tar xvf NetAddr-IP-4.079.tar.gz

cd NetAddr-IP-4.079

perl Makefile.PL

make

make install

接下來,我們使用腳本克隆儲存庫,並將先前獲得的許可證密鑰寫入檔案:

git clone https://github.com/mschmitt/GeoLite2xtables.git

cd GeoLite2xtables

echo YOUR_LICENSE_KEY=’123ertyui123' > geolite2.license

讓我們運行腳​​本:

# Скачиваем данные GeoLite2
./00_download_geolite2
# Скачиваем информацию о странах (для соответствия коду)
./10_download_countryinfo
# Конвертируем GeoLite2 базу в формат GeoLite Legacy 
cat /tmp/GeoLite2-Country-Blocks-IPv{4,6}.csv |
./20_convert_geolite2 /tmp/CountryInfo.txt > /usr/share/xt_geoip/dbip-country-lite.csv

MaxMind 限制每天 2000 次下載,並且擁有大量伺服器,並提供在代理伺服器上快取更新的功能。

請注意,輸出檔案必須被調用 dbip-國家/地區-lite.csv... 很遺憾, 20_convert_geolite2 不會產生完美的文件。 腳本 xt_geoip_build 預計三列:

  • 地址範圍的開始;
  • 地址範圍結束;
  • iso-3166-alpha2 中的國家代碼。

輸出檔包含六列:

  • 地址範圍的開始(字串表示);
  • 位址範圍結束(字串表示);
  • 地址範圍的開始(數字表示);
  • 地址範圍結束(數字表示);
  • 國家代碼;
  • 國家的名稱。

這種差異至關重要,可以透過以下兩種方式之一進行糾正:

  1. 編輯 20_convert_geolite2;
  2. 編輯 xt_geoip_build.

在第一種情況下,我們減少 的printf 到所需的格式,在第二個中 - 我們更改對變數的賦值 $抄送$行->[4]。 之後你可以建構:

/usr/lib/xtables-addons/xt_geoip_build -S /usr/share/xt_geoip/ -D /usr/share/xt_geoip

. . .
 2239 IPv4 ranges for ZA
  348 IPv6 ranges for ZA
   56 IPv4 ranges for ZM
   12 IPv6 ranges for ZM
   56 IPv4 ranges for ZW
   15 IPv6 ranges for ZW

請注意,作者 GeoLite2xtables 不認為其腳本已準備好製作並提供 追踪 用於開發原始 xt_geoip_* 腳本。 因此,讓我們從原始程式碼繼續進行程式集,其中這些腳本已經更新。

原始碼版本

從原始碼腳本安裝時 xt_geoip_* 位於目錄中 /usr/local/libexec/xtables-addons。 此版本的腳本使用資料庫 IP 到國家精簡版。 許可證是知識共享署名許可證,從現有的資料來看,有非常必要的三欄。 下載並組裝資料庫:

cd /usr/share/xt_geoip/

/usr/local/libexec/xtables-addons/xt_geoip_dl

/usr/local/libexec/xtables-addons/xt_geoip_build

完成這些步驟後,iptables 就可以開始工作了。

在 iptables 中使用 geoip

xt_geoip 僅添加兩個鍵:

geoip match options:
[!] --src-cc, --source-country country[,country...]
	Match packet coming from (one of) the specified country(ies)
[!] --dst-cc, --destination-country country[,country...]
	Match packet going to (one of) the specified country(ies)

NOTE: The country is inputed by its ISO3166 code.

一般來說,為 iptables 建立規則的方法保持不變。 若要使用其他模組中的按鍵,您必須使用 -m 開關明確指定模組的名稱。 例如,在所有介面上封鎖連接埠 443 上非來自美國的傳入 TCP 連線的規則:

iptables -I INPUT ! -i lo -p tcp --dport 443 -m geoip ! --src-cc US -j DROP

xt_geoip_build 建立的檔案僅在建立規則時使用,但在過濾時不考慮。 因此,要正確更新 geoip 資料庫,必須先更新 iv* 文件,然後在 iptables 中重新建立所有使用 geoip 的規則。

結論

根據國家過濾資料包是一種被時間遺忘的策略。 儘管如此,用於此類過濾的軟體工具正在開發中,也許很快帶有新 geoip 資料提供者的新版本 xt_geoip 將出現在套件管理器中,這將大大簡化系統管理員的工作。

xtables-addons:按國家/地區過濾軟體包

只有註冊用戶才能參與調查。 登入, 請。

您曾經使用過按國家/地區過濾嗎?

  • 企業排放佔全球 59,1%是13

  • 企業排放佔全球 40,9%9號

22 位用戶投票。 3 名用戶棄權。

來源: www.habr.com

添加評論