Android

วิธีกำหนดค่าและจัดการไฟร์วอลล์บน centos 8

รำหน้าไฟ ทราวดี โรงเรียนเชียงคาน

รำหน้าไฟ ทราวดี โรงเรียนเชียงคาน

สารบัญ:

Anonim

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

CentOS 8 มาพร้อมกับ daemon ของไฟร์วอลล์ชื่อ firewalld เป็นโซลูชั่นที่สมบูรณ์แบบด้วยส่วนต่อประสาน D-Bus ที่ช่วยให้คุณจัดการไฟร์วอลล์ของระบบแบบไดนามิก

ในบทช่วยสอนนี้เราจะพูดถึงวิธีกำหนดค่าและจัดการไฟร์วอลล์บน CentOS 8 เราจะอธิบายแนวคิดพื้นฐานของ FirewallD

ข้อกำหนดเบื้องต้น

ในการกำหนดค่าบริการไฟร์วอลล์คุณจะต้องเข้าสู่ระบบในฐานะผู้ใช้รากหรือผู้ใช้ที่มีสิทธิ์ sudo

แนวคิดไฟร์วอลล์พื้นฐาน

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

Firewalld สามารถกำหนดค่าและจัดการโดยใช้ยูทิลิตีบรรทัดคำสั่ง firewall-cmd

ใน CentOS 8 iptables จะถูกแทนที่ด้วย nftables เป็นแบ็กเอนด์ไฟร์วอลล์เริ่มต้นสำหรับ firewalld daemon

โซนไฟร์วอลล์

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

ด้านล่างนี้เป็นโซนที่ FirewallD สั่งให้ตามระดับความน่าเชื่อถือของโซนตั้งแต่ไม่น่าเชื่อถือถึงเชื่อถือได้:

  • ดร็อป: การเชื่อมต่อขาเข้าทั้งหมดจะถูกดร็อปโดยไม่มีการแจ้งเตือนใด ๆ อนุญาตการเชื่อมต่อขาออกเท่านั้น บล็อก: การเชื่อมต่อขาเข้าทั้งหมดถูกปฏิเสธพร้อมกับข้อความที่ icmp-host-prohibited ใช้ icmp6-adm-prohibited icmp-host-prohibited สำหรับ IPv4 และ icmp6-adm-prohibited ใช้งาน icmp6 สำหรับ IPv6n อนุญาตการเชื่อมต่อขาออกเท่านั้น พับลิก: สำหรับใช้ในพื้นที่สาธารณะที่ไม่น่าเชื่อถือ คุณไม่เชื่อถือคอมพิวเตอร์เครื่องอื่นในเครือข่าย แต่คุณสามารถอนุญาตการเชื่อมต่อขาเข้าที่เลือก ภายนอก: สำหรับใช้บนเครือข่ายภายนอกที่เปิดใช้งานการปลอมแปลง NAT เมื่อระบบของคุณทำหน้าที่เป็นเกตเวย์หรือเราเตอร์ อนุญาตเฉพาะการเชื่อมต่อขาเข้าที่เลือก ภายใน: สำหรับใช้กับเครือข่ายภายในเมื่อระบบของคุณทำหน้าที่เป็นเกตเวย์หรือเราเตอร์ ระบบอื่น ๆ ในเครือข่ายมักเชื่อถือได้ อนุญาตเฉพาะการเชื่อมต่อขาเข้าที่เลือก dmz: ใช้สำหรับคอมพิวเตอร์ที่อยู่ในเขตปลอดทหารของคุณซึ่งมีการ จำกัด การเข้าถึงเครือข่ายที่เหลือของคุณ อนุญาตเฉพาะการเชื่อมต่อขาเข้าที่เลือก ทำงาน: ใช้สำหรับเครื่องจักรทำงาน คอมพิวเตอร์เครื่องอื่น ๆ ในเครือข่ายมักเชื่อถือได้ อนุญาตเฉพาะการเชื่อมต่อขาเข้าที่เลือก home: ใช้สำหรับเครื่องที่บ้าน คอมพิวเตอร์เครื่องอื่น ๆ ในเครือข่ายมักเชื่อถือได้ อนุญาตเฉพาะการเชื่อมต่อขาเข้าที่เลือก ความน่าเชื่อถือ: การเชื่อมต่อเครือข่ายทั้งหมดได้รับการยอมรับ เชื่อถือคอมพิวเตอร์ทุกเครื่องในเครือข่าย

