ค้นหาเว็บไซต์

ซีรี่ส์ RHCSA: สิ่งจำเป็นสำหรับไฟร์วอลล์และการควบคุมการรับส่งข้อมูลเครือข่ายโดยใช้ FirewallD และ Iptables - ตอนที่ 11


พูดง่ายๆ ก็คือ ไฟร์วอลล์คือระบบรักษาความปลอดภัยที่ควบคุมการรับส่งข้อมูลขาเข้าและขาออกในเครือข่ายตามกฎที่กำหนดไว้ล่วงหน้า (เช่น ปลายทางแพ็กเก็ต/แหล่งที่มา หรือประเภทของการรับส่งข้อมูล เป็นต้น) .

ในบทความนี้ เราจะทบทวนพื้นฐานของ ไฟร์วอลล์ ซึ่งเป็นดีมอนไฟร์วอลล์ไดนามิกเริ่มต้นใน Red Hat Enterprise Linux 7 และบริการ iptables ซึ่งเป็นบริการแบบเดิม บริการไฟร์วอลล์สำหรับ Linux ซึ่งผู้ดูแลระบบและเครือข่ายส่วนใหญ่คุ้นเคยดี และมีอยู่ใน RHEL 7 ด้วย

การเปรียบเทียบระหว่าง FirewallD และ Iptables

ภายใต้ประทุน ทั้งบริการ firewalld และบริการ iptables พูดคุยกับเฟรมเวิร์ก netfilter ในเคอร์เนลผ่านอินเทอร์เฟซเดียวกัน จึงไม่น่าแปลกใจเลยที่คำสั่ง iptables . อย่างไรก็ตาม ต่างจากบริการ iptables ไฟร์วอลล์สามารถเปลี่ยนการตั้งค่าระหว่างการทำงานของระบบปกติได้โดยไม่สูญเสียการเชื่อมต่อที่มีอยู่

ไฟร์วอลล์ ควรได้รับการติดตั้งโดยค่าเริ่มต้นในระบบ RHEL ของคุณ แม้ว่าระบบอาจไม่ได้ทำงานอยู่ก็ตาม คุณสามารถตรวจสอบได้ด้วยคำสั่งต่อไปนี้ (firewall-config เป็นเครื่องมือกำหนดค่าอินเทอร์เฟซผู้ใช้):


yum info firewalld firewall-config

และ,


systemctl status -l firewalld.service

ในทางกลับกัน บริการ iptables จะไม่รวมอยู่ในค่าเริ่มต้น แต่สามารถติดตั้งผ่านได้


yum update && yum install iptables-services

daemons ทั้งสองสามารถเริ่มต้นและเปิดใช้งานเพื่อเริ่มต้นการบูตด้วยคำสั่ง systemd ตามปกติ:


systemctl start firewalld.service | iptables-service.service
systemctl enable firewalld.service | iptables-service.service

อ่านเพิ่มเติม: คำสั่งที่เป็นประโยชน์ในการจัดการบริการ Systemd

สำหรับไฟล์การกำหนดค่า บริการ iptables จะใช้ /etc/sysconfig/iptables (ซึ่งจะไม่มีอยู่หากไม่ได้ติดตั้งแพ็คเกจในระบบของคุณ) บนกล่อง RHEL 7 ที่ใช้เป็นโหนดคลัสเตอร์ ไฟล์นี้จะมีลักษณะดังนี้:

ในขณะที่ firewalld เก็บการกำหนดค่าไว้ในสองไดเร็กทอรี /usr/lib/firewalld และ /etc/firewalld:


ls /usr/lib/firewalld /etc/firewalld

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


man firewalld.conf
man firewall-cmd
man iptables

นอกเหนือจากนั้น อย่าลืมดูการตรวจสอบคำสั่งที่จำเป็นและเอกสารระบบ – ส่วนที่ 1 ของซีรีส์ปัจจุบัน ซึ่งฉันได้อธิบายแหล่งที่มาหลายแห่งซึ่งคุณสามารถรับข้อมูลเกี่ยวกับแพ็คเกจที่ติดตั้งบนระบบ RHEL 7 ของคุณ .

การใช้ Iptables เพื่อควบคุมการรับส่งข้อมูลเครือข่าย

