xtables-addons: กรองแพ็คเกจตามประเทศ

xtables-addons: กรองแพ็คเกจตามประเทศ
งานบล็อกการรับส่งข้อมูลจากบางประเทศดูเหมือนง่าย แต่ความประทับใจแรกอาจหลอกลวงได้ วันนี้เราจะมาบอกคุณว่าสิ่งนี้สามารถนำไปใช้ได้อย่างไร

ประวัติศาสตร์

ผลลัพธ์ของการค้นหาโดย Google ในหัวข้อนี้น่าผิดหวัง: วิธีแก้ปัญหาส่วนใหญ่ "เน่าเสีย" มานานแล้วและบางครั้งดูเหมือนว่าหัวข้อนี้จะถูกเก็บเข้าลิ้นชักและลืมไปตลอดกาล เราได้รวบรวมบันทึกเก่าๆ มากมายและพร้อมที่จะแบ่งปันคำแนะนำเวอร์ชันที่ทันสมัย

เราขอแนะนำให้คุณอ่านบทความทั้งหมดก่อนดำเนินการคำสั่งเหล่านี้

การจัดทำระบบปฏิบัติการ

การกรองจะถูกกำหนดค่าโดยใช้ยูทิลิตี้ iptablesซึ่งต้องมีส่วนขยายเพื่อทำงานกับข้อมูล GeoIP ส่วนขยายนี้สามารถพบได้ใน xtables-addons. xtables-addons ติดตั้งส่วนขยายสำหรับ iptables เป็นโมดูลเคอร์เนลอิสระ ดังนั้นจึงไม่จำเป็นต้องคอมไพล์เคอร์เนล OS ใหม่

ในขณะที่เขียน xtables-addons เวอร์ชันปัจจุบันคือ 3.9 อย่างไรก็ตาม มีเพียง 20.04 เท่านั้นที่สามารถพบได้ในที่เก็บ Ubuntu 3.8 LTS มาตรฐาน และ 18.04 ในที่เก็บ Ubuntu 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. หากคุณไม่ต้องการลากส่วนขยายที่ไม่จำเป็นเข้าสู่ระบบ คุณสามารถแยกส่วนขยายเหล่านั้นออกจากบิลด์ได้ ในการดำเนินการนี้ คุณจะต้องแก้ไขไฟล์ mconfig.mconfig. สำหรับโมดูลที่ต้องการทั้งหมด ให้ติดตั้ง yและทำเครื่องหมายสิ่งที่ไม่จำเป็นทั้งหมด n. เรารวบรวม:

./autogen.sh

./configure

make

และติดตั้งด้วยสิทธิ์ superuser:

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 / moduleเพื่อให้โมดูลทำงานหลังจากรีบูตระบบปฏิบัติการ จากนี้ไป 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 ประกาศ เกี่ยวกับการยุติการสนับสนุนผลิตภัณฑ์ และในวันที่ 2019 มกราคม 2 ลิงก์ดาวน์โหลดฐานข้อมูลเวอร์ชันเก่าทั้งหมดจะถูกลบออกจากเว็บไซต์อย่างเป็นทางการ ขอแนะนำให้ผู้ใช้ใหม่ใช้ผลิตภัณฑ์ GeoLite2 หรือ GeoIPXNUMX เวอร์ชันที่ต้องชำระเงิน

ประการที่สอง ตั้งแต่เดือนธันวาคม 2019 MaxMind เขากล่าวว่า เกี่ยวกับการเปลี่ยนแปลงที่สำคัญในการเข้าถึงฐานข้อมูล เพื่อให้เป็นไปตามกฎหมายความเป็นส่วนตัวของผู้บริโภคแห่งแคลิฟอร์เนีย MaxMind จึงตัดสินใจ "ครอบคลุม" การจัดจำหน่าย GeoLite2 ด้วยการลงทะเบียน

เนื่องจากเราต้องการใช้ผลิตภัณฑ์ของพวกเขา เราจะลงทะเบียนในหน้านี้