บริการไฟร์วอลล์

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

ตัวอย่างเช่นบริการสามารถมีคำจำกัดความเกี่ยวกับการเปิดพอร์ตการส่งต่อการรับส่งข้อมูลและอื่น ๆ

Firewalld Runtime และการตั้งค่าถาวร

Firewalld ใช้ชุดการกำหนดค่าที่แยกกันสองชุดรันไทม์และการกำหนดค่าถาวร

การกำหนดค่ารันไทม์เป็นการกำหนดค่าการทำงานจริงและไม่คงอยู่ในการรีบูต เมื่อ firewalld daemon เริ่มทำงานโหลดการกำหนดค่าถาวรซึ่งกลายเป็นการกำหนดค่ารันไทม์

โดยค่าเริ่มต้นเมื่อทำการเปลี่ยนแปลงการกำหนดค่า Firewalld โดยใช้ยูทิลิตี้ firewall-cmd การเปลี่ยนแปลงจะถูกนำไปใช้กับการกำหนดค่ารันไทม์ เพื่อทำการเปลี่ยนแปลงอย่างถาวรผนวกตัวเลือก --permanent ไปยังคำสั่ง

ในการใช้การเปลี่ยนแปลงในชุดการกำหนดค่าทั้งสองคุณสามารถใช้หนึ่งในสองวิธีต่อไปนี้:

  1. เปลี่ยนคอนฟิกูเรชันรันไทม์และทำให้เป็นถาวร:

    sudo firewall-cmd sudo firewall-cmd --runtime-to-permanent

    เปลี่ยนการกำหนดค่าถาวรและโหลด firewalld daemon ใหม่:

    sudo firewall-cmd --permanent sudo firewall-cmd --reload

เปิดใช้งาน FirewallD

บน CentOS 8 ไฟร์วอลล์จะถูกติดตั้งและเปิดใช้งานตามค่าเริ่มต้น หากด้วยเหตุผลบางอย่างที่ไม่ได้ติดตั้งไว้ในระบบของคุณคุณสามารถติดตั้งและเริ่ม daemon โดยพิมพ์:

sudo dnf install firewalld sudo systemctl enable firewalld --now sudo dnf install firewalld sudo systemctl enable firewalld --now

คุณสามารถตรวจสอบสถานะของบริการไฟร์วอลล์ด้วย:

sudo firewall-cmd --state

หากเปิดใช้งานไฟร์วอลล์คำสั่งควรจะพิมพ์ running มิฉะนั้นคุณจะเห็น not running

โซนไฟร์วอลล์

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

คุณสามารถดูโซนเริ่มต้นได้โดยพิมพ์:

sudo firewall-cmd --get-default-zone

public

ในการรับรายการของโซนทั้งหมดที่มีให้พิมพ์:

sudo firewall-cmd --get-zones

block dmz drop external home internal public trusted work

หากต้องการดูโซนที่ใช้งานและอินเทอร์เฟซเครือข่ายที่กำหนดให้:

sudo firewall-cmd --get-active-zones

ผลลัพธ์ด้านล่างแสดงว่าอินเตอร์เฟส eth0 และ eth1 ถูกกำหนดให้กับโซน public :

public interfaces: eth0 eth1

คุณสามารถพิมพ์การตั้งค่าการกำหนดโซนได้ด้วย:

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

public (active) target: default icmp-block-inversion: no interfaces: eth0 eth1 sources: services: ssh dhcpv6-client ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

จากผลลัพธ์ข้างต้นเราจะเห็นว่าเขตสาธารณะนั้นมีการใช้งานอยู่และใช้เป้าหมายเริ่มต้นซึ่งก็คือ REJECT เอาต์พุตยังแสดงว่าโซนถูกใช้โดยอินเตอร์เฟส eth0 และ eth1 และอนุญาตให้ไคลเอ็นต์ DHCP และทราฟฟิก SSH

