Computer >> คอมพิวเตอร์ >  >> ระบบ >> Linux

เริ่มต้นใช้งาน FirewallD บน CentOS 8/7

ใน CentOS 7 FirewallD ดูเหมือนว่าจะกำหนดค่ากฎการกรองการเข้าชม เป็นเครื่องมือที่แนะนำให้ใช้ในการจัดการกฎ iptables CentOS 8 กำลังใช้ nftables กรอบงานแทนบริการกรองแพ็คเก็ต iptables มาตรฐาน และเมื่อคุณกำหนดค่ากฎไฟร์วอลล์ในไฟร์วอลล์ แสดงว่าคุณกำลังกำหนดค่า nftables จริงๆ ในบทความนี้ เราจะพิจารณาวิธีการติดตั้งและกำหนดค่าไฟร์วอลล์บนเซิร์ฟเวอร์ที่ใช้ Linux CentOS 8 (และ CentOS 7) และแนวคิดหลักของไฟร์วอลล์นี้

ไฟร์วอลล์D เป็นบริการไฟร์วอลล์ที่ใช้เพื่อป้องกันเซิร์ฟเวอร์จากการรับส่งข้อมูลที่ไม่ต้องการ รองรับการจัดการกฎไฟร์วอลล์แบบไดนามิก (โดยไม่ต้องรีสตาร์ท) มันทำงานเป็นอินเทอร์เฟซสำหรับ iptables และ nftables FirewallD สามารถใช้ได้กับ Linux distros เกือบทั้งหมด

แนวคิดพื้นฐานของไฟร์วอลล์:โซนและกฎ

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

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

Firewalld มีบางโซนที่มีสิทธิ์ที่กำหนดไว้ล่วงหน้าสำหรับบริการต่างๆ คุณสามารถใช้การตั้งค่าเหล่านี้หรือสร้างโซนของคุณเอง นี่คือรายการโซนเริ่มต้นที่สร้างขึ้นเมื่อคุณติดตั้ง firewalld (อยู่ใน /usr/lib/firewalld/zones/):

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

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

จะติดตั้งและเปิดใช้งาน FirewallD ใน CentOS ได้อย่างไร

ใน CentOS 7/8 firewalld จะถูกติดตั้งตามค่าเริ่มต้นระหว่างการติดตั้ง OS หากคุณลบ firewalld และต้องการติดตั้งกลับ คุณสามารถใช้ตัวจัดการแพ็คเกจ yum/dnf มาตรฐานได้:

# yum install firewalld -y — บน Centos 7
# dnf install firewalld -y — บน Centos 8

เริ่มต้นใช้งาน FirewallD บน CentOS 8/7

เพื่อให้ firewalld daemon เริ่มเพิ่มโดยอัตโนมัติในการเริ่มต้น:

# systemctl enable firewalld

และเริ่มเลย:

# systemctl start firewalld

ตรวจสอบสถานะการให้บริการ:

# systemctl status firewalld

● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running)
Docs: man:firewalld(1)
Main PID: 13646 (firewalld)
CGroup: /system.slice/firewalld.service
└─13646 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid
systemd[1]: Starting firewalld - dynamic firewall daemon...

หรือทำโดยใช้คำสั่งนี้:

# firewall-cmd --state

firewall-cmd คำสั่งคือส่วนหน้าของไฟร์วอลล์สำหรับ nftables/iptables

# firewall-cmd --state

running

การจัดการกฎ FirewallD

กฎไฟร์วอลล์เริ่มต้น

ก่อนกำหนดค่ากฎไฟร์วอลล์ คุณควรตรวจสอบว่าโซนใดเป็นค่าเริ่มต้น:

# firewall-cmd --get-default-zone

เริ่มต้นใช้งาน FirewallD บน CentOS 8/7

เนื่องจากเราเพิ่งติดตั้ง firewalld และยังไม่ได้กำหนดค่า โซนเริ่มต้นจะเป็น สาธารณะ .

ตรวจสอบโซนที่ใช้งานอยู่ มีโซนเดียวเท่านั้น — สาธารณะ:

# firewall-cmd --get-active-zones

public
interfaces: eth0

อย่างที่เราเห็น อินเทอร์เฟซ eth0 ได้รับการจัดการโดย สาธารณะ โซน.