xtables-addons: กรองแพ็คเกจตามประเทศ
จากนั้นคุณจะได้รับอีเมลขอให้คุณตั้งรหัสผ่าน ตอนนี้เราได้สร้างบัญชีแล้ว เราจำเป็นต้องสร้างรหัสใบอนุญาต ในบัญชีส่วนตัวของคุณ เราจะพบรายการดังกล่าว รหัสใบอนุญาตของฉันจากนั้นคลิกที่ปุ่ม สร้างรหัสใบอนุญาตใหม่.

เมื่อสร้างคีย์เราจะถามคำถามเดียว: เราจะใช้คีย์นี้ในโปรแกรม GeoIP Update หรือไม่ เราตอบเชิงลบแล้วกดปุ่ม ยืนยัน. คีย์จะแสดงในหน้าต่างป๊อปอัป บันทึกคีย์นี้ไว้ในที่ปลอดภัย เนื่องจากเมื่อคุณปิดหน้าต่างป๊อปอัป คุณจะไม่สามารถดูคีย์ทั้งหมดได้อีกต่อไป

xtables-addons: กรองแพ็คเกจตามประเทศ
เรามีความสามารถในการดาวน์โหลดฐานข้อมูล GeoLite2 ด้วยตนเอง แต่รูปแบบของฐานข้อมูลไม่เข้ากันกับรูปแบบที่สคริปต์ xt_geoip_build คาดไว้ นี่คือจุดที่สคริปต์ GeoLite2xtables เข้ามาช่วยเหลือ หากต้องการเรียกใช้สคริปต์ ให้ติดตั้งโมดูล Perl ของ NetAddr::IP:

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-country-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 เป็น Country Lite. ใบอนุญาตนี้เป็น Creative Commons Attribution License และจากข้อมูลที่มีอยู่ มีสามคอลัมน์ที่จำเป็นอย่างยิ่ง ดาวน์โหลดและประกอบฐานข้อมูล:

cd /usr/share/xt_geoip/

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

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

หลังจากขั้นตอนเหล่านี้ iptables ก็พร้อมที่จะทำงาน

การใช้ geoip ใน iptables

โมดึล 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 ตัวอย่างเช่น กฎสำหรับบล็อกการเชื่อมต่อ TCP ขาเข้าบนพอร์ต 443 ไม่ใช่จากสหรัฐอเมริกาบนอินเทอร์เฟซทั้งหมด:

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

ไฟล์ที่สร้างโดย xt_geoip_build จะใช้เมื่อสร้างกฎเท่านั้น แต่จะไม่นำมาพิจารณาเมื่อกรอง ดังนั้น หากต้องการอัปเดตฐานข้อมูล geoip อย่างถูกต้อง คุณต้องอัปเดตไฟล์ iv* ก่อน จากนั้นจึงสร้างกฎทั้งหมดที่ใช้ geoip ใน iptables ขึ้นมาใหม่

ข้อสรุป

การกรองแพ็กเก็ตตามประเทศเป็นกลยุทธ์ที่อาจถูกลืมไปตามเวลา อย่างไรก็ตามเครื่องมือซอฟต์แวร์สำหรับการกรองดังกล่าวกำลังได้รับการพัฒนาและบางทีในไม่ช้า xt_geoip เวอร์ชันใหม่พร้อมผู้ให้บริการข้อมูล geoip ใหม่จะปรากฏในตัวจัดการแพ็คเกจซึ่งจะทำให้อายุการใช้งานของผู้ดูแลระบบง่ายขึ้นอย่างมาก

xtables-addons: กรองแพ็คเกจตามประเทศ

เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้ เข้าสู่ระบบ, โปรด.

คุณเคยใช้การกรองตามประเทศหรือไม่?

  • ลด 59,1%ใช่13

  • ลด 40,9%หมายเลข 9

ผู้ใช้ 22 คนโหวต งดออกเสียง 3 ราย

ที่มา: will.com

เพิ่มความคิดเห็น