sudo firewall-cmd --list-all-zones

คำสั่งพิมพ์รายการขนาดใหญ่ด้วยการตั้งค่าของโซนที่มีอยู่ทั้งหมด

เปลี่ยนเป้าหมายของโซน

เป้าหมายจะกำหนดพฤติกรรมเริ่มต้นของโซนสำหรับทราฟฟิกขาเข้าที่ไม่ได้ระบุ สามารถตั้งค่าเป็นหนึ่งในตัวเลือกต่อไปนี้: default , ACCEPT , REJECT และ DROP

ในการตั้งค่าเป้าหมายของโซนให้ระบุโซนด้วยตัวเลือก --zone และเป้าหมายด้วยตัวเลือก --zone --set-target

ตัวอย่างเช่นหากต้องการเปลี่ยนเป้าหมายของโซน public เป็น DROP คุณต้องเรียกใช้:

sudo firewall-cmd --zone=public --set-target=DROP

การกำหนดอินเทอร์เฟซให้กับโซนอื่น

คุณสามารถสร้างชุดของกฎเฉพาะสำหรับโซนต่าง ๆ และกำหนดอินเทอร์เฟซต่าง ๆ ให้กับพวกเขา สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อคุณเชื่อมต่อหลายส่วนบนเครื่องของคุณ

ในการกำหนดอินเทอร์เฟซให้กับโซนอื่นให้ระบุโซนด้วยตัวเลือก --zone และอินเทอร์เฟซด้วยตัวเลือก --zone --change-interface

ตัวอย่างเช่นคำสั่งต่อไปนี้จะกำหนดอินเตอร์เฟส eth1 ให้กับโซน work :

sudo firewall-cmd --zone=work --change-interface=eth1

ตรวจสอบการเปลี่ยนแปลงโดยการพิมพ์:

sudo firewall-cmd --get-active-zones

work interfaces: eth1 public interfaces: eth0

การเปลี่ยนโซนเริ่มต้น

หากต้องการเปลี่ยนโซนเริ่มต้นให้ใช้ตัวเลือก --set-default-zone ตามด้วยชื่อของโซนที่คุณต้องการให้เป็นค่าเริ่มต้น

ตัวอย่างเช่นหากต้องการเปลี่ยนโซนเริ่มต้นเป็น home คุณจะต้องรันคำสั่งต่อไปนี้:

sudo firewall-cmd --set-default-zone=home

ตรวจสอบการเปลี่ยนแปลงด้วย:

sudo firewall-cmd --get-default-zone

home

การสร้างโซนใหม่

Firewalld ยังช่วยให้คุณสร้างโซนของคุณเอง สิ่งนี้มีประโยชน์เมื่อคุณต้องการสร้างกฎสำหรับแต่ละแอปพลิเคชัน

ในตัวอย่างต่อไปนี้เราจะสร้างโซนใหม่ชื่อ memcached เปิดพอร์ต 11211 และอนุญาตการเข้าถึงจากที่อยู่ IP 192.168.100.30 เท่านั้น:

  1. สร้างโซน:

    sudo firewall-cmd --new-zone=memcached --permanent

    เพิ่มกฎเข้ากับโซน:

    sudo firewall-cmd --zone=memcached --add-port=11211/udp --permanent sudo firewall-cmd --zone=memcached --add-port=11211/tcp --permanent sudo firewall-cmd --zone=memcached --add-source=192.168.100.30/32 --permanent

    รีโหลด firewalld daemon เพื่อเปิดใช้งานการเปลี่ยนแปลง:

    sudo firewall-cmd --reload

บริการ Firewalld

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

วิธีรับรายการประเภทบริการที่เป็นค่าเริ่มต้นทั้งหมด:

sudo firewall-cmd --get-services

คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับแต่ละบริการได้โดยการเปิดไฟล์. xml ที่เชื่อมโยงภายในไดเร็กทอรี /usr/lib/firewalld/services ตัวอย่างเช่นบริการ HTTP มีการกำหนดดังนี้:

/usr/lib/firewalld/services/http.xml

