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

วิธีดำเนินการกรองแพ็คเก็ต การแปลที่อยู่เครือข่าย และตั้งค่าพารามิเตอร์รันไทม์เคอร์เนล - ส่วนที่ 2


ตามที่สัญญาไว้ในส่วนที่ 1 (“การตั้งค่าการกำหนดเส้นทางเครือข่ายแบบคงที่”) ในบทความนี้ (ส่วนที่ 2 ของชุด RHCE) เราจะเริ่มต้นด้วยการแนะนำ หลักการของการกรองแพ็กเก็ตและการแปลที่อยู่เครือข่าย (NAT) ใน Red Hat Enterprise Linux 7 ก่อนที่จะเจาะลึกการตั้งค่าพารามิเตอร์เคอร์เนลรันไทม์เพื่อแก้ไขลักษณะการทำงานของเคอร์เนลที่ทำงานอยู่ หากเงื่อนไขบางประการเปลี่ยนแปลงหรือจำเป็นต้องเกิดขึ้น

การกรองแพ็คเก็ตเครือข่ายใน RHEL 7

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

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

ข้อดีอีกประการหนึ่งของ ไฟร์วอลล์ ก็คือ ช่วยให้เราสามารถกำหนดกฎตามชื่อบริการที่กำหนดค่าไว้ล่วงหน้า (จะอธิบายเพิ่มเติมในไม่กี่นาที)

ในส่วนที่ 1 เราใช้สถานการณ์ต่อไปนี้:

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

ขั้นแรก ให้เพิ่มกฎถาวรเพื่ออนุญาตการรับส่งข้อมูลขาเข้าใน enp0s3 (192.168.0.19) ถึง enp0s8 (10.0.0.18):

firewall-cmd --permanent --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

คำสั่งด้านบนจะบันทึกกฎไปที่ /etc/firewalld/direct.xml:

cat /etc/firewalld/direct.xml

จากนั้นเปิดใช้งานกฎเพื่อให้มีผลทันที:

firewall-cmd --direct --add-rule ipv4 filter FORWARD 0 -i enp0s3 -o enp0s8 -j ACCEPT

ตอนนี้คุณสามารถเทลเน็ตไปยังเว็บเซิร์ฟเวอร์ได้จากกล่อง RHEL 7 และเรียกใช้ tcpdump อีกครั้งเพื่อตรวจสอบการรับส่งข้อมูล TCP ระหว่างทั้งสองเครื่อง คราวนี้กับไฟร์วอลล์ใน เราเตอร์ #2 เปิดใช้งาน

telnet 10.0.0.20 80
tcpdump -qnnvvv -i enp0s3 host 10.0.0.20

จะทำอย่างไรถ้าคุณต้องการอนุญาตเฉพาะการเชื่อมต่อขาเข้าไปยังเว็บเซิร์ฟเวอร์ (พอร์ต 80) จาก 192.168.0.18 และบล็อกการเชื่อมต่อจากแหล่งอื่นใน 192.168.0.0/ 24 เครือข่าย?

ในไฟร์วอลล์ของเว็บเซิร์ฟเวอร์ ให้เพิ่มกฎต่อไปนี้:

firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.18/24" service name="http" accept' --permanent
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop'
firewall-cmd --add-rich-rule 'rule family="ipv4" source address="192.168.0.0/24" service name="http" drop' --permanent

ตอนนี้คุณสามารถส่งคำขอ HTTP ไปยังเว็บเซิร์ฟเวอร์จาก 192.168.0.18 และจากเครื่องอื่นใน 192.168.0.0/24 ในกรณีแรกการเชื่อมต่อควรจะเสร็จสมบูรณ์ ในขณะที่ในกรณีที่สองการเชื่อมต่อจะหมดเวลาในที่สุด

โดยทำตามคำสั่งต่อไปนี้:

telnet 10.0.0.20 80
wget 10.0.0.20

ฉันขอแนะนำอย่างยิ่งให้คุณตรวจสอบเอกสาร Firewalld Rich Language ใน Fedora Project Wiki เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับกฎที่หลากหลาย

การแปลที่อยู่เครือข่ายใน RHEL 7

การแปลที่อยู่เครือข่าย (NAT) เป็นกระบวนการที่กลุ่มคอมพิวเตอร์ (อาจเป็นเพียงหนึ่งในนั้นก็ได้) ในเครือข่ายส่วนตัวได้รับการกำหนดที่อยู่ IP สาธารณะที่ไม่ซ้ำกัน เป็นผลให้พวกเขายังคงระบุที่ไม่ซ้ำกันด้วยที่อยู่ IP ส่วนตัวของตนเองภายในเครือข่าย แต่ภายนอกพวกเขาทั้งหมด "ดูเหมือน" เหมือนกัน