การกำหนดค่า IPTables อย่างง่ายและตัวอย่างบน Ubuntu 16.04

บทนำ

iptablesเป็นเครื่องมือที่มีประสิทธิภาพที่ใช้ในการกำหนดค่าไฟร์วอลล์รวมของเคอร์เนล Linux มันติดตั้งมาล่วงหน้าบน Ubuntu ส่วนใหญ่อย่างไรก็ตามถ้าคุณใช้รุ่น Ubuntu ที่กำหนดเองหรือใช้งานภายในคอนเทนเนอร์คุณมักจะต้องติดตั้งด้วยตนเอง

sudo apt-get install iptables iptables-persistent

หลังจากการติดตั้งหากคุณถูกถามว่าจะบันทึกกฎปัจจุบันของคุณหรือไม่มันไม่สำคัญในขณะนี้เพราะคุณกำลังจะลบหรือสร้างกฎใหม่ในภายหลัง

เคล็ดลับ

คุณสามารถใช้netcatคำสั่ง (ในที่แตกต่างกันคอมพิวเตอร์กว่าเซิร์ฟเวอร์ของคุณ) ในการทดสอบซึ่งของพอร์ตของคุณจะเปิดหรือปิด

nc -z -w5 -v SERVER_IP PORT
  • nc คือคำสั่ง netcat
  • -z เพียงแค่ส่งแพ็คเก็ตที่ไม่มีน้ำหนักบรรทุก
  • -w5 รอนานถึง 5 วินาทีสำหรับการตอบกลับ
  • -v โหมด verbose
  • แทนที่SERVER_IPด้วยที่อยู่เซิร์ฟเวอร์ของคุณ
  • แทนที่PORTด้วยพอร์ตที่คุณต้องการทดสอบว่าเปิดอยู่หรือไม่ (เช่น22)

บนเซิร์ฟเวอร์ของคุณคุณสามารถใช้netstatคำสั่งเพื่อดูพอร์ตที่กำลังรับฟังการเชื่อมต่ออยู่

sudo netstat -tulpn

หมายเหตุ: แม้ว่าnetstatเป็นประโยชน์ในการค้นหาพอร์ตที่คุณต้องการที่จะทำงานร่วมกับคุณควรจะตระหนักถึงการใช้งานในปัจจุบันคุณได้ติดตั้งบนเซิร์ฟเวอร์ของคุณและพอร์ตกำลังฟังเพลงคุณไม่ต้องอนุญาตให้มีพอร์ตที่คุณพบในทุกnetstatเอาท์พุท

วากยสัมพันธ์

sudo iptables -A INPUT -p tcp -m tcp --dport 22 --m geoip --src-cc PE -j ACCEPT
  • -A INPUTเพิ่มกฎกับINPUTห่วงโซ่ห่วงโซ่คือกลุ่มของกฎที่เราใช้มากที่สุดในคู่มือนี้จะเป็นINPUT, และOUTPUTPREROUTING
  • -p tcpชุดtcpเป็นโปรโตคอลกฎนี้จะมีผลกับคุณยังสามารถใช้โปรโตคอลอื่น ๆ เช่นudp, หรือicmpall
  • -m tcpใช้tcpโมดูล iptablesรองรับคุณสมบัติเพิ่มเติมผ่านโมดูลซึ่งบางส่วนได้ติดตั้งไว้แล้วiptablesและอื่น ๆ เช่นgeoipโมดูล
  • --dport 22คำสั่งที่เริ่มต้นด้วย--ระบุตัวเลือกเพิ่มเติมสำหรับโมดูลที่ใช้ก่อนหน้านี้ในกรณีนี้เราจะบอกให้tcpโมดูลใช้กับพอร์ต22เท่านั้น
  • -m geoipใช้geoipโมดูล มันจะ จำกัด แพ็คเก็ตในแต่ละประเทศ (ข้อมูลเพิ่มเติมในขั้นตอนที่ 5)
  • --src-cc PEบอกให้geoipโมดูล จำกัด จำนวนแพ็คเก็ตที่เข้ามาให้กับคนที่มาจากเปรู สำหรับรหัสประเทศเพิ่มเติมค้นหาISO 3166 country codesบนอินเทอร์เน็ต
  • -j ACCEPT-jอาร์กิวเมนต์บอกiptablesว่าจะทำอย่างไรถ้าแพ็คเก็ต จำกัด ตรงกับที่ระบุไว้ในข้อโต้แย้งก่อนหน้านี้ ในกรณีนี้มันจะACCEPTแพ็คเก็ตเหล่านั้นตัวเลือกอื่น ๆREJECT, DROPและอื่น ๆ คุณสามารถค้นหาตัวเลือกเพิ่มเติมได้โดยค้นหาiptables jump targetsบนอินเทอร์เน็ต