คุณสามารถแสดงรายการอินเทอร์เฟซเครือข่าย CentOS ได้ดังนี้:

# ip link show
หรือ:
# nmcli device status

หากต้องการดูกฎของโซนที่ใช้งานอยู่ให้ใช้คำสั่ง:

# firewall-cmd --list-all

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

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

โซนที่มีจำหน่าย

หากต้องการดูรายการโซนทั้งหมด ให้รันคำสั่งนี้:

# firewall-cmd --get-zones

ฉันได้รับรายการต่อไปนี้:

block dmz drop external home internal public trusted work

หากต้องการดูกฎของโซนใดโซนหนึ่ง ให้เพิ่มแฟล็ก -zone ในคำสั่ง:

# firewall-cmd --zone=home --list-all

home
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client mdns samba-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

คุณสามารถดูกฎของโซนทั้งหมด:

# firewall-cmd --list-all-zones

จะเปลี่ยนโซนเริ่มต้นได้อย่างไร

โดยค่าเริ่มต้น อินเทอร์เฟซเครือข่ายทั้งหมดจะอยู่ในสาธารณะ โซน แต่สามารถย้ายไปยังโซนใดก็ได้ด้วยคำสั่ง:

# firewall-cmd --zone=home —change-interface=eth0

ระบุโซนที่คุณต้องการหลัง –zone= พารามิเตอร์

หากต้องการเปลี่ยนโซนเริ่มต้นเป็นโฮม ให้เรียกใช้คำสั่งนี้:

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

จะเพิ่มกฎของแอปใน FirewallD ได้อย่างไร

หากต้องการเปิดพอร์ตสำหรับแอป คุณสามารถเพิ่มบริการเป็นข้อยกเว้นได้ นี่คือวิธีการแสดงรายการบริการที่มี:

# firewall-cmd --get-services

เริ่มต้นใช้งาน FirewallD บน CentOS 8/7

ผลลัพธ์จะมีบริการมากมาย ข้อมูลโดยละเอียดเกี่ยวกับบริการมีอยู่ใน XML ไฟล์. ไฟล์เหล่านี้อยู่ใน /usr/lib/firewalld/services

ตัวอย่างเช่น:

# cd /usr/lib/firewalld/services
# cat smtp.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
<short>Mail (SMTP)</short>
<description>This option allows incoming SMTP mail delivery. If you need to allow remote hosts to connect directly to your machine to deliver mail, enable this option. You do not need to enable this if you collect your mail from your ISP's server by POP3 or IMAP, or if you use a tool such as fetchmail. Note that an improperly configured SMTP server can allow remote machines to use your server to send spam.</description>
<port protocol="tcp" port="25"/>
</service>

ไฟล์ XML ประกอบด้วยคำอธิบายบริการ โปรโตคอล และจำนวนพอร์ตที่จะเปิดในไฟร์วอลล์

เริ่มต้นใช้งาน FirewallD บน CentOS 8/7

เมื่อเพิ่มกฎ คุณสามารถใช้ –add-service พารามิเตอร์เพื่ออนุญาตให้ไฟร์วอลล์เข้าถึงบริการเฉพาะ:

# firewall-cmd --zone=public --add-service=http
# firewall-cmd --zone=public --add-service=https

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

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

dhcpv6-client http https ssh

หากคุณต้องการทำให้กฎถาวร ให้ใช้ปุ่ม –ถาวร พารามิเตอร์เมื่อเพิ่มเข้าไป

วิธีลบบริการออกจากโซน:

# firewall-cmd --permanent --zone=public --remove-service=http
# firewall-cmd --zone=public --permanent --list-services

dhcpv6-client https ssh test

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

คัดลอก smtp.xml ไปยังไดเร็กทอรีสำหรับบริการผู้ใช้:

# cp /usr/lib/firewalld/services/smtp.xml /etc/firewalld/services

เปลี่ยนรายละเอียดบริการในไฟล์

เริ่มต้นใช้งาน FirewallD บน CentOS 8/7

ต้องเปลี่ยนชื่อไฟล์ XML ด้วย (ฉันเรียกบริการของฉันว่า ทดสอบ ). จากนั้นรีสตาร์ท firewalld และตรวจดูให้แน่ใจว่าบริการของคุณปรากฏในรายการ:

# firewall-cmd --get-services

syslog-tls telnet test tftp

คุณสามารถเพิ่มบริการไปยังโซนใดก็ได้:

# firewall-cmd --zone=public --add-service=test --permanent
# firewall-cmd --zone=public --permanent --list-services

dhcpv6-client http https ssh test

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

# firewall-cmd --zone=public —add-port=77/tcp — เปิด TCP พอร์ต 77
# firewall-cmd --zone=public —add-port=77/udp — เปิด UDP พอร์ต 77
# firewall-cmd --zone=public —add-port=77-88/udp — เปิด UDP ช่วงพอร์ต 77-88
# firewall-cmd --zone=public —list-ports — แสดงรายการพอร์ตที่อนุญาต

วิธีบล็อก/อนุญาตคำขอ ICMP:

# firewall-cmd --zone=public --add-icmp-block=echo-reply
# firewall-cmd --zone= public --remove-icmp-block=echo-reply

วิธีลบพอร์ตที่เพิ่ม:
# firewall-cmd --zone=public —remove-port=77/udp — ลบกฎรันไทม์สำหรับ UDP พอร์ต 77

# firewall-cmd --permanent --zone=public —remove-port=77/udp — ลบกฎถาวร

เริ่มต้นใช้งาน FirewallD บน CentOS 8/7

จะสร้างโซนใหม่ใน FirewallD ได้อย่างไร

คุณสามารถสร้างโซนของคุณเองได้ (ฉันจะเรียกมันว่า ของเรา ):

# firewall-cmd --permanent --new-zone=our

หลังจากสร้างโซนใหม่ เช่น หลังจากสร้างบริการ คุณจะต้องรีสตาร์ท firewalld :

# firewall-cmd --reload
# firewall-cmd --get-zones

block dmz drop external home internal our public trusted work

ของเรา โซนได้. คุณสามารถเพิ่มบริการหรือเปิดบางพอร์ตได้

ไฟร์วอลล์:วิธีบล็อกที่อยู่ IP และสร้างข้อยกเว้น

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

ในการเพิ่มที่อยู่ IP (เช่น 8.8.8.8) o ข้อยกเว้นบนเซิร์ฟเวอร์ของคุณโดยใช้ไฟร์วอลล์ ให้รันคำสั่งนี้:

# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="8.8.8.8" accept'

ตรวจสอบโซนและตรวจสอบให้แน่ใจว่า ที่อยู่ IP ได้รับการเพิ่มข้อยกเว้นในกฎรวย:

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

public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http https ssh test
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="8.8.8.8" accept

หากต้องการบล็อกที่อยู่ IP ให้แทนที่ ยอมรับ กับ ปฏิเสธ :

# firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="8.8.4.4" reject'
# firewall-cmd --zone=public --list-all

public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client http https ssh test
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="8.8.8.8" accept
rule family="ipv4" source address="8.8.4.4" reject

คุณสามารถอนุญาตให้บริการยอมรับคำขอจากที่อยู่ IP เฉพาะเท่านั้น:

#firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="192.168.1.0/24" service name="https" accept'

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

# firewall-cmd --panic-on

คุณสามารถปิดการใช้งานโหมดตื่นตระหนกด้วยคำสั่งนี้:

# firewall-cmd --panic-off

หรือโดยการรีสตาร์ทเซิร์ฟเวอร์ของคุณ

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

# firewall-cmd --lockdown-on

วิธีปิดโหมดล็อกดาวน์:

# firewall-cmd --lockdown-off

การกำหนดค่าการส่งต่อพอร์ตด้วย FirewallD

คุณสามารถสร้างกฎการส่งต่อพอร์ตในไฟร์วอลล์ ในการส่งต่อพอร์ต TCP 443 ถึง 9090:

# firewall-cmd --zone=public --add-forward-port=port=443:proto=tcp:toport=9090 --permanent

ใน Windows คุณสามารถกำหนดค่าการส่งต่อพอร์ตโดยใช้ netsh

วิธีลบกฎการส่งต่อพอร์ต:

# firewall-cmd --zone=public --remove-forward-port=port=443:proto=tcp:toport=9090