WWW (HTTP) HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages. WWW (HTTP) HTTP is the protocol used to serve Web pages. If you plan to make your Web server publicly available, enable this option. This option is not required for viewing pages locally or developing Web pages.

ในการอนุญาตการรับส่งข้อมูล HTTP ขาเข้า (พอร์ต 80) สำหรับอินเทอร์เฟซในโซนสาธารณะเฉพาะสำหรับประเภทเซสชันปัจจุบัน (การกำหนดค่ารันไทม์):

sudo firewall-cmd --zone=public --add-service=http หากคุณกำลังปรับเปลี่ยนโซนเริ่มต้นคุณสามารถออกจากตัวเลือก - --zone

ในการตรวจสอบว่ามีการเพิ่มบริการสำเร็จให้ใช้ตัวเลือก --list-services :

sudo firewall-cmd --zone=public --list-services

ssh dhcpv6-client

หากต้องการให้พอร์ต 80 เปิดหลังจากรีบูตให้รันคำสั่งเดิมอีกครั้งด้วยตัวเลือก --permanent หรือดำเนินการ:

sudo firewall-cmd --runtime-to-permanent

ใช้ --list-services พร้อมกับตัวเลือก --permanent เพื่อยืนยันการเปลี่ยนแปลงของคุณ:

sudo firewall-cmd --permanent --zone=public --list-services

ssh dhcpv6-client

ไวยากรณ์สำหรับการลบบริการเหมือนกับเมื่อเพิ่มเข้ามา เพียงแค่ใช้ --remove-service แทนธง --add-service :

sudo firewall-cmd --zone=public --remove-service=http --permanent

คำสั่งด้านบนจะลบบริการ http จากการกำหนดค่าถาวรของโซนสาธารณะ

การสร้างบริการ FirewallD ใหม่

ดังที่เราได้กล่าวไปแล้วบริการเริ่มต้นจะถูกเก็บไว้ใน /usr/lib/firewalld/services วิธีที่ง่ายที่สุดในการสร้างบริการใหม่คือการคัดลอกไฟล์บริการที่มีอยู่ไปยังไดเร็กทอรี /etc/firewalld/services ซึ่งเป็นตำแหน่งสำหรับบริการที่ผู้ใช้สร้างขึ้นและแก้ไขการตั้งค่าไฟล์

ตัวอย่างเช่นในการสร้างคำนิยามบริการสำหรับ Plex Media Server คุณสามารถใช้ไฟล์บริการ SSH:

sudo cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/plexmediaserver.xml

เปิดไฟล์ plexmediaserver.xml สร้างขึ้นใหม่และเปลี่ยนชื่อย่อและคำอธิบายสำหรับบริการภายใน และ แท็ก แท็กที่สำคัญที่สุดที่คุณต้องเปลี่ยนคือแท็ก port ซึ่งกำหนดหมายเลขพอร์ตและโปรโตคอลที่คุณต้องการเปิด

ในตัวอย่างต่อไปนี้เรากำลังเปิดพอร์ต 1900 UDP และ 32400 TCP

/etc/firewalld/services/plexmediaserver.xml

plexmediaserver Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere. plexmediaserver Plex is a streaming media server that brings all your video, music and photo collections together and stream them to your devices at anytime and from anywhere.

บันทึกไฟล์และโหลดบริการ FirewallD อีกครั้ง:

sudo firewall-cmd --reload

ตอนนี้คุณสามารถใช้บริการ plexmediaserver ในโซนของคุณเช่นเดียวกับบริการอื่น ๆ

การเปิดพอร์ตและ IP ต้นทาง

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

การเปิด IP ต้นทาง

หากต้องการอนุญาตการรับส่งข้อมูลทั้งหมดจากที่อยู่ IP ที่เฉพาะเจาะจง (หรือช่วง) ให้ระบุโซนด้วยตัวเลือก --zone และ IP ต้นทางด้วยตัวเลือก --add-source

ตัวอย่างเช่นเพื่ออนุญาตการรับส่งข้อมูลขาเข้าทั้งหมดจาก 192.168.1.10 ในเขต public ให้รัน:

sudo firewall-cmd --zone=public --add-source=192.168.1.10

