ฉันได้กำหนดค่าไฟร์วอลล์บน CentOS7 เพื่อให้บล็อกการเชื่อมต่อขาออกทั้งหมด เฉพาะการเชื่อมต่อที่จำเป็นเท่านั้นที่จะแสดงเป็นสีขาวโดยการเพิ่มกฎบางอย่าง ฉันยังได้เพิ่มกฎเพื่อเปิดใช้งานการบันทึกการเชื่อมต่อที่ถูกบล็อก (ทิศทางขาออก)
กฎของไฟร์วอลล์ปัจจุบันคือ (บาง IP ฉันมีมาสควาเรดด้วย "xxx"):
/> firewall-cmd --permanent --direct --get-all-rules
ตัวกรอง ipv4 เอาต์พุต 1 -p udp -m udp --dport=53 -d 185.12.64.1 -j ยอมรับ
ตัวกรอง ipv4 เอาต์พุต 1 -p udp -m udp --dport=53 -d 185.12.64.2 -j ยอมรับ
ตัวกรอง ipv4 เอาต์พุต 1 -p udp -m เจ้าของ --uid-เจ้าของรูท --dport 67:68 -j ยอมรับ
ตัวกรอง ipv4 OUTPUT 1 -p icmp --icmp-type 8 -m state --state NEW,ESTABLIS -m Owner -- uid-owner root -j ACCEPT
ตัวกรอง ipv4 เอาต์พุต 1 -p tcp -m tcp --dport=25 -d 193.111.XXX.XXX -j ยอมรับ
ตัวกรอง ipv4 เอาต์พุต 1 -p tcp --dport=58443 -d 10.254.XXX.XXX -j ยอมรับ
ตัวกรอง ipv4 เอาต์พุต 1 -p tcp --dport=58443 -d 193.111.XXX.XXX -j ยอมรับ
ตัวกรอง ipv4 เอาต์พุต 1 -p tcp --dport=5667 -d 10.254.XXX.XXX -j ยอมรับ
ตัวกรอง ipv4 เอาต์พุต 1 -p udp -m udp --dport=1194 -d 193.111.XXX.XXX -j ยอมรับ
ตัวกรอง ipv4 เอาต์พุต 1 -m เจ้าของ --uid-เจ้าของ root -p tcp -m tcp --dport=443 -j ยอมรับ
ตัวกรอง ipv4 เอาต์พุต 1 -m เจ้าของ --uid-เจ้าของ root -p tcp -m tcp --dport=80 -j ยอมรับ
ตัวกรอง ipv4 OUTPUT 0 -m state --state ESTABLISHED, RELATED -j ACCEPT
ตัวกรอง ipv4 เอาต์พุต 1 -m เจ้าของ --uid-เจ้าของ clamupdate -p tcp -m tcp --dport=443 -j ยอมรับ
ตัวกรอง ipv4 OUTPUT 2 -j DROP
ตัวกรอง ipv4 เอาต์พุต 1 -j LOG_OUTPUT
ตัวกรอง ipv4 เอาต์พุต 1 -m เจ้าของ --uid-เจ้าของ chrony -p udp -m udp --dport=123 -j ยอมรับ
ตัวกรอง ipv6 เอาต์พุต 1 -p udp -m เจ้าของ --uid-เจ้าของรูท --dport 67:68 -j ยอมรับ
ตัวกรอง ipv6 OUTPUT 1 -p icmpv6 --icmpv6-type 8 -m state --state NEW,ESTABLIS -m Owner --uid-owner root -j ACCEPT
ตัวกรอง ipv6 เอาต์พุต 1 -p tcp -m tcp --dport=25 -d 2001:4ba0:XXXX:XX::X -j ยอมรับ
ตัวกรอง ipv6 เอาต์พุต 1 -p tcp -m tcp --dport=58443 -d 2001:4ba0:XXXX:XX::X -j ยอมรับ
ตัวกรอง ipv6 เอาต์พุต 1 -p tcp --dport=5667 -d fe80::bf18:c142:XXXX:XXXX -j ยอมรับ
ตัวกรอง ipv6 เอาต์พุต 1 -p udp -m udp --dport=1194 -d 2001:4ba0:XXXX:XX::X -j ยอมรับ
ตัวกรอง ipv6 เอาต์พุต 1 -m เจ้าของ --uid-เจ้าของ root -p tcp -m tcp --dport=443 -j ยอมรับ
ตัวกรอง ipv6 เอาต์พุต 1 -m เจ้าของ --uid-เจ้าของ root -p tcp -m tcp --dport=80 -j ยอมรับ
ตัวกรอง ipv6 OUTPUT 0 -m state --state ESTABLISHED, RELATED -j ACCEPT
ตัวกรอง ipv6 เอาต์พุต 1 -m เจ้าของ --uid-เจ้าของ clamupdate -p tcp -m tcp --dport=443 -j ยอมรับ
ตัวกรอง ipv6 OUTPUT 2 -j DROP
ตัวกรอง ipv6 เอาต์พุต 1 -m เจ้าของ --uid-เจ้าของ chrony -p udp -m udp --dport=123 -j ยอมรับ
ipv4 filter LOG_OUTPUT 1 -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix 'FINAL_REJECT:'
กฎ iptable ที่สอดคล้องกันคือ (บางคนชอบ iptable มากกว่าเป็นไฟร์วอลล์ ... ):
/>iptables-S
-P อินพุตยอมรับ
-P ยอมรับไปข้างหน้า
-P เอาต์พุตยอมรับ
-N FORWARD_IN_ZONES
-N FORWARD_IN_ZONES_SOURCE
-N FORWARD_OUT_ZONES
-N FORWARD_OUT_ZONES_SOURCE
-N FORWARD_direct
-N FWDI_public
-N FWDI_public_allow
-N FWDI_public_deny
-N FWDI_public_log
-N FWDI_XXXX
-N FWDI_XXXX_allow
-N FWDI_XXXX_ปฏิเสธ
-N FWDI_XXXX_log
-N FWDO_public
-N FWDO_public_allow
-N FWDO_public_deny
-N FWDO_public_log
-N FWDO_XXXX
-N FWDO_XXXX_allow
-N FWDO_XXXX_ปฏิเสธ
-N FWDO_XXXX_log
-N INPUT_ZONES
-N INPUT_ZONES_SOURCE
-N INPUT_direct
-N IN_public
-N IN_public_allow
-N IN_public_deny
-N IN_public_log
-N IN_XXXX
-N IN_XXXX_อนุญาต
-N IN_XXXX_ปฏิเสธ
-N IN_XXXX_log
-N LOG_OUTPUT
-N OUTPUT_direct
-อินพุต -i virbr0 -p udp -m udp --dport 53 -j ยอมรับ
-อินพุต -i virbr0 -p tcp -m tcp --dport 53 -j ยอมรับ
-อินพุต -i virbr0 -p udp -m udp --dport 67 -j ยอมรับ
-อินพุต -i virbr0 -p tcp -m tcp --dport 67 -j ยอมรับ
-A INPUT -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้ง -j ยอมรับ
-A อินพุต -i lo -j ยอมรับ
-A อินพุต -j INPUT_direct
-A อินพุต -j INPUT_ZONES_SOURCE
-A อินพุต -j INPUT_ZONES
-A INPUT -m conntrack --ctstate INVALID -j LOG --log-prefix "STATE_INVALID_DROP: "
-A INPUT -m conntrack --ctstate ไม่ถูกต้อง -j DROP
-A INPUT -j LOG --log-คำนำหน้า "FINAL_REJECT:"
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้ง -j ยอมรับ
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ยอมรับ
-A ส่งต่อ -i virbr0 -o virbr0 -j ยอมรับ
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -m conntrack --ctstate ที่เกี่ยวข้อง ก่อตั้ง -j ยอมรับ
-A FORWARD -i lo -j ยอมรับ
-A ส่งต่อ -j FORWARD_direct
-A FORWARD -j FORWARD_IN_ZONES_SOURCE
-A ไปข้างหน้า -j FORWARD_IN_ZONES
-A FORWARD -j FORWARD_OUT_ZONES_SOURCE
-A ไปข้างหน้า -j FORWARD_OUT_ZONES
-A FORWARD -m conntrack --ctstate INVALID -j LOG --log-prefix "STATE_INVALID_DROP: "
-A FORWARD -m conntrack --ctstate ไม่ถูกต้อง -j DROP
-A FORWARD -j LOG --log-คำนำหน้า "FINAL_REJECT:"
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ยอมรับ
-A OUTPUT -o lo -j ยอมรับ
-A OUTPUT -j OUTPUT_direct
-A FORWARD_IN_ZONES -i enp0s31f6 -g FWDI_public
-A FORWARD_IN_ZONES -i tun0 -g FWDI_XXXX
-A FORWARD_IN_ZONES -g FWDI_public
-A FORWARD_OUT_ZONES -o enp0s31f6 -g FWDO_public
-A FORWARD_OUT_ZONES -o tun0 -g FWDO_XXXX
-A FORWARD_OUT_ZONES -g FWDO_public
-A FWDI_public -j FWDI_public_log
-A FWDI_public -j FWDI_public_deny
-A FWDI_public -j FWDI_public_allow
-A FWDI_public -p icmp -j ยอมรับ
-A FWDI_XXXX -j FWDI_XXXX_log
-A FWDI_XXXX -j FWDI_XXXX_deny
-A FWDI_XXXX -j FWDI_XXXX_allow
-A FWDI_XXXX -p icmp -j ยอมรับ
-A FWDO_public -j FWDO_public_log
-A FWDO_public -j FWDO_public_deny
-A FWDO_public -j FWDO_public_allow
-A FWDO_XXXX -j FWDO_XXXX_log
-A FWDO_XXXX -j FWDO_XXXX_deny
-A FWDO_XXXX -j FWDO_XXXX_allow
-A INPUT_ZONES -i enp0s31f6 -g IN_public
-A INPUT_ZONES -i tun0 -g IN_XXXX
-A INPUT_ZONES -g IN_public
-A INPUT_direct -p tcp -m set --match-set f2b-sshd src -j REJECT --reject-with icmp-port-unreachable
-A INPUT_direct -p tcp -m set --match-set f2b-f2bLongList src -j REJECT --reject-with icmp-port-unreachable
-A INPUT_direct -p tcp -m set --match-set f2b-blocklist_de src -j REJECT --reject-with icmp-port-unreachable
-A IN_public -j IN_public_log
-A IN_public -j IN_public_deny
-A IN_public -j IN_public_allow
-A IN_public -p icmp -j ยอมรับ
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_public_allow -p tcp -m tcp --dport 443 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_public_allow -p tcp -m tcp --dport 58443 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_public_allow -p tcp -m tcp --dport 444 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_public_deny -m set --match-set badIPsSet src -j DROP
-A IN_XXXX -j IN_XXXX_log
-A IN_XXXX -j IN_XXXX_deny
-A IN_XXXX -j IN_XXXX_allow
-A IN_XXXX -p icmp -j ยอมรับ
-A IN_XXXX_allow -p tcp -m tcp --dport 59943 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_XXXX_allow -p tcp -m tcp --dport 9945 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_XXXX_allow -p tcp -m tcp --dport 9944 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_XXXX_allow -p tcp -m tcp --dport 9943 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A IN_XXXX_allow -p tcp -m tcp --dport 9947 -m conntrack --ctstate ใหม่ UNTRACKED -j ยอมรับ
-A LOG_OUTPUT -m limit --limit 3/min --limit-burst 10 -j LOG --log-prefix "FINAL_REJECT: "
-A OUTPUT_direct -m state --state RELATED,ESTABLISHED -j ยอมรับ
-A OUTPUT_direct -d 185.12.64.1/32 -p udp -m udp --dport 53 -j ยอมรับ
-A OUTPUT_direct -d 185.12.64.2/32 -p udp -m udp --dport 53 -j ยอมรับ
-A OUTPUT_direct -p udp -m เจ้าของ --uid-เจ้าของ 0 -m udp --dport 67:68 -j ยอมรับ
-A OUTPUT_direct -p icmp -m icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -m owner --uid-owner 0 -j ยอมรับ
-A OUTPUT_direct -d 193.111.XXX.XXX/32 -p tcp -m tcp --dport 25 -j ยอมรับ
-A OUTPUT_direct -d 10.254.XXX.XXX/32 -p tcp -m tcp --dport 58443 -j ยอมรับ
-A OUTPUT_direct -d 193.111.XXX.XXX/32 -p tcp -m tcp --dport 58443 -j ยอมรับ
-A OUTPUT_direct -d 10.254.XXX.XXX/32 -p tcp -m tcp --dport 5667 -j ยอมรับ
-A OUTPUT_direct -d 193.111.XXX.XXX/32 -p udp -m udp --dport 1194 -j ยอมรับ
-A OUTPUT_direct -p tcp -m เจ้าของ --uid-เจ้าของ 0 -m tcp --dport 443 -j ยอมรับ
-A OUTPUT_direct -p tcp -m เจ้าของ --uid-เจ้าของ 0 -m tcp --dport 80 -j ยอมรับ
-A OUTPUT_direct -p tcp -m เจ้าของ --uid-เจ้าของ 986 -m tcp --dport 443 -j ยอมรับ
-A OUTPUT_direct -j LOG_OUTPUT
-A OUTPUT_direct -p udp -m เจ้าของ --uid-เจ้าของ 993 -m udp --dport 123 -j ยอมรับ
-A OUTPUT_direct -j DROP
พอร์ต UDP 123 (โปรโตคอล NTP) เปิดสำหรับการเชื่อมต่อขาออกสำหรับผู้ใช้ "''chrony''" ถ้าฉันเรียก chrony ด้วยตนเองจากบรรทัดคำสั่ง ฉันจะได้รับ:
/>chronyd -q 'เซิร์ฟเวอร์ 178.63.52.31 iburst'
2022-03-07T09:09:45Z chronyd เวอร์ชัน 3.4 เริ่มต้น (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
2022-03-07T09:09:45Z ความถี่เริ่มต้น -13.925 ppm
2022-03-07T09:09:49Z นาฬิการะบบผิดไป 0.000131 วินาที (ขั้นตอน)
2022-03-07T09:09:49Z chronyd กำลังออก
ตกลงดูเหมือนว่าจะใช้งานได้ (เหมือนที่คาดไว้) แต่ไฟร์วอลล์จะบันทึกดังต่อไปนี้:
7 มีนาคม 10:09:45 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=24554 DF PROTO=UDP SPT=55470 DPT =123 เลน=56
7 มี.ค. 10:09:47 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=25563 DF PROTO=UDP SPT=48110 DPT =123 เลน=56
7 มีนาคม 10:09:49 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=25796 DF PROTO=UDP SPT=46482 DPT =123 เลน=56
หากลบกฎสำหรับพอร์ต "123":
/> firewall-cmd --permanent --direct --remove-rule ipv4 filter OUTPUT 1 -m Owner --uid-owner chrony -p udp -m udp --dport=123 -j ACCEPT
ความสำเร็จ
/> firewall-cmd --permanent --direct --remove-rule ipv6 filter OUTPUT 1 -m Owner --uid-owner chrony -p udp -m udp --dport=123 -j ACCEPT
ความสำเร็จ
/>ไฟร์วอลล์-cmd --reload
ความสำเร็จ
และโทรหา chrony อีกครั้ง:
chronyd -q 'เซิร์ฟเวอร์ 178.63.52.31 iburst'
2022-03-07T09:12:46Z chronyd เวอร์ชัน 3.4 เริ่มต้น (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
2022-03-07T09:12:46Z ความถี่เริ่มต้น -13.925 ppm
2022-03-07T09:12:56Z ไม่มีแหล่งที่มาที่เหมาะสมสำหรับการซิงโครไนซ์
2022-03-07T09:12:56Z chronyd ออกจาก
(ซึ่งล้มเหลวอย่างที่คาดไว้) ฉันได้รับ 6 บรรทัดในไฟล์บันทึกไฟร์วอลล์ (แทนที่จะเป็น 3 บรรทัดด้านบน):
7 มี.ค. 10:12:46 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=30341 DF PROTO=UDP SPT=45581 DPT =123 เลน=56
7 มี.ค. 10:12:48 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=32318 DF PROTO=UDP SPT=36395 DPT =123 เลน=56
7 มี.ค. 10:12:50 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=33178 DF PROTO=UDP SPT=56503 DPT =123 เลน=56
7 มี.ค. 10:12:52 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=34311 DF PROTO=UDP SPT=55691 DPT =123 เลน=56
7 มี.ค. 10:12:54 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=35963 DF PROTO=UDP SPT=57795 DPT =123 เลน=56
7 มี.ค. 10:12:56 เคอร์เนลแบบคงที่: FINAL_REJECT: IN= OUT=enp0s31f6 SRC=136.243.139.67 DST=178.63.52.31 LEN=76 TOS=0x00 PREC=0x00 TTL=64 ID=37075 DF PROTO=UDP SPT=51338 DPT =123 เลน=56
พฤติกรรมนี้ฉันมีเฉพาะกับการเชื่อมต่อ NTP ตัวอย่างเช่น ถ้าฉันเปิดการเชื่อมต่อ SMTP ที่พอร์ต 25 ถึง 193.111.xxx.xxx (ซึ่งกฎไฟร์วอลล์อนุญาตอย่างชัดเจน) ฉันได้รับ (อย่างที่คาดไว้) ไม่มีข้อความบันทึกไฟร์วอลล์
เหตุใดฉันจึงได้รับข้อความบันทึกไฟร์วอลล์ของการเชื่อมต่อพอร์ต UDP 123 ที่ถูกบล็อก เมื่อพอร์ตได้รับอนุญาตอย่างชัดแจ้งและโครนีทำงานอย่างที่คาดไว้