คุณอาจต้องการดูการกำหนดค่าไฟร์วอลล์ Iptables – ตอนที่ 8 ของซีรีส์ Linux Foundation Certified Engineer (LFCE) เพื่อรีเฟรชหน่วยความจำของคุณเกี่ยวกับ iptables ภายใน ก่อนที่จะดำเนินการต่อไป ดังนั้นเราจะสามารถกระโดดเข้าสู่ตัวอย่างได้ทันที

ตัวอย่างที่ 1: อนุญาตการรับส่งข้อมูลเว็บทั้งขาเข้าและขาออก

พอร์ต TCP 80 และ 443 เป็นพอร์ตเริ่มต้นที่ใช้โดยเว็บเซิร์ฟเวอร์ Apache เพื่อจัดการปกติ (HTTP) และปลอดภัย (HTTPS<) การเข้าชมเว็บ คุณสามารถอนุญาตการรับส่งข้อมูลเว็บขาเข้าและขาออกผ่านทั้งสองพอร์ตบนอินเทอร์เฟซ enp0s3 ได้ดังต่อไปนี้:


iptables -A INPUT -i enp0s3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o enp0s3 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -i enp0s3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o enp0s3 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
ตัวอย่างที่ 2: บล็อกการเชื่อมต่อขาเข้าทั้งหมด (หรือบางส่วน) จากเครือข่ายเฉพาะ

อาจมีบางครั้งที่คุณต้องบล็อกการรับส่งข้อมูลทั้งหมด (หรือบางส่วน) ที่มาจากเครือข่ายเฉพาะ เช่น 192.168.1.0/24 เช่น:


iptables -I INPUT -s 192.168.1.0/24 -j DROP

จะดรอปแพ็คเกจทั้งหมดที่มาจากเครือข่าย 192.168.1.0/24 ในขณะที่


iptables -A INPUT -s 192.168.1.0/24 --dport 22 -j ACCEPT

จะอนุญาตเฉพาะการรับส่งข้อมูลขาเข้าผ่านพอร์ต 22

ตัวอย่างที่ 3: เปลี่ยนเส้นทางการรับส่งข้อมูลขาเข้าไปยังปลายทางอื่น

หากคุณใช้กล่อง RHEL 7 ของคุณไม่เพียงแต่เป็นไฟร์วอลล์ซอฟต์แวร์เท่านั้น แต่ยังเป็นกล่องที่ใช้ฮาร์ดแวร์จริงด้วย เพื่อให้ตั้งอยู่ระหว่างสองเครือข่ายที่แตกต่างกัน การส่งต่อ IP จะต้องเปิดใช้งานในระบบของคุณแล้ว . หากไม่เป็นเช่นนั้น คุณต้องแก้ไข /etc/sysctl.conf และตั้งค่า net.ipv4.ip_forward เป็น 1 ดังนี้:


net.ipv4.ip_forward = 1

จากนั้นบันทึกการเปลี่ยนแปลง ปิดโปรแกรมแก้ไขข้อความ และสุดท้ายให้รันคำสั่งต่อไปนี้เพื่อใช้การเปลี่ยนแปลง:


sysctl -p /etc/sysctl.conf

ตัวอย่างเช่น คุณอาจติดตั้งเครื่องพิมพ์ไว้ที่กล่องภายในที่มี IP 192.168.0.10 โดยมีบริการ CUPS รับฟังบนพอร์ต 631 (ทั้งสอง บนเซิร์ฟเวอร์การพิมพ์และไฟร์วอลล์ของคุณ) ในการส่งต่อคำขอพิมพ์จากไคลเอนต์ที่อีกด้านหนึ่งของไฟร์วอลล์ คุณควรเพิ่มกฎ iptables ต่อไปนี้:


iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 631 -j DNAT --to 192.168.0.10:631

โปรดจำไว้ว่า iptables อ่านกฎตามลำดับ ดังนั้นโปรดตรวจสอบให้แน่ใจว่านโยบายเริ่มต้นหรือกฎที่ใหม่กว่าไม่ได้แทนที่นโยบายที่ระบุไว้ในตัวอย่างข้างต้น

เริ่มต้นใช้งานไฟร์วอลล์D

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