สร้างกฎใหม่ถาวร:

sudo firewall-cmd --runtime-to-permanent

ตรวจสอบการเปลี่ยนแปลงโดยใช้คำสั่งต่อไปนี้:

sudo firewall-cmd --zone=public --list-sources

192.168.1.10

ไวยากรณ์สำหรับการลบ IP ต้นทางเหมือนกันเมื่อเพิ่ม เพียงแค่ใช้ --remove-source แทนตัวเลือก --add-source :

sudo firewall-cmd --zone=public --remove-source=192.168.1.10

การเปิดพอร์ตต้นทาง

หากต้องการอนุญาตทราฟฟิกที่เข้ามาทั้งหมดในพอร์ตที่กำหนดให้ระบุโซนด้วยตัวเลือก --zone และพอร์ตและโปรโตคอลด้วยตัวเลือก --add-port

ตัวอย่างเช่นหากต้องการเปิดพอร์ต 8080 ในพื้นที่สาธารณะสำหรับเซสชันปัจจุบันคุณต้องดำเนินการดังนี้

sudo firewall-cmd --zone=public --add-port=8080/tcp

โปรโตคอลสามารถเป็นได้ทั้ง tcp , udp , sctp หรือ dccp

ตรวจสอบการเปลี่ยนแปลง:

sudo firewall-cmd --zone=public --list-ports

8080

หากต้องการให้พอร์ตเปิดหลังจากรีบูตให้เพิ่มกฎลงในการตั้งค่าถาวรโดยการรันคำสั่งเดียวกันโดยใช้แฟ --permanent หรือดำเนินการ:

sudo firewall-cmd --runtime-to-permanent

ไวยากรณ์สำหรับการลบพอร์ตเป็นเช่นเดียวกับเมื่อเพิ่มพอร์ต เพียงใช้ --remove-port แทนตัวเลือก --add-port

sudo firewall-cmd --zone=public --remove-port=8080/tcp

ส่งต่อพอร์ต

หากต้องการส่งต่อทราฟฟิกจากพอร์ตหนึ่งไปยังพอร์ตอื่นอันดับแรกให้เปิดใช้งาน masquerading สำหรับโซนที่ต้องการโดยใช้ --add-masquerade เลือก --add-masquerade ตัวอย่างเช่นเมื่อต้องการเปิดใช้งานการปลอมแปลงสำหรับโซน external ให้พิมพ์:

sudo firewall-cmd --zone=external --add-masquerade

ส่งต่อทราฟฟิกจากพอร์ตหนึ่งไปอีกพอร์ตหนึ่งบนที่อยู่ IP

ในตัวอย่างต่อไปนี้เรากำลังส่งต่อทราฟฟิกจากพอร์ต 80 ไปยังพอร์ต 8080 บนเซิร์ฟเวอร์เดียวกัน:

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080

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

ในตัวอย่างต่อไปนี้เรากำลังส่งต่อทราฟฟิกจากพอร์ต 80 ไปยังพอร์ต 80 บนเซิร์ฟเวอร์ที่มี IP 10.10.10.2 :

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=10.10.10.2

ส่งต่อทราฟฟิกไปยังเซิร์ฟเวอร์อื่นบนพอร์ตอื่น

ในตัวอย่างต่อไปนี้เรากำลังส่งต่อทราฟฟิกจากพอร์ต 80 ไปยังพอร์ต 8080 บนเซิร์ฟเวอร์ที่มี IP 10.10.10.2 :

sudo firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=10.10.10.2

ในการทำให้กฎการส่งต่อถาวรให้ใช้:

sudo firewall-cmd --runtime-to-permanent

ข้อสรุป

คุณได้เรียนรู้วิธีกำหนดค่าและจัดการบริการ firewalld บนระบบ CentOS 8 ของคุณ

ตรวจสอบให้แน่ใจว่าอนุญาตการเชื่อมต่อขาเข้าทั้งหมดที่จำเป็นสำหรับการทำงานที่เหมาะสมของระบบของคุณในขณะที่ จำกัด การเชื่อมต่อที่ไม่จำเป็นทั้งหมด

firewalld firewall Centos ความปลอดภัย