งานบล็อกการรับส่งข้อมูลจากบางประเทศดูเหมือนง่าย แต่ความประทับใจแรกอาจหลอกลวงได้ วันนี้เราจะมาบอกคุณว่าสิ่งนี้สามารถนำไปใช้ได้อย่างไร
ประวัติศาสตร์
ผลลัพธ์ของการค้นหาโดย Google ในหัวข้อนี้น่าผิดหวัง: วิธีแก้ปัญหาส่วนใหญ่ "เน่าเสีย" มานานแล้วและบางครั้งดูเหมือนว่าหัวข้อนี้จะถูกเก็บเข้าลิ้นชักและลืมไปตลอดกาล เราได้รวบรวมบันทึกเก่าๆ มากมายและพร้อมที่จะแบ่งปันคำแนะนำเวอร์ชันที่ทันสมัย
เราขอแนะนำให้คุณอ่านบทความทั้งหมดก่อนดำเนินการคำสั่งเหล่านี้
การจัดทำระบบปฏิบัติการ
การกรองจะถูกกำหนดค่าโดยใช้ยูทิลิตี้ iptablesซึ่งต้องมีส่วนขยายเพื่อทำงานกับข้อมูล GeoIP ส่วนขยายนี้สามารถพบได้ใน
ในขณะที่เขียน 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 ซึ่งจัดจำหน่ายภายใต้ลิขสิทธิ์ ถูกใช้เป็นฐานข้อมูล
ประการแรกในเดือนมกราคม 2018
ประการที่สอง ตั้งแต่เดือนธันวาคม 2019 MaxMind
เนื่องจากเราต้องการใช้ผลิตภัณฑ์ของพวกเขา เราจะลงทะเบียนในหน้านี้
จากนั้นคุณจะได้รับอีเมลขอให้คุณตั้งรหัสผ่าน ตอนนี้เราได้สร้างบัญชีแล้ว เราจำเป็นต้องสร้างรหัสใบอนุญาต ในบัญชีส่วนตัวของคุณ เราจะพบรายการดังกล่าว รหัสใบอนุญาตของฉันจากนั้นคลิกที่ปุ่ม สร้างรหัสใบอนุญาตใหม่.
เมื่อสร้างคีย์เราจะถามคำถามเดียว: เราจะใช้คีย์นี้ในโปรแกรม GeoIP Update หรือไม่ เราตอบเชิงลบแล้วกดปุ่ม ยืนยัน. คีย์จะแสดงในหน้าต่างป๊อปอัป บันทึกคีย์นี้ไว้ในที่ปลอดภัย เนื่องจากเมื่อคุณปิดหน้าต่างป๊อปอัป คุณจะไม่สามารถดูคีย์ทั้งหมดได้อีกต่อไป
เรามีความสามารถในการดาวน์โหลดฐานข้อมูล 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
และไฟล์เอาต์พุตประกอบด้วยหกคอลัมน์:
- จุดเริ่มต้นของช่วงที่อยู่ (การแสดงสตริง);
- จุดสิ้นสุดของช่วงที่อยู่ (การแสดงสตริง);
- จุดเริ่มต้นของช่วงที่อยู่ (การแสดงตัวเลข);
- จุดสิ้นสุดของช่วงที่อยู่ (การแสดงตัวเลข);
- รหัสของประเทศ
- ชื่อประเทศ
ความคลาดเคลื่อนนี้มีความสำคัญและสามารถแก้ไขได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี:
- แก้ไข 20_convert_geolite2;
- แก้ไข xt_geoip_build.
ในกรณีแรกเราลด
/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
โปรดทราบว่าผู้เขียน
เวอร์ชันต้นทาง
เมื่อติดตั้งจากสคริปต์ซอร์สโค้ด xt_geoip_* อยู่ในแค็ตตาล็อก /usr/local/libexec/xtables-addons. สคริปต์เวอร์ชันนี้ใช้ฐานข้อมูล
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 ใหม่จะปรากฏในตัวจัดการแพ็คเกจซึ่งจะทำให้อายุการใช้งานของผู้ดูแลระบบง่ายขึ้นอย่างมาก
เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้
คุณเคยใช้การกรองตามประเทศหรือไม่?
-
ลด 59,1%ใช่13
-
ลด 40,9%หมายเลข 9
ผู้ใช้ 22 คนโหวต งดออกเสียง 3 ราย
ที่มา: will.com