Firewalld là công cụ hoàn toàn mới trong RHEL 7. Mục đích là thay thế iptables và kết nối vào netfilter kernel code. . Nó cung cấp các dòng lệnh và giao diện đồ họa và có sẵn trong kho của hầu hết các bản phân phối Linux. Làm việc với FirewallD có hai sự khác biệt chính so với iptables kiểm soát trực tiếp: - FirewallD sử dụng các zone và dịch vụ (service) thay vì chuỗi và quy tắc. - Nó quản lý rulesets tự động, cho phép cập nhật mà không vi phạm các phiên và kết nối hiện tại. Cài đặt và quản lý FirewallD Để bắt đầu dịch vụ và cho phép FirewallD khi khởi động: Mã: systemctl start firewalld systemctl enable firewalld Để dừng và vô hiệu hóa nó: Mã: systemctl stop firewalld systemctl disable firewalld Kiểm tra tình trạng tường lửa. Đầu ra phải thể hiện tình trạng chạy hay không chạy. Mã: firewall-cmd --state Để xem trạng thái của daemon FirewallD: Mã: systemctl status firewalld Ví dụ về đầu ra: Mã: firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled) Active: active (running) since Wed 2015-09-02 18:03:22 UTC; 1min 12s ago Main PID: 11954 (firewalld) CGroup: /system.slice/firewalld.service └─11954 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid Để reload cấu hình tường lửa: Mã: firewall-cmd --reload Cấu hình FirewallD Firewalld được cấu hình với các tập tin XML. Cấu hình tập tin đang nằm trong hai thư mục: - /usr/lib/FirewallD giữ cấu hình mặc định như default zones và các dịch vụ thông thường. Tránh cập nhật chúng bởi vì các tập tin sẽ bị ghi đè bởi mỗi lần cập nhật gói firewalld. - /etc/firewalld giữ các tập tin cấu hình hệ thống. Những tập tin này sẽ ghi đè lên tập tin cấu hình mặc định. Thiết lập cấu hình Firewalld sử dụng hai thiết lập cấu hình: Runtime và Permanent. Thay đổi cấu hình Runtime không được lưu giữ khi khởi động lại hoặc khi khởi động lại FirewallD trong khi thay đổi Permanent không được áp dụng cho hệ thống đang chạy. Theo mặc định, lệnh firewall-cmd áp dụng cho Runtime nhưng cách sử dụng cờ --permanent sẽ thiết lập một cấu hình ổn định. Để thêm và kích hoạt một quy tắc cố định, bạn có thể sử dụng một trong hai phương pháp. Thêm quy tắc cho cả thiết lập Runtime và Permanent: Mã: firewall-cmd --zone=public --add-service=http --permanent firewall-cmd --zone=public --add-service=http Thêm các quy tắc đến thiết lập Permanent và khởi động lại FirewallD. Mã: firewall-cmd --zone=public --add-service=http --permanent firewall-cmd --reload Lệnh khởi động sẽ drop tất cả thiết lập Runtime và áp dụng thiết lập Permanent. Bởi vì firewalld quản lý ruleset động, nó sẽ không phá vỡ một kết nối và phiên hiện tại. Firewall Zones Các Zone là rulesets pre-constructed cho các mức độ tin cậy khác nhau. Các Zone khác nhau cho phép các dịch vụ mạng khác nhau và các loại lưu lượng gửi đến trong khi từ chối tất cả mọi thứ khác. Sau khi kích hoạt FirewallD cho lần đầu tiên, Public sẽ là zone mặc định. Các Zone cũng có thể được áp dụng cho các giao diện mạng khác nhau. Ví dụ, với giao diện riêng biệt cho cả một mạng nội bộ và Internet, bạn có thể cho phép DHCP trên một khu vực (zone) nội bộ nhưng chỉ HTTP và SSH trên khu vực bên ngoài. Bất kỳ giao diện không rõ ràng thiết lập một zone cụ thể sẽ được gắn vào vùng mặc định. Để xem zone mặc định: Mã: firewall-cmd –get-default-zone Để thay đổi zone mặc định: Mã: firewall-cmd –set-default-zone=internal Để xem các zone được sử dụng bởi giao diện mạng của bạn (s): Mã: firewall-cmd –get-active-zones Ví dụ đầu ra: Mã: public interfaces: eth0 Để có được tất cả các cấu hình cho một zone cụ thể: Mã: firewall-cmd --zone=public --list-all Ví dụ đầu ra: Mã: public (default, active) interfaces: ens160 sources: services: dhcpv6-client http ssh ports: 12345/tcp masquerade: no forward-ports: icmp-blocks: rich rules: Để có được tất cả các cấu hình cho tất cả các zone: Mã: firewall-cmd --list-all-zones Ví dụ đầu ra: Mã: block interfaces: sources: services: ports: masquerade: no forward-ports: icmp-blocks: rich rules: ... work interfaces: sources: services: dhcpv6-client ipp-client ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: Làm việc với các dịch vụ FirewallD có thể cho phép lưu lượng dựa trên các quy tắc được xác định trước cho các dịch vụ mạng cụ thể. Bạn có thể tạo những quy tắc dịch vụ riêng của bạn và thêm chúng vào khu vực bất kỳ. Các tập tin cấu hình cho các dịch vụ mặc định hỗ trợ được đặt tại /usr/lib/firewalld/services và các tập tin dịch vụ do người dùng tạo ra sẽ nằm trong /etc/firewalld /services. Để xem các dịch vụ có sẵn mặc định: Mã: firewall-cmd --get-services Như một ví dụ, để kích hoạt hoặc vô hiệu hóa dịch vụ HTTP: Mã: firewall-cmd --zone=public --add-service=http --permanent firewall-cmd --zone=public --remove-service=http --permanent Cho phép hoặc từ chối một cổng/giao thức (Port/Protocol) Ví dụ: Cho phép hoặc vô hiệu hóa lưu lượng TCP trên cổng 12345. Mã: firewall-cmd --zone=public --add-port=12345/tcp --permanent firewall-cmd --zone=public --remove-port=12345/tcp --permanent Cổng chuyển tiếp Các quy tắc ví dụ sẽ cho phép lưu lượng chuyển tiếp từ cổng 80 sang cổng 12345 trên cùng một máy chủ. Mã: firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=12345 Để chuyển tiếp một cổng vào một máy chủ khác nhau: Kích hoạt masquerade trong zone mặc định. Mã: firewall-cmd --zone=public --add-masquerade Thêm luật forward. Ví dụ này sẽ chuyển lưu lượng từ cổng 80 đến cổng 8080 trên một máy chủ từ xa đặt tại địa chỉ IP: 123.456.78.9. Mã: firewall-cmd --zone="public" --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=123.456.78.9 Để loại bỏ các quy tắc, thay --add với --remote. Ví dụ: Mã: firewall-cmd --zone=public --remove-masquerade Xây dựng một ruleset với FirewallD Như một ví dụ, đây là cách bạn sẽ sử dụng FirewallD gán quy tắc cơ bản đến máy chủ của bạn. Gán zone dmz như là zone mặc định đến eth0. Trong khu mặc định được cung cấp, dmz là nơi tốt nhất để bắt đầu cho ứng dụng này vì nó chỉ cho phép SSH và ICMP Mã: firewall-cmd --set-default-zone=dmz firewall-cmd --zone=dmz --add-interface=eth0 Thêm quy tắc dịch vụ permanent cho HTTP và HTTPS tới vùng dmz: Mã: firewall-cmd --zone=dmz --add-service=http --permanent firewall-cmd --zone=dmz --add-service=https --permanent Khởi động lại FirewallD để các quy tắc có hiệu lực ngay lập tức: Mã: firewall-cmd --reload Nếu bây giờ bạn chạy câu lệnh firewall-cmd --zone=dmz --list-all, kết quả đầu ra: Mã: dmz (default) interfaces: eth0 sources: services: http https ssh ports: masquerade: no forward-ports: icmp-blocks: rich rules: Điều này cho chúng ta biết rằng zone dmz là zone mặc định của chúng tôi áp dụng cho các giao diện eth0, tất cả các nguồn mạng và cổng.Lưu lượng Incoming HTTP (port 80), HTTPS (port 443) và SSH (port 22) được phép và vì không có hạn chế về phiên bản IP, điều này sẽ áp dụng cho cả IPv4 và IPv6. Masquerading và cổng chuyển tiếp không được phép. Chúng tôi không có khối ICMP, vì vậy lưu lượng ICMP được phép đầy đủ, và không có rich rules. Tất cả lưu lượng gửi đi được cho phép. Cấu hình nâng cao Các dịch vụ và cổng là tốt cho cấu hình cơ bản nhưng có thể quá hạn chế cho cấu hình nâng cao. Rich rules và Direct Interface cho phép bạn thêm các quy tắc tùy chỉnh hoàn toàn tường lửa vào bất kỳ zone đối với bất kỳ cổng, giao thức, địa chỉ và hành động. Rich rules Cú pháp Rich rules là rộng lớn nhưng đầy đủ tài liệu trong trang https://jpopelka.fedorapeople.org/firewalld/doc/firewalld.richlanguage.html (hoặc dùng lệnh man firewalld.richlanguage ). Sử dụng --add-rich-rule, --list-rich-rules and --remove-rich-rule với lệnh firewall-cmd để quản lý chúng. Dưới đây là một số ví dụ: Cho phép tất cả lưu lượng IPv4 từ host 192.168.0.14. Mã: firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.0.14 accept' Từ chối lưu lượng IPv4 qua TCP từ host 192.168.1.10 đến cổng 22. Mã: firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address="192.168.1.10" port port=22 protocol=tcp reject' Cho phép lưu lượng IPv4 qua TCP từ host 10.1.0.3 đến cổng 80, và chuyển tiếp nó đến cổng 6532. Mã: firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 source address=10.1.0.3 forward-port port=80 protocol=tcp to-port=6532' Chuyển tiếp tất cả lưu lượng IPv4 trên cổng 80 đến cổng 8080 trên host 172.31.4.2 Mã: firewall-cmd --zone=public --add-rich-rule 'rule family=ipv4 forward-port port=80 protocol=tcp to-port=8080 to-addr=172.31.4.2' Để liệt kê Rich Rules hiện tại của bạn: Mã: firewall-cmd –list-rich-rules Iptables Direct Interface Để xem tất cả các chuỗi tùy chỉnh hoặc quy tắc thêm vào FirewallD: Mã: firewall-cmd --direct --get-all-chains firewall-cmd --direct --get-all-rules