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
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:
Để 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
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
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.
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 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
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
Đô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
Để lưu các cấu hình ra file, dùng lệnh:
# iptables -S > firewalld_rules_ipv4 # ip6tables -S > firewalld_rules_ipv6