1. พื้นฐาน

รายการกฎทั้งหมด

sudo iptables -L

รายการคำสั่งทั้งหมดที่ใช้ในการสร้างกฎที่ใช้ในปัจจุบันมีประโยชน์ในการแก้ไขหรือลบกฎ

sudo iptables -S

ลบกฎที่เฉพาะเจาะจงเลือกจากกฎsudo iptables -Sและแทนที่ด้วย-A-D

# -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

sudo iptables -D INPUT -p tcp -m tcp --dport 22 -j ACCEPT

รายการกฎที่มีหมายเลขทั้งหมดในINPUTห่วงโซ่

sudo iptables -L INPUT --line-numbers

ลบกฎที่มีหมายเลข

sudo iptables -D INPUT 2

เพื่อล้างกฎทั้งหมด

sudo iptables -F

คำเตือน: คุณอาจสูญเสียการเชื่อมต่อถ้าเชื่อมต่อกันด้วย SSH

ล้างกฎเท่านั้นในOUTPUTห่วงโซ่

sudo iptables -F OUTPUT

2. สร้างกฎเริ่มต้น

อนุญาตให้ใช้SSHบนeth0ส่วนต่อประสาน

sudo iptables -A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
  • -i eth0 ใช้กฎกับอินเตอร์เฟสเฉพาะเพื่ออนุญาตจากอินเตอร์เฟสใด ๆ ให้ลบคำสั่งนี้

เพื่อ จำกัด แพ็คเก็ตที่เข้ามาให้เฉพาะ IP (เช่น10.0.3.1/32)

sudo iptables -A INPUT -i eth0 -s 10.0.3.1/32 -p tcp -m tcp --dport 22 -j ACCEPT
  • -s 10.0.3.1/32 ระบุ IP / ซับเน็ตเพื่ออนุญาตการเชื่อมต่อ

ตั้งกฎลูกโซ่เริ่มต้น

คำเตือน: ก่อนที่จะดำเนินการให้แน่ใจว่าคุณได้ใช้กฎ SSH ที่ถูกต้องถ้าทำงานบนเซิร์ฟเวอร์ระยะไกล

sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP 
sudo iptables -P OUTPUT ACCEPT 
  • -P INPUT DROP ปฏิเสธแพ็กเก็ตที่เข้ามาทั้งหมด (เช่นจะไม่มีใครสามารถเชื่อมต่อกับเซิร์ฟเวอร์ที่ใช้งานอยู่ของคุณเช่น Apache, SQL, ฯลฯ )
  • -P FORWARD DROP ปฏิเสธแพ็กเก็ตที่ส่งต่อทั้งหมด (เช่นเมื่อคุณใช้ระบบของคุณเป็นเราเตอร์)
  • -P OUTPUT ACCEPTอนุญาตให้ใช้แพ็กเก็ตขาออกทั้งหมด (เช่นเมื่อคุณดำเนินการHTTPตามคำขอ)

อนุญาตการรับส่งข้อมูลทั้งหมดบนอินเทอร์เฟซวนรอบ ( แนะนำ )

sudo iptables -A INPUT -i lo -j ACCEPT
sudo iptables -A OUTPUT -o lo -j ACCEPT

3. สร้างกฎถาวร

บันทึกiptablesกฎปัจจุบัน

sudo netfilter-persistent save
sudo netfilter-persistent reload

หากคุณกำลังทำงานภายในคอนเทนเนอร์netfilter-persistentคำสั่งส่วนใหญ่จะไม่ทำงานดังนั้นคุณต้องกำหนดค่าiptables-persistentแพคเกจใหม่

