Hướng dẫn thay đổi tường lửa Firewalld bằng Iptables trên Red Hat CentOS 7
Chào các bạn! Từ phiên bản CentOS 7 Red Hat đã quyết định thay thế dịch vụ Iptables bằng dịch vụ Firewalld, Firewalld nhắm đến việc quản lý vùng (ZONE) cho thiết bị mạng nếu nó phải di chuyển nhiều, ví dụ laptop hoặc phone… để mỗi nơi bạn đến bạn sẽ tùy theo đó chuyển dịch chế độ mạng sang Công ty – Nhà – Quán cafe công cộng… Giống như Firewall Windows hay hỏi bạn mỗi khi bạn bắt được Wifi hay cắm mạng vào. Việc này rất hay tuy nhiên theo mình thấy nếu ở trên Server nằm một chổ trong Datacenter thì việc ấy khá thừa thải.
(Nếu bạn vẫn quyết định muốn sử dụng Firewalld trên Red Hat CentOS 7 bạn có thể vào đây xem cách sử dụng)
Tìm hiểu và sử dụng Firewalld thì cũng khá hay và hợp thời tuy nhiên đối với những bạn đã quá quen với việc sử dụng dịch vụ Iptables truyền thống thì lại muốn quay về chế độ quản lý tường lửa như trước, hôm nay mình sẽ hướng dẫn các bạn thay thế tường lửa Firewalld bằng Iptables trên Red Hat CentOS 7.
Đầu tiên các bạn tắt Firewalld đi bằng các câu lệnh sau:
system-config-firewall-tui
systemctl stop firewalld
systemctl disable firewalld
Kiểm tra lại trạng thái Firewalld đã không còn chạy nữa:
firewall-cmd --state
not running
Xem lại những rule cũ đang có trên Firewalld:
grep 'ACCEPT\|DROP\|QUEUE\|RETURN\|REJECT\|LOG' ~/firewalld_iptables_rules
Mọi người sẽ thấy lại những rule mà chúng ta đã add vào Firewalld ở bài trước:
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i lo -j ACCEPT
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
-A IN_public_allow -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 21 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -p tcp -m tcp --dport 80 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
-A IN_public_allow -p udp -m udp --dport 5000:6000 -m conntrack --ctstate NEW -j ACCEPT
Bạn có thể lưu lại thông tin trên để sau sử dụng mà add vào Iptables.
Bây giờ chúng ta cài đặt dịch vụ Iptables trên Red Hat CentOS 7:
yum -y install iptables-services
Kiểm tra cấu hình rule mới mà Iptables đang có:
cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Như bạn có thể thấy bên trên, Iptables đã có open sẵn port 22/tcp
để bạn có thể ssh vào nếu bạn tiến hành chạy Iptables lúc này:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
Tuy nhiên những port cũ cần thiết ta đã cho phép như 21,80/tcp
hay dãy 5000-6000/udp
thì vẫn chưa có. Bạn có thể thêm vào tương ứng theo ý bạn. Chú ý bạn phải có kiến thức về việc viết rule Iptables để làm những việc này. Còn mình ở đây chỉ đơn giản là copy lại dòng cho phép port 22 và thay đổi vào đó những port cần thiết theo ý mình:
nano /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 53 -j ACCEPT
-A INPUT -p udp -m state --state NEW -m udp --dport 5000:6000 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Sửa xong save lại bạn có thể chạy dịch vụ Iptables:
service iptables start
service ip6tables start
chkconfig iptables on
chkconfig ip6tables on
Bạn kiểm tra lại các port xem đã mở chưa, chú ý phải có ứng dụng đang lắng nghe ở port đó thì mới có thể check port qua các website cung cấp tool check. Mình thường check port ở site này.
Chúc các bạn thành công