Thiết lập hệ thống tường lửa FirewallD trên CentOS 7

Thiết lập hệ thống tường lửa FirewallD trên CentOS 7

Trong bài viết này, chúng ta sẽ cùng nhau thiết lập và quản lý hệ thống tường lửa FirewallD cho server của bạn. Tường lửa FirewallD là giải pháp tường lửa mạnh mẽ, toàn diện được cài đặt mặc định trên CentOS 7. Tường lửa Firewalld là một giải pháp quản lý tường lửa có sẵn cho nhiều bản phân phối Linux hoạt động như một giao diện người dùng do hạt nhân Linux cung cấp. Trong hướng dẫn này, chúng tôi sẽ giới thiệu cách thiết lập tường lửa cho máy chủ của bạn và cho bạn thấy những điều cơ bản về quản lý tường lửa bằng firewall-cmd công cụ quản trị của nó.

Các khái niệm cơ bản của tường lửa FirewallD

Tường lửa FirewallD trên CentOS 7 được thay thế cho Iptables trên CentOS 6 với những khác biệt cơ bản.Trước khi làm việc với tường lửa FirewallD, bạn hãy cùng làm quen với các khái niệm cơ bản: Zone (vùng) và thời gian hiệu lực của các quy tắc.

 Khái niệm Zone (vùng)

Trong tường lửa FirewallD, zone là một nhóm các quy tắc áp đặt lên những luồng dữ liệu được cho phép, dựa trên mức độ tin tưởng của điểm xuất phát luồng dữ liệu đó trong hệ thống mạng. Để sử dụng, bạn có thể lựa chọn zone mặc đinh, thiết lập các quy tắc trong zone hay chỉ định giao diện mạng (Network Interface) để quy định hành vi được cho phép.

Mức độ tin cậy của các zone mặc định, các zone được xác định trước theo mức độ tin cậy sau đây:
drop: ít tin cậy nhất – toàn bộ các kết nối đến sẽ bị từ chối mà không phản hồi, chỉ cho phép duy nhất kết nối đi ra.
block: tương tự như drop nhưng các kết nối đến bị từ chối và phản hồi bằng tin nhắn từ icmp-host-prohibited (hoặc icmp6-adm-prohibited).
public: đại diện cho mạng công cộng, không đáng tin cậy. Các máy tính/services khác không được tin tưởng trong hệ thống nhưng vẫn cho phép các kết nối đến trên cơ sở chọn từng trường hợp cụ thể.
external: hệ thống mạng bên ngoài trong trường hợp bạn sử dụng tường lửa làm gateway, được cấu hình giả lập NAT để giữ bảo mật mạng nội bộ mà vẫn có thể truy cập.
internal: đối lập với external zone, sử dụng cho phần nội bộ của gateway. Các máy tính/services thuộc zone này thì khá đáng tin cậy.
dmz: sử dụng cho các máy tính/service trong khu vực DMZ(Demilitarized) – cách ly không cho phép truy cập vào phần còn lại của hệ thống mạng, chỉ cho phép một số kết nối đến nhất định.
work: sử dụng trong công việc, tin tưởng hầu hết các máy tính và một vài services được cho phép hoạt động.
home: môi trường gia đình – tin tưởng hầu hết các máy tính khác và thêm một vài services được cho phép hoạt động.
trusted: đáng tin cậy nhất – tin tưởng toàn bộ thiết bị trong hệ thống.
Khi sử dụng tường lửa firewalld, nếu cần nhiều hơn các thiết lập mặc đinh chúng ta có thể tạo các quy tắc và thay đổi các thuộc tính của các vùng của chúng ta và sau đó gán các giao diện mạng của chúng ta cho bất kỳ vùng nào thích hợp nhất.

Hiệu lực của các quy tắc Runtime/Permanent

Trong FirewallD, các quy tắc được cấu hình thời gian hiệu lực Runtime hoặc Permanent.

Runtime(mặc định): có tác dụng ngay lập tức, mất hiệu lực khi reboot hệ thống.
Permanent: không áp dụng cho hệ thống đang chạy, cần reload mới có hiệu lực, tác dụng vĩnh viễn cả khi reboot hệ thống.
Ví dụ, thêm quy tắc cho cả thiết lập Runtime và Permanent:

# firewall-cmd –zone=public –add-service=http
# firewall-cmd –zone=public –add-service=http –permanent
# firewall-cmd –reload

Việc Restart/Reload sẽ hủy bộ các thiết lập Runtime đồng thời áp dụng thiết lập Permanent mà không hề phá vỡ các kết nối và session hiện tại. Điều này giúp kiểm tra hoạt động của các quy tắc trên tường lửa và dễ dàng khởi động lại nếu có vấn đề xảy ra.

Lưu ý: Các ví dụ thiết lập trong bài sử dụng cả Runtime và Permanent.

2. Cài đặt FirewallD
– FirewallD được cài đặt mặc định trên CentOS 7. Cài đặt nếu chưa có:

# yum install firewalld

– Khởi động FirewallD:

# systemctl start firewalld

– Kiểm tra tình trạng hoạt động

# 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 Tue 2022-09-27 05:57:44 +07; 4min 28s ago
Docs: man:firewalld(1)
Main PID: 56383 (firewalld)
CGroup: /system.slice/firewalld.service
└─56383 /usr/bin/python2 -Es /usr/sbin/firewalld –nofork –nopid

# systemctl is-active firewalld
active

# firewall-cmd –state
running

– Thiết lập FirewallD khởi động cùng hệ thống

# systemctl enable firewalld
Kiểm tra lại :

# systemctl is-enabled firewalld
enabled

Ban đầu, bạn không nên cho phép FirewallD khởi động cùng hệ thống cũng như thiết lập Permanent, tránh bị khóa khỏi hệ thống nếu thiết lập sai. Chỉ thiết lập như vậy khi bạn đã hoàn thành các quy tắc tường lửa cũng như test cẩn thận.

– Khởi động lại

# systemctl restart firewalld
# firewall-cmd –reload

– Dừng và vô hiệu hóa FirewallD

# systemctl stop firewalld
# systemctl disable firewalld

Cấu hình FirewallD- Thiết lập các Zone

– Liệt kê tất cả các zone trong hệ thống

# firewall-cmd –get-zones
block dmz drop external home internal public trusted work

– Kiểm tra zone mặc định

# firewall-cmd –get-default-zone
public

– Kiểm tra zone active (được sử dụng bởi giao diện mạng)
Vì FirewallD chưa được thiết lập bất kỳ quy tắc nào nên zone mặc định cũng đồng thời là zone duy nhất được kích hoạt, điều khiển mọi luồng dữ liệu.

# firewall-cmd –get-active-zones
public
interfaces: ens33

Lệnh thay đổi zone mặc định: (ví dụ zone mặc định đang là public giờ đổi thành work:

# firewall-cmd –set-default-zone=work

success

Thiết lập các quy tắc

– Liệt kê toàn bộ các quy tắc của các zones:

# firewall-cmd –list-all-zones

– Liệt kê toàn bộ các quy tắc trong zone mặc định và zone active

# firewall-cmd –list-all

target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: dhcpv6-client ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Kết quả cho thấy public là zone mặc định đang được kích hoạt, liên kết với card mạng ens33 và cho phép DHCP cùng SSH.

Muốn xem toàn bộ các quy tắc trong một zone cụ thể bạn viết lệnh có dạng:

# firewall-cmd –list-all –zone=<tên zone>

Ví dụ xem quy tắc trong zone home:

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

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:

– Liệt kê danh sách services/port được cho phép trong zone cụ thể:

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

a. Thiết lập cho Service

Đây chính là điểm khác biệt của FirewallD so với Iptables – quản lý thông qua các services. Việc thiết lập tường lửa đã trở nên dễ dàng hơn bao giờ hết – chỉ việc thêm các services vào zone đang sử dụng.

– Đầu tiên, xác định các services trên hệ thống:

# firewall-cmd –get-services
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
Lưu ý: Biết thêm thông tin về service qua thông tin lưu tại /usr/lib/firewalld/services/.

Hệ thống thông thường cần cho phép các services sau: ssh(22/TCP), http(80/TCP), https(443/TCP), smtp(25/TCP), smtps(465/TCP) và smtp-submission(587/TCP)

– Thiết lập cho phép services trên FirewallD, sử dụng –add-service:

# firewall-cmd –zone=public –add-service=http
success

# firewall-cmd –zone=public –add-service=http –permanent
success

Ngay lập tức, zone “public” cho phép kết nối HTTP trên cổng 80. Kiểm tra lại

# firewall-cmd –zone=public –list-services
ssh dhcpv6-client http

– Vô hiệu hóa services trên FirewallD, sử dụng –remove-service:

# firewall-cmd –zone=public –remove-service=http
# firewall-cmd –zone=public –remove-service=http –permanent

b. Thiết lập cho Port

Trong trường hợp bạn thích quản lý theo cách truyền thống qua Port, FirewallD cũng hỗ trợ bạn điều đó.

– Mở Port với tham số –add-port:

# firewall-cmd –zone=public –add-port=9999/tcp
# firewall-cmd –zone=public –add-port=9999/tcp –permanent

Mở 1 dải port

# firewall-cmd –zone=public –add-port=4990-5000/tcp
# firewall-cmd –zone=public –add-port=4990-5000/tcp –permanent

Kiểm tra lại

# firewall-cmd –zone=public –list-ports
9999/tcp 4990-5000/tcp

– Đóng Port với tham số –remove-port:

# firewall-cmd –zone=public –remove-port=9999/tcp
# firewall-cmd –zone=public –remove-port=9999/tcp –permanent

Chúc các bạn thành công !

Nếu trong quá trình thực hiện xảy ra lỗi hay sự cố gì, các bạn có thể liên hệ bộ phận kỹ thuật để được giúp đỡ. Hiện tại BKHOST có các cách liên hệ như sau:
• Liên hệ qua số tổng đài 024 7303 8088, sau đó ấn phím 2 để gặp BPKT.
• Gửi ticket thông qua trang web id.bkhost.vn.
• Live chat trực tiếp trên trang chủ bkhost.vn.

Tags: