Hệ điều hành Centos 7 – Có gì mới và khác so với Centos 6 – Phần 3 - Firewalld
FASTER - STRONGER - SAVER
sales@1hosting.com.vn   0915 54 99 22
Trang Chủ > Kiến thức dịch vụ > Centos 7 >Hệ điều hành Centos 7 – Có gì mới và khác so với Centos 6 – Phần 3 – Firewalld

Hệ điều hành Centos 7 – Có gì mới và khác so với Centos 6 – Phần 3 – Firewalld

Firewalld là công cụ hoàn toàn mới trong họ nhà RHEL 7. Nó là giải pháp firewall toàn diện, mục đích là thay thế iptables vì iptables sẽ ngừng phát triển trong tương lai. Tuy hiện tại ta vẫn có thể sử dụng iptables thông qua cài đặt yum nhưng sẽ không thể sử dụng đồng thời các rule của iptables và firewalld trên cùng một hệ thống. Firewalld tăng cường khả năng quản lý rules bằng cách cho phép thay đổi các cấu hình trực tiếp mà không ảnh hưởng đến các kết nối hiện tại.

Để kiểm tra hoạt động của Firewalld :

# systemctl status firewalld
firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled)
   Active: active (running) since Tue 2014-06-17 11:14:49 CEST; 5 days ago
   ...

hoặc:

# firewall-cmd --state
running

1Hosting sẽ mô tả chi tiết các thành phần và cách thức hoạt động của Firewalld qua các ví dụ sau:

1. Zone Management

Khác với iptables sử dụng các INPUT, OUTPUT & FORWARD CHAINSFirewalld sử dụng các zone để quản lý. Các interface cần phải được gán vào các zone để hoạt động. Zone định nghĩa mức allow/deny đến các interface. Một zone có thể chứa các services và ports.

Firewalld sử dụng các zone như sau:

1. Drop Zone: Các packet sẽ bị droptương tự sử dụng lệnh iptables -j drop.

2. Block Zone: Deny việc mở các kết nối mới đến và reject trả về một icmp-host-prohibited. Chỉ các established connections mới được cho phép

3. Public Zone: Allow các connections đã được định nghĩa với port cụ thể trong các rules.

4. External Zone: Zone này hoạt động như một router với  tính năng masquerading.

5. DMZ Zone: Zone này cho phép các services cụ thể kết nối ra ngoài internet hay nhận về những kết nối đã được lựa chọn trước.

6Work Zone: Ở zone này, chúng ta chỉ có thể định nghĩa các internal networks như private networks.

7. Home Zone: được sử dụng cho những máy tính an toàn, không ảnh hưởng đến máy tính khác trong mạng.

8. Internal Zone: Tương tự work zone ở trên với tính năng allow connections.

9. Trusted Zone: Zone này Allow mọi kết nối đi qua

Public zone và Private zone là 2 zone cơ bản của hệ thống Centos 7. Để list default zone ta dùng lệnh sau:

# firewall-cmd --get-default-zone
public

Để list zones và interface đang kết nối:

# firewall-cmd --get-active-zones
public
interfaces: eth0

List tất cả các zone đang hoạt động:

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

Thay đổi default zone (sang home):

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

Chú ý: Các thông tin ở trên đều có trong file /etc/firewalld/firewalld.conf

Network interfaces có thể được gán cứng vào 1 zone. Ví dụ để gán cứng  eth0 network interface vào internal zone (file internal.xml sẽ được tạo trong thư mục /etc/firewalld/zones):

# firewall-cmd --permanent --zone=internal --change-interface=eth0
success
# nmcli con show | grep eth0
System eth0  4de55c95-2368-429b-be65-8f7b1a357e3f  802-3-ethernet  eth0
# nmcli con mod "System eth0" connection.zone internal
# nmcli con up "System eth0"
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/1)

Chú ý: Việc trên cũng có thể thực hiện bằng cách thay đổi file /etc/sysconfig/network-scripts/ifcfg-eth0 và add ZONE=internalf, sau đó chạy # nmcli con reload (nmcli sẽ trình bày ở bài viết sau).

Để xem zone nào đang gán vào interface:

# firewall-cmd --get-zone-of-interface=eth0
internal

Để tạo zone mới:

# firewall-cmd --permanent --new-zone=test
success
# firewall-cmd --reload
success

Note: Các zones mới phải có tùy chọn –permanent

2. Source Management

Một interfaces có thể có nhiều zone trên đó.

