Bài viết này hướng dẫn về cách cài đặt và cấu hình iptables
trên CentOS.
Tới thời điểm hiện tại, tuy rằng CentOS 7 sử dụng firewalld
làm công cụ thiết lập các chính sách mạng cho server linux, nhưng mình vẫn quen sử dụng iptables
hơn.
Trong hướng dẫn dưới đây, cách cài đặt iptables
trên CentOS 6 và CentOS 7 chỉ khác nhau ở các lệnh start
, stop
, restart
, disable
, enable
service trên CentOS. Mục này các bạn tham khảo trên internet để tìm hiểu thêm.
Cài đặt iptables
Nếu hệ điều hành bạn đang sử dụng là CentOS 7, trước tiên cần gỡ bỏ firewalld để tránh sung đột:
sudo systemctl stop firewalld sudo systemctl disable firewalld
Cài đặt iptables bằng lệnh yum:
sudo yum install -y iptables-services sudo systemctl start iptables sudo systemctl status iptables sudo systemctl enable iptables
Các thiết lập cấu hình cơ bản
Thiết lập các cấu hình iptables cơ bản để đảm bảo an toàn cho server bằng cách chặn toàn bộ INPUT tới server, chỉ cho phép OUTPUT từ server đi.
sudo iptables -F sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP sudo iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP sudo iptables -A INPUT -i lo -j ACCEPT sudo iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -P INPUT DROP sudo iptables-save | sudo tee /etc/sysconfig/iptables sudo systemctl restart iptables sudo iptables -L -n
Ở đây, lệnh sudo iptables -F
được sử dụng để xóa toàn bộ cấu hình. Cần cực kỳ lưu ý khi sử dụng lệnh này.
sudo iptables -P OUTPUT ACCEPT
: Cho phép toàn bộ OUTPUT.
sudo iptables -P INPUT DROP
: Chặn toàn bộ INPUT.
sudo iptables-save | sudo tee /etc/sysconfig/iptables
: Lưu lại cấu hình iptables được chỉnh sửa trong session hiện tại.
sudo iptables -L -n
: Hiển thị cấu hình iptables được thiết lập.
Mở kết nối đến/đi
Để bổ sung cấu hình cho phép kết nối tới một port hoặc dải port trên server, chúng ta sử dụng câu lệnh:
sudo iptables -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT sudo iptables -I INPUT -p tcp -m tcp --dport 8000:9000 -j ACCEPT
Lệnh trên cho phép mở kết nối tới server qua port 22, là port SSH và dải port 8000-9000.
Chú ý: Tham số sử dụng ở đây là -I
, mục đích để bổ sung tiếp policy này vào danh sách policy hiện tại.
Để thực hiện cho phép mở nhiều port, các bạn sử dụng lệnh:
sudo iptables -I INPUT -p tcp -m multiport --dport 80,443 -j ACCEPT
Câu lệnh trên cho phép các máy trạm kết nối tới server qua 2 port 80, 443, là các port thường được sử dụng cho web.
Để cấu hình chỉ cho phép kết nối từ một hoặc vài IP hoặc một dải IP, chúng ta cấu hình như sau:
sudo iptables -I INPUT -s 10.0.0.0/24 -p tcp -m multiport --dport 389,636 -j ACCEPT sudo iptables -I INPUT -s 10.0.0.1,10.0.0.2 -p tcp -m multiport --dport 389,636 -j ACCEPT
Các ví dụ trên áp dụng cho các kết nối đến. Với các kết nối đi, đơn giản chúng ta thay INPUT
thành OUTPUT
.
Chặn kết nối đến/đi
Nếu để ý, các bạn sẽ thấy cuối mỗi chính sách trong các ví dụ trên kết thúc bằng ACCEPT
, tức là cho phép. Để chặn kết nối, chúng ta thay từ khóa ACCEPT
bằng REJECT
. Câu lệnh cấu hình sẽ như sau:
sudo iptables -I INPUT -p tcp -m multiport --dport 389,636 -j REJECT
Cách dùng trong các trường hợp cụ thể tương tự trong các ví dụ mở kết nối.
Xóa cấu hình
Để xóa cấu hình đã có, bạn chuẩn bị câu lệnh tương tự khi insert policy, sau đó thay từ khóa -I
thành -D
:
sudo iptables -D INPUT -p tcp -m multiport --dport 389,636 -j REJECT
Cho phép/Chặn ping
Để cấu hình cho phép ping
tới server, chúng ta thiết lập chính sách sau:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT
Để chặn ping
với thông báo Destination Port Unreachable
, chúng ta thiết lập:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j REJECT
Nếu muốn server không phản hồi thông báo nào, sử dụng thiết lập sau:
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j DROP sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP