ผู้ดูแลระบบ Linux - การตั้งค่าไฟร์วอลล์
firewalldเป็นตัวควบคุมส่วนหน้าเริ่มต้นสำหรับ iptables บน CentOS ส่วนหน้าของfirewalldมีข้อดีหลัก ๆ สองประการเหนือ iptables แบบดิบ -
ใช้ง่ายต่อการกำหนดค่าและใช้งานโซนนามธรรมโซ่และกฎ
ชุดกฎเป็นแบบไดนามิกซึ่งหมายความว่าการเชื่อมต่อแบบ stateful จะไม่มีการหยุดชะงักเมื่อมีการเปลี่ยนแปลงการตั้งค่าและ / หรือแก้ไข
อย่าลืมว่าfirewalldเป็นเครื่องห่อสำหรับ iptables - ไม่ใช่สิ่งทดแทน แม้ว่าคำสั่ง iptables ที่กำหนดเองสามารถใช้กับfirewalldได้ แต่ขอแนะนำให้ใช้ firewalld เพื่อไม่ให้การทำงานของไฟร์วอลล์เสียหาย
ขั้นแรกตรวจสอบให้แน่ใจว่าfirewalldได้เริ่มต้นและเปิดใช้งานแล้ว
[root@CentOS rdc]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2017-01-26 21:42:05 MST; 3h 46min ago
Docs: man:firewalld(1)
Main PID: 712 (firewalld)
Memory: 34.7M
CGroup: /system.slice/firewalld.service
└─712 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid
เราจะเห็นว่า firewalld ทำงานอยู่ (เพื่อเริ่มการบูต) และกำลังทำงานอยู่ หากไม่มีการใช้งานหรือไม่ได้เริ่มใช้งานเราสามารถใช้ -
systemctl start firewalld && systemctl enable firewalld
ตอนนี้เราได้กำหนดค่าบริการ firewalld แล้วขอให้มั่นใจว่าใช้งานได้
[root@CentOS]# firewall-cmd --state
running
[root@CentOS]#
เราจะเห็นว่าบริการ firewalld ทำงานได้อย่างสมบูรณ์
Firewalld ทำงานบนแนวคิดของโซน โซนถูกนำไปใช้กับอินเทอร์เฟซเครือข่ายผ่าน Network Manager เราจะหารือเรื่องนี้ในการกำหนดค่าเครือข่าย แต่สำหรับตอนนี้โดยค่าเริ่มต้นการเปลี่ยนโซนเริ่มต้นจะเปลี่ยนอะแดปเตอร์เครือข่ายที่เหลืออยู่ในสถานะเริ่มต้นของ "Default Zone"
ลองมาดูอย่างรวดเร็วที่แต่ละโซนที่ออกมาของกล่องกับfirewalld
ซีเนียร์ | โซนและคำอธิบาย |
---|---|
1 | drop ระดับความน่าเชื่อถือต่ำ การเชื่อมต่อและแพ็กเก็ตขาเข้าทั้งหมดจะหลุดออกไปและมีเพียงการเชื่อมต่อขาออกเท่านั้นที่ทำได้ผ่าน statefullness |
2 | block การเชื่อมต่อที่เข้ามาจะได้รับการตอบกลับด้วยข้อความ icmp เพื่อแจ้งให้ผู้เริ่มทราบว่าคำขอเป็นสิ่งต้องห้าม |
3 | public เครือข่ายทั้งหมดถูก จำกัด อย่างไรก็ตามสามารถอนุญาตการเชื่อมต่อขาเข้าที่เลือกไว้อย่างชัดเจนได้ |
4 | external กำหนดค่า firewalld สำหรับ NAT เครือข่ายภายในยังคงเป็นส่วนตัว แต่สามารถเข้าถึงได้ |
5 | dmz อนุญาตเฉพาะการเชื่อมต่อขาเข้าบางรายการเท่านั้น ใช้สำหรับระบบที่แยก DMZ |
6 | work ตามค่าเริ่มต้นให้เชื่อถือคอมพิวเตอร์ในเครือข่ายมากขึ้นโดยถือว่าระบบอยู่ในสภาพแวดล้อมการทำงานที่ปลอดภัย |
7 | hone โดยค่าเริ่มต้นบริการอื่น ๆ จะไม่มีการกรอง สมมติว่าระบบอยู่บนเครือข่ายภายในบ้านที่จะใช้บริการเช่น NFS, SAMBA และ SSDP |
8 | trusted ทุกเครื่องในเครือข่ายได้รับความเชื่อถือ การเชื่อมต่อขาเข้าส่วนใหญ่ได้รับอนุญาตThis is not meant for interfaces exposed to the Internet |
โซนที่ใช้บ่อยที่สุด ได้แก่ สาธารณะสถานที่ทำงานและที่บ้าน
สถานการณ์บางอย่างที่จะใช้แต่ละโซนร่วมกันคือ -
public- เป็นโซนที่ผู้ดูแลระบบใช้บ่อยที่สุด จะช่วยให้คุณใช้การตั้งค่าแบบกำหนดเองและปฏิบัติตามข้อกำหนด RFC สำหรับการดำเนินการบน LAN
drop- ตัวอย่างที่ดีในการใช้ drop คือในการประชุมด้านความปลอดภัยบน WiFi สาธารณะหรือบนอินเทอร์เฟซที่เชื่อมต่อกับอินเทอร์เน็ตโดยตรง drop ถือว่าคำขอที่ไม่ได้ร้องขอทั้งหมดเป็นอันตรายรวมถึงโพรบ ICMP ดังนั้นคำขอใด ๆ ที่ไม่อยู่ในสถานะจะไม่ได้รับการตอบกลับ ข้อเสียของการลดลงคือสามารถทำลายฟังก์ชันการทำงานของแอปพลิเคชันในบางสถานการณ์ที่ต้องปฏิบัติตามข้อกำหนด RFC อย่างเข้มงวด
work- คุณอยู่ใน LAN ขององค์กรแบบกึ่งปลอดภัย ในกรณีที่การจราจรทั้งหมดสามารถสันนิษฐานได้ว่าปลอดภัยในระดับปานกลาง ซึ่งหมายความว่าไม่ใช่ WiFi และเราอาจมี IDS, IPS และความปลอดภัยทางกายภาพหรือ 802.1x เราควรทำความคุ้นเคยกับคนที่ใช้ LAN ด้วย
home- คุณใช้ LAN ที่บ้าน คุณเป็นผู้รับผิดชอบส่วนตัวสำหรับทุกระบบและผู้ใช้บน LAN คุณรู้จักทุกเครื่องบน LAN และไม่มีใครถูกบุกรุก บ่อยครั้งที่บริการใหม่ ๆ ถูกนำมาใช้เพื่อการแบ่งปันสื่อระหว่างบุคคลที่เชื่อถือได้และคุณไม่จำเป็นต้องใช้เวลาเพิ่มเพื่อความปลอดภัย
โซนและอินเทอร์เฟซเครือข่ายทำงานในระดับหนึ่งถึงหลายระดับ อินเทอร์เฟซเครือข่ายเดียวสามารถมีโซนเดียวที่ใช้กับมันได้ในแต่ละครั้ง ในขณะที่โซนสามารถใช้กับอินเทอร์เฟซจำนวนมากพร้อมกันได้
มาดูกันว่ามีโซนอะไรบ้างและโซนที่ใช้อยู่ตอนนี้มีอะไรบ้าง
[root@CentOS]# firewall-cmd --get-zones
work drop internal external trusted home dmz public block
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
พร้อมที่จะเพิ่มกฎที่กำหนดเองใน firewalld แล้วหรือยัง?
ก่อนอื่นมาดูกันว่ากล่องของเรามีหน้าตาเป็นอย่างไรสำหรับพอร์ตสแกนเนอร์จากภายนอก
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:36 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00046s latency).
Not shown: 1023 filtered ports
PORT STATE SERVICE
22/tcp open ssh
Nmap done: 1 IP address (1 host up) scanned in 3.71 seconds
bash-3.2#
อนุญาตให้คำขอขาเข้าพอร์ต 80
ขั้นแรกตรวจสอบเพื่อดูว่าโซนใดถูกใช้เป็นค่าเริ่มต้น
[root@CentOs]# firewall-cmd --get-default-zone
public
[root@CentOS]#
จากนั้นตั้งกฎอนุญาตให้พอร์ต 80 เป็นโซนเริ่มต้นปัจจุบัน
[root@CentOS]# firewall-cmd --zone=public --add-port = 80/tcp
success
[root@CentOS]#
ตอนนี้เรามาทำเครื่องหมายที่ช่องของเราหลังจากอนุญาตการเชื่อมต่อพอร์ต 80
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:42 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00053s latency).
Not shown: 1022 filtered ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp closed http
Nmap done: 1 IP address (1 host up) scanned in 3.67 seconds
bash-3.2#
ขณะนี้อนุญาตให้มีการรับส่งข้อมูลที่ไม่พึงประสงค์ถึง 80
ขอนำโซนเริ่มต้นที่จะลดลงและดูสิ่งที่เกิดขึ้นกับพอร์ตการสแกน
[root@CentOS]# firewall-cmd --set-default-zone=drop
success
[root@CentOS]# firewall-cmd --get-default-zone
drop
[root@CentOs]#
ตอนนี้มาสแกนโฮสต์ด้วยอินเทอร์เฟซเครือข่ายในโซนที่ปลอดภัยยิ่งขึ้น
bash-3.2# nmap -sS -p 1-1024 -T 5 10.211.55.1
Starting Nmap 7.30 ( https://nmap.org ) at 2017-01-27 23:50 MST
Nmap scan report for centos.shared (10.211.55.1)
Host is up (0.00094s latency).
All 1024 scanned ports on centos.shared (10.211.55.1) are filtered
Nmap done: 1 IP address (1 host up) scanned in 12.61 seconds
bash-3.2#
ตอนนี้ทุกอย่างถูกกรองจากภายนอก
แสดงให้เห็นด้านล่างโฮสต์จะไม่ได้ตอบสนองต่อการร้องขอ ping ICMP เมื่ออยู่ในลดลง
bash-3.2# ping 10.211.55.1
PING 10.211.55.1 (10.211.55.1): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
มาตั้งค่าโซนเริ่มต้นเป็นสาธารณะอีกครั้ง
[root@CentOs]# firewall-cmd --set-default-zone=public
success
[root@CentOS]# firewall-cmd --get-default-zone
public
[root@CentOS]#
ตอนนี้ขอตรวจสอบ ruleset กรองของเราในปัจจุบันในที่สาธารณะ
[root@CentOS]# firewall-cmd --zone=public --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: enp0s5
sources:
services: dhcpv6-client ssh
ports: 80/tcp
protocols:
masquerade: no
forward-ports:
sourceports:
icmp-blocks:
rich rules:
[root@CentOS rdc]#
ตามที่กำหนดค่าไว้กฎตัวกรองพอร์ต 80 ของเราจะอยู่ภายในบริบทของการกำหนดค่าที่กำลังทำงานอยู่เท่านั้น ซึ่งหมายความว่าเมื่อรีบูตระบบหรือรีสตาร์ทบริการ firewalld กฎของเราจะถูกยกเลิก
เราจะกำหนดค่าhttpd daemon เร็ว ๆ นี้ดังนั้นเรามาทำการเปลี่ยนแปลงอย่างต่อเนื่อง -
[root@CentOS]# firewall-cmd --zone=public --add-port=80/tcp --permanent
success
[root@CentOS]# systemctl restart firewalld
[root@CentOS]#
ตอนนี้กฎพอร์ต 80 ของเราในโซนสาธารณะยังคงอยู่ตลอดทั้งการรีบูตและการรีสตาร์ทบริการ
ต่อไปนี้เป็นคำสั่ง firewalld ทั่วไปนำไปใช้กับไฟร์วอลล์ cmd
คำสั่ง | หนังบู๊ |
---|---|
ไฟร์วอลล์ -cmd - รับโซน | แสดงรายการโซนทั้งหมดที่สามารถใช้กับอินเทอร์เฟซ |
firewall-cmd - สถานะ | ส่งคืนสถานะปัจจุบันของบริการ firewalld |
ไฟร์วอลล์ cmd - รับเริ่มต้นโซน | รับโซนเริ่มต้นปัจจุบัน |
ไฟร์วอลล์ -cmd --set-default-zone = <zone> | ตั้งค่าโซนเริ่มต้นในบริบทปัจจุบัน |
ไฟร์วอลล์ cmd - รับที่ใช้งานโซน | รับโซนปัจจุบันในบริบทตามที่ใช้กับอินเทอร์เฟซ |
ไฟร์วอลล์ -cmd --zone = <zone> - รายการทั้งหมด | แสดงรายการการกำหนดค่าของโซนที่ให้มา |
firewall-cmd --zone = <zone> --addport = <port / transport protocol> | ใช้กฎพอร์ตกับตัวกรองโซน |
--ถาวร | ทำการเปลี่ยนแปลงโซนอย่างต่อเนื่อง แฟล็กถูกใช้แบบอินไลน์กับคำสั่งแก้ไข |
เหล่านี้เป็นแนวคิดพื้นฐานของการบริหารและการกำหนดค่าfirewalld
การกำหนดค่าบริการไฟร์วอลล์บนโฮสต์ใน CentOS อาจเป็นงานที่ซับซ้อนในสถานการณ์ระบบเครือข่ายที่ซับซ้อนมากขึ้น การใช้งานและการกำหนดค่าขั้นสูงของfirewalldและ iptables ใน CentOS สามารถดูบทช่วยสอนทั้งหมดได้ อย่างไรก็ตามเราได้นำเสนอพื้นฐานที่น่าจะเพียงพอสำหรับการทำงานส่วนใหญ่ประจำวัน