Trang Chủ > Kiến thức dịch vụ > KB & Tips > 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. Mục đích là thay thế iptables và kết nối vào netfilter kernel code. 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

 

Zone Management

Firewalld 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.
  6. Work 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

Để list default zone:

# 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

Note: 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)

Note: 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
Để 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: Chỉ  permanent zones mới được phép tạo

Source Management

Nhiều zone có thể được đặt trên một interfaces duy nhất

Đặ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

Service Management

Sau khí đã 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 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.

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

Port Management

Port management có cách hoạt động giống hệt như service management.

Để allow port 443/tcp tạm thời trong internal zone:

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

Note1: Nếu muốn allow vĩnh viễn chọn thêm  –permanent option và  reload lại.
Note2: 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

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

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  ip_nat_ftp và  ip_conntrack_ftp modules để 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

Configuration Backup

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

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

Hỗ trợ Kinh Doanh
0903 213 881 Mrs.Thủy
0902 146 868 Mr.Tuấn
sales@3tvn.net
Hỗ Trợ Kỹ Thuật
03.8587.0000 Mr.Trí
0902 146 868 Mr.Tuấn
support@3tvn.net
Tư vấn Máy Chủ
03.8587.0000 Mr.Trí
0902 146 868 Mr.Tuấn
support@3tvn.net
ĐỐI TÁC