sudo dpkg-reconfigure iptables-persistent

4. อนุญาตการเชื่อมต่อขาออก

อนุญาตการสืบค้น DNS

sudo iptables -A OUTPUT -p tcp --dport 53 -m state --state NEW -j ACCEPT
sudo iptables -A OUTPUT -p udp --dport 53 -m state --state NEW -j ACCEPT

ใช้stateโมดูลเพื่ออนุญาตRELATEDและESTABLISHEDส่งแพ็กเก็ต

sudo iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

อนุญาตพอร์ตที่ต้องการ ในกรณีนี้HTTPพอร์ต

sudo iptables -A OUTPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT

พอร์ตอื่น ๆ ที่คุณอาจต้องการใช้

  • FTP: tcp ที่พอร์ต 21
  • HTTPS: tcp ที่พอร์ต 443
  • DHCP: udp ที่พอร์ต 67
  • NTP: udp ที่พอร์ต 123

หมายเหตุ: หากคุณต้องการให้apt-getมันอาจจะเป็นสิ่งจำเป็นที่จะช่วยให้FTPHTTPSและ

อนุญาตการรับส่งข้อมูลที่ส่งคืนสำหรับการเชื่อมต่อRELATEDแล้วเท่านั้นESTABLISHED( แนะนำเนื่องจากบางครั้งจำเป็นต้องใช้การสื่อสารแบบสองทิศทาง)

sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
กฎที่มีประโยชน์อื่น ๆ

อนุญาตคำขอ ping จากภายนอก

sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

ส่งต่อทราฟฟิกบนeth0พอร์ต2200ไปยัง10.0.3.21:22(มีประโยชน์หากคุณต้องการเปิดเผยเซิร์ฟเวอร์ SSH ที่กำลังทำงานอยู่ภายในคอนเทนเนอร์)

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 2200 -j DNAT --to-destination 10.0.3.21:22

หากคุณลงชื่อเข้าใช้เซิร์ฟเวอร์ของคุณสำเร็จโดยใช้ SSH การเชื่อมต่อแบบถาวรจะถูกสร้างขึ้น (เช่นไม่มีการเชื่อมต่อใหม่แม้ว่าคุณจะเชื่อมต่อมากกว่า 1 ชั่วโมง) หากคุณล้มเหลวและลองลงชื่อเข้าใช้อีกครั้งการเชื่อมต่อใหม่จะถูกสร้างขึ้น วิธีนี้จะบล็อกความพยายามในการเข้าสู่ระบบ SSH อย่างต่อเนื่องโดย จำกัด การเชื่อมต่อใหม่ต่อชั่วโมง

sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
sudo iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 3600 --hitcount 4 -j DROP

เปลี่ยนเส้นทางคำร้องขอทั้งหมดบนพอร์ต443ไปยังพอร์ต4430(มีประโยชน์หากคุณต้องการผูกกับพอร์ต443โดยไม่มีroot)

sudo iptables -t nat -A PREROUTING -i ens3 -p tcp --dport 443 -j REDIRECT --to-port 4430
sudo iptables -A INPUT -p tcp -m tcp --dport 4430 -m geoip --src-cc PE -j ACCEPT
  • ens3 เชื่อมต่อเครือข่าย
  • -m geoip โมดูลบล็อกประเทศ (ดูขั้นตอนที่ 5)

คำเตือน: อย่าใช้loระบบปฏิบัติการจะยกเลิกแพ็กเก็ตทั้งหมดเปลี่ยนเส้นทางไปยังอินเตอร์เฟซที่ย้อนกลับ

5. อนุญาตหรือบล็อกทั้งประเทศ

5.1 การติดตั้ง xtables-addons

คุณสามารถติดตั้งxtables-addonsโมดูลได้หลายวิธีอย่าลังเลที่จะใช้วิธีการติดตั้งที่เหมาะกับคุณที่สุด

  • apt-getติดตั้งโดยใช้

    sudo apt-get install xtables-addons-common
    
  • module-assistantติดตั้งโดยใช้

    sudo apt-get install module-assistant xtables-addons-source
    sudo module-assistant --verbose --text-mode auto-install xtables-addons
    
  • ติดตั้งจากแหล่งที่มา

    sudo apt-get install git bc libncurses5-dev libtext-csv-xs-perl autoconf automake libtool xutils-dev iptables-dev
    git clone git://git.code.sf.net/p/xtables-addons/xtables-addons
    cd xtables-addons
    ./autogen.sh
    ./configure
    make
    sudo make install
    

สร้างฐานข้อมูล "ประเทศ"

sudo apt-get install libtext-csv-xs-perl unzip
sudo mkdir /usr/share/xt_geoip
sudo /usr/lib/xtables-addons/xt_geoip_dl
sudo /usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv
sudo rm GeoIPCountryCSV.zip GeoIPCountryWhois.csv GeoIPv6.csv

รีบูตระบบของคุณ

sudo reboot

หลังจากxtables-addonsติดตั้งสำเร็จแล้วหลังจากรีบูตครั้งแรกให้รันdepmodมิฉะนั้นการบล็อกประเทศจะไม่สามารถทำงานได้อย่างถูกต้อง (จำเป็นต้องใช้ในครั้งแรกเท่านั้น)

sudo depmod 

สร้างสคริปต์ที่/etc/cron.monthly/geoip-updaterเพื่ออัปเดตgeoipฐานข้อมูลรายเดือน

#!/usr/bin/env bash
# this script is intended to run with sudo privileges

echo 'Removing old database---------------------------------------------------'
rm -rf /usr/share/xt_geoip/*
mkdir -p /usr/share/xt_geoip

echo 'Downloading country databases-------------------------------------------'
mkdir /tmp/geoip-updater
cd /tmp/geoip-updater
/usr/lib/xtables-addons/xt_geoip_dl

echo 'Building geoip database-------------------------------------------------'
/usr/lib/xtables-addons/xt_geoip_build -D /usr/share/xt_geoip *.csv

echo 'Removing temporary files------------------------------------------------'
cd /tmp
rm -rf /tmp/geoip-updater

ทำให้/etc/cron.monthly/geoip-updaterปฏิบัติการ

sudo chmod +x /etc/cron.monthly/geoip-updater

5.2 ตัวอย่างกฎ

_Note: หากคุณได้รับiptables: No chain/target/match by that nameข้อผิดพลาดเมื่อพยายามใช้geoipกฎอาจเป็นไปได้ว่าxtables-addonsติดตั้งไม่ถูกต้อง ลองวิธีการติดตั้งอื่น

บล็อกแพ็คเก็ตที่เข้ามาทั้งหมดจากจีน, ฮ่องกง, รัสเซียและเกาหลี

sudo iptables -A INPUT -m geoip --src-cc CN,HK,RU,KR -j DROP

อนุญาตให้แพ็คเก็ตที่เข้ามาในพอร์ต80จากทุกที่ยกเว้นประเทศข้างต้น

sudo iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

อนุญาตให้แพ็กเก็ตที่เข้ามาบนens3อินเทอร์เฟซบนพอร์ต22จากเปรูเท่านั้น (อย่าลังเลที่จะเลือกรหัสประเทศที่คุณต้องการรับแพ็คเก็ตจากตัวอย่างเช่นUSสำหรับสหรัฐอเมริกา)

sudo iptables -A INPUT -i ens3 -p tcp -m tcp --dport 22 -m geoip --src-cc PE -j ACCEPT

อนุญาตให้แพ็กเก็ตขาเข้าบนพอร์ต443จากเปรูเท่านั้น

sudo iptables -A INPUT -p tcp -m tcp --dport 443 -m geoip --src-cc PE -j ACCEPT

ฝากความเห็น

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

เรียนรู้วิธีการตั้งค่า Nginx บน Ubuntu สำหรับการสตรีมวิดีโอสด HLS ด้วยคำแนะนำที่ชัดเจนและเป็นประโยชน์

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

เรียนรู้การใช้ Percona XtraBackup สำหรับการสำรองข้อมูลด้วยวิธีที่เป็นระบบและง่ายดายบน WordPress ออนไลน์ของคุณ

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true