หากต้องการแสดงรายการโซนที่ใช้งานอยู่:


firewall-cmd --get-active-zones

ในตัวอย่างด้านล่าง โซนสาธารณะ ทำงานอยู่ และอินเทอร์เฟซ enp0s3 ถูกกำหนดให้โดยอัตโนมัติ หากต้องการดูข้อมูลทั้งหมดเกี่ยวกับโซนใดโซนหนึ่ง:


firewall-cmd --zone=public --list-all

เนื่องจากคุณสามารถอ่านเพิ่มเติมเกี่ยวกับโซนได้ในคำแนะนำด้านความปลอดภัย RHEL 7 เราจะแสดงรายการตัวอย่างเฉพาะบางส่วนไว้ที่นี่เท่านั้น

ตัวอย่างที่ 4: การอนุญาตบริการผ่านไฟร์วอลล์

หากต้องการรับรายการบริการที่รองรับ ให้ใช้


firewall-cmd --get-services

หากต้องการอนุญาตการรับส่งข้อมูลเว็บ http และ https ผ่านไฟร์วอลล์ ซึ่งจะมีผลทันทีและในการบูตครั้งต่อไป:


firewall-cmd --zone=MyZone --add-service=http
firewall-cmd --zone=MyZone --permanent --add-service=http
firewall-cmd --zone=MyZone --add-service=https
firewall-cmd --zone=MyZone --permanent --add-service=https
firewall-cmd --reload

หากละเว้น–zone ระบบจะใช้โซนเริ่มต้น (คุณสามารถตรวจสอบด้วย firewall-cmd –get-default-zone)

หากต้องการลบกฎ ให้แทนที่คำว่า เพิ่ม ด้วยคำสั่งลบในคำสั่งด้านบน

ตัวอย่างที่ 5: การส่งต่อ IP/พอร์ต

ก่อนอื่น คุณต้องค้นหาว่ามีการเปิดใช้การพรางตัวสำหรับโซนที่ต้องการหรือไม่:


firewall-cmd --zone=MyZone --query-masquerade

ในภาพด้านล่าง เราจะเห็นว่า การปลอมตัว ถูกเปิดใช้งานสำหรับ โซนภายนอก แต่ไม่ใช่สำหรับ สาธารณะ:

คุณสามารถเปิดใช้งานการปลอมแปลงสำหรับสาธารณะได้:


firewall-cmd --zone=public --add-masquerade

หรือใช้การปลอมตัวใน ภายนอก ต่อไปนี้คือสิ่งที่เราจะทำเพื่อจำลอง ตัวอย่างที่ 3 ด้วย ไฟร์วอลล์:


firewall-cmd --zone=external --add-forward-port=port=631:proto=tcp:toport=631:toaddr=192.168.0.10

และอย่าลืมโหลดไฟร์วอลล์อีกครั้ง

คุณสามารถดูตัวอย่างเพิ่มเติมได้ในส่วนที่ 9 ของซีรีส์ RHCSA ซึ่งเราได้อธิบายวิธีการอนุญาตหรือปิดใช้งานพอร์ตที่เว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ ftp ปกติใช้ และวิธีการเปลี่ยนกฎที่เกี่ยวข้องเมื่อพอร์ตเริ่มต้นสำหรับบริการเหล่านั้น มีการเปลี่ยนแปลง นอกจากนี้ คุณอาจต้องการอ้างอิงถึงไฟร์วอลล์วิกิเพื่อดูตัวอย่างเพิ่มเติม

อ่านเพิ่มเติม: ตัวอย่างไฟร์วอลล์ที่เป็นประโยชน์ในการกำหนดค่าไฟร์วอลล์ใน RHEL 7

บทสรุป

ในบทความนี้ เราได้อธิบายว่า ไฟร์วอลล์ คืออะไร มีบริการใดบ้างที่จะนำไปใช้ใน RHEL 7 และให้ตัวอย่างบางส่วนที่สามารถช่วยคุณในการเริ่มต้นได้ งาน. หากคุณมีความคิดเห็น ข้อเสนอแนะ หรือคำถาม โปรดแจ้งให้เราทราบโดยใช้แบบฟอร์มด้านล่าง ขอบคุณล่วงหน้า!