Đặc biệt chú ý: Firewalld dựa trên NetworkManager. Điều đó có nghĩa nếu muốn stop NetworkManager ta cũng phải stop firewalld và sử dụng Iptables thay thế.

Để add source (192.168.2.0/24) vào zone (trusted) permanently ta làm như sau:

# firewall-cmd --permanent --zone=trusted --add-source=192.168.2.0/24
success
# firewall-cmd --reload
success

Để list các source đang gán vào một zone:

# firewall-cmd --zone=trusted --list-sources
192.168.2.0/24

Kiểm tra các active zone:

# firewall-cmd --get-active-zones
public
  interfaces: eth0
trusted
  sources: 192.168.2.0/24

Ví dụ dưới đây cho phép kết nối đến server từ những source là địa chỉ IP cụ thể:

# firewall-cmd --zone=internal --add-service=ssh --permanent
success
# firewall-cmd --zone=internal --add-source=1.2.3.4/32 --permanent
success
# firewall-cmd --zone=public --remove-service=ssh --permanent
success
# firewall-cmd --reload
success

3. Service Management

Sau khi đã gán interface vào các zone mong muốn, ta cần add service vào mỗi zone. Ví dụ là add cứng (có 2 trạng thái là add tạm thời – immediate và add cứng – permanent) http service vào internal zone:

# firewall-cmd --permanent --zone=internal --add-service=http
success
# firewall-cmd --reload
success

Nếu muốn add tạm thời nhiều services thì như sau:

# firewall-cmd --zone=internal --add-service={http,https,dns}
success

Để list các services trong default zone:

# firewall-cmd --list-services
dhcpv6-client ssh

Note: Để list các services của một zone cụ thể, add thêm – -zone= option.

4. Service Firewall Configuration

Trong firewalld, các cấu hình của main services nằm trong thư mục /usr/lib/firewalld/services. Nhưng ta vẫn có thể thêm mới trong thư mục /etc/firewalld/services. Ví dụ thêm HAProxy service. Trước tiên tạo file  /etc/firewalld/services/haproxy.xml và paste nội dung sau:

<?xml version="1.0" encoding="utf-8"?>
<service>
 <short>HAProxy</short>
 <description>HAProxy load-balancer</description>
 <port protocol="tcp" port="80"/>
</service>

Note: Ta có thể sử dụng lệnh  firewall-cmd –permanent –new-service=haproxy để tạo file cấu hình tương ứng

Gán SELinux context và  file permissions cho  haproxy.xml:

# cd /etc/firewalld/services
# restorecon haproxy.xml
# chmod 640 haproxy.xml

Add HAProxy service vào default zone permanently và reload lại cấu hình:

# firewall-cmd --permanent --add-service=haproxy
success
# firewall-cmd --reload
success

5. Port Management

Port management có cách hoạt động giống hệt như service management. Chẳng hạn, để allow port 443/tcp tạm thời trong internal zone:

# firewall-cmd --zone=internal --add-port=443/tcp
success

Chú ý 1: Nếu muốn allow vĩnh viễn thêm tùy chọn  – –permanent và  reload lại.
Chú ý 2: Nếu bỏ port thì dùng option  – -remove-port=443/tcp

Để list các ports đang mở trong internal zone:

# firewall-cmd --zone=internal --list-ports
443/tcp

6. Direct Rules

Một cách khác để tạo các rules cụ thể là sử dụng  chế độ direct (chẳng hạn mở tcp port 9000):

# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT
success

Chú ý:  Không cần lệnh reload , tất cả các lệnh đều là directly activated.

Để hiện thị các direct rules:

# firewall-cmd --direct --get-all-rules

Các cấu hình được ghi lại trong file /etc/firewalld/direct.xml

7. Special Modules

Đôi khi ta cần phải download một vài module đặc biệt. Thay vì sử dụng rc.local file để khởi động, ta dùng Firewalld load qua thư mục /etc/modules-load.d .Trong ví dụ này ta add thêm modules ip_nat_ftp và  ip_conntrack_ftp  để theo dõi ftp connections.

# echo ip_nat_ftp > /etc/modules-load.d/firewall_ftp.conf
# echo ip_conntrack_ftp >> /etc/modules-load.d/firewall_ftp.conf

8. Configuration Backup

Ta cần phân biệt giữa iptables service và iptables command. firewalld chỉ là bộ manager thay thế cho iptables services, còn nó vẫn sử dụng các lệnh  iptables để giao tiếp với kernel packet filter (netfilter).

Để lưu các cấu hình ra file, dùng lệnh:

# iptables -S > firewalld_rules_ipv4
# ip6tables -S > firewalld_rules_ipv6