Hướng dẫn thiết lập IPtables cho hệ thống Cloud Server Linux
Bài viết dưới đây sẽ hướng dẫn bạn cách thiết lập bảo mật IPtables cho hệ thống máy chủ ảo Cloud Server Linux.
Thông qua bài viết này, chúng tôi sẽ giải thích cụ thể cách “Làm thế nào để chinh phục Iptables?” theo hướng đơn giản và dễ hiểu nhất.
IPtables là gì?
Sử dụng tường lửa (Firewall) hầu như là việc bắt buộc phải làm khi chúng ta vận hành Cloud Server. Để chống lại các truy cập bất hợp pháp bằng cách tự thiết lập ra các quy tắc chặn truy cập của riêng chúng ta.
Trong các phiên bản hệ điều hành của Linux như CentOS, Ubuntu hay Fedora,… có tích hợp sẵn hay cài đặt 1 công cụ để quản lý, cấu hình các quy tắc Firewall gọi là IPtables được sử dụng rộng rãi nhất hiện nay nhưng thật khó cấu hình cho các bạn vừa làm quen hệ thống Linux.
Một số thuật ngữ cần biết trong IPtables
Trước khi tiến hành thiết lập IPtables, hãy tìm hiểu ý nghĩa danh sách các quy tắc tường lửa cần thiết trong Cloud Server Linux. Theo mặc định, IPtables sẽ không có bất cứ quy tắc nào cả.
Theo như hình trên, có thể thấy các cột như TARGET, PROT, OPT, IN, OUT, SOURCE, DESTINATION. Ý nghĩa của chúng là:
- TARGET: Hành động sẽ thực thi cho mỗi chuỗi quy tắc.
- PROT: Viết tắt của từ Protocol – giao thức. Tức là các giao thức sẽ được áp dụng để thực thi quy tắc này. Bạn có 3 lựa chọn gồm: all, tcp hoặc udp. Các ứng dụng như SSH, FTP, sFTP, … đều sử dụng giao thức kiểu tcp.
- IN: Thiết bị mạng nhận kết nối vào được áp dụng cho quy tắc, chẳng hạn như lo, eth0, eth1.
- OUT: Thiết bị mạng phục vụ nhu cầu gửi kết nối ra ngoài được áp dụng quy tắc.
- DESTINATION: Địa chỉ của lượt truy cập được phép áp dụng quy tắc.
ODS sẽ giải thích ý nghĩa các hàng ngang trong danh sách ví dụ dưới đây:
Dòng thứ nhất
Chấp nhận toàn bộ kết nối thông qua thiết bị lo – “Loopback Interface“ – là một thiết bị mạng ảo nội bộ, chẳng hạn như IP 127.0.0.1 là kết nối qua thiết bị này.
Dòng thứ hai
Cho phép giữ lại các kết nối hiện tại. Có nghĩa rằng, khi bạn đang ở trong SSH và điều chỉnh lại Firewall, hệ thống sẽ không ngắt kết nối của bạn ra khỏi SSH nếu bạn không thỏa mãn quy tắc.
Dòng thứ ba
Cho phép kết nối vào SSH Server ở bất cứ thiết bị nào, bất cứ ai và bất cứ đâu. Mặc định hệ thống sẽ hiển thị dpt:ssh để diễn đạt port 22 của SSH. Nếu bạn có điều chỉnh Port SSH thì hệ thống sẽ hiển thị thông tin Port tương ứng.
Dòng thứ tư
Cho phép kết nối vào cổng 80 và mặc định sẽ diễn đạt bằng chữ http.
Dòng thứ năm
Cho phép kết nối vào cổng 443 và mặc định sẽ diễn đạt bằng chữ https.
Dòng thứ sáu
Tạo Rule IPtables
Nếu IPtables chưa được thiết lập, bạn chạy lệnh dưới đây để kiểm tra Filter Rule:
iptables -L -v
Tại đoạn trên, bạn sẽ thấy hệ thống gồm có 3 quy tắc nhỏ (chain) để giúp bạn thiết lập các nguyên tắc lọc gói:
- Forward Chain : lọc gói khi đi đến các server khác.
- Input Chain : lọc gói khi đi vào trong server.
- Output Chain : lọc gói khi ra khỏi server.
Lọc các kết nối
Giả dụ tôi thiết lập một rule đơn giản vào IPtables bằng lệnh sau:
iptables -A INPUT -i lo -j ACCEPT
Với ý nghĩa :
- -A INPUT: khai báo kiểu kết nối sẽ được áp dụng (-A nghĩa là Append).
- -i lo: Khai báo thiết bị mạng được áp dụng (-i < interface-name > nghĩa là Interface).
- -j ACCEPT: khai báo hành động sẽ được áp dụng cho quy tắc này (-j < target > nghĩa là Jump).
Kiểm tra Filter Rule lần nữa, bạn sẽ thấy Rule chúng ta vừa thiết lập đã xuất hiện:
Hoặc ta cùng xem một ví dụ sau :
iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p TCP -j ACCEPT
Lệnh này có ý nghĩa rằng IPtables được cấu hình cho phép tường lửa chấp nhận các gói dữ liệu TCP, đến từ Card mạng eth0, có bất kỳ địa chỉ IP nguồn đi đến địa chỉ 192.168.1.1 – là địa chỉ IP của tường lửa. 0/0 nghĩa là bất kỳ địa chỉ IP nào.
Lưu lại các kết nối hiện tại
Bây giờ chúng ta thêm một quy tắc để cho phép lưu lại các kết nối hiện tại để tránh hiện tượng tự Block bạn ra khỏi Cloud Server.
iptables -A INPUT -m conntrack –ctstate RELATED,ESTABLISHED -j ACCEPT
Đoạn lệnh này có cấu trúc giống như quy tắc chúng ta vừa thiết lập ở ví dụ phía trên nhưng lần này sẽ có thêm hai tham số mới là:
- -m conntrack: Sử dụng cho các kết nối thuộc Module “Connection Tracking“ với 4 kiểu kết nối gồm NEW, RELATED, ESTABLISHED và INVALID. Cụ thể, bạn sẽ sử dụng kiểu RELATED và ESTABLISHED để lọc các kết nối đang truy cập.
- –ctstate RELATED,ESTABLISHED: Dùng để khai báo loại kết nối được áp dụng thuộc Module “Connection Tracking“.
Cho phép truy cập Port cụ thể
Để thiết lập truy cập vào Port cụ thể, bạn sử dụng lệnh dưới đây:
iptables -A INPUT -p tcp –dport 22 -j ACCEPT
iptables -A INPUT -p tcp –dport 80 -j ACCEPT
iptables -A INPUT -j DROP
Có ý nghĩa là:
- -p tcp: Giao thức được áp dụng.
- –dport 22 và –dport 80: Cổng cho phép áp dụng.
- -j DROP : Nhưng sẽ khóa toàn bộ các kết nối còn lại.
Bổ sung Rule IPtables
Ở mục số 2, nếu bạn tinh ý sẽ nhận thấy chúng ta luôn sử dụng tham số -A (nghĩa là Append) để thêm Rule mới vào danh sách các rule của IPtables, với mỗi 1 rule mới hệ thống sẽ chèn vào dòng cuối cùng.
Nhưng nếu bạn muốn thêm một quy tắc và sắp xếp vị trí như mong muốn thì phải điều chỉnh tham số thành -I thay cho -A, chẳng hạn như:
iptables -I INPUT 2 -p tcp –dport 443 -j ACCEPT
Trong đó, -I INPUT 2 là việc chúng tôi đặt Rule này vào dòng thứ 2 trong danh sách các Rule thuộc loại kết nối INPUT. Cũng xin nêu rõ thêm là Port 443 chính là cổng HTTPS/SSL.
Xóa Rule IPtables
Trong phần 2, chúng ta đã thiết lập Rule cho phép kết nối vào cổng 22 của SSH. Nhưng nếu bạn đã đổi cổng SSH rồi thì dĩ nhiên chúng ta sẽ không cần Rule này nữa. Vì thế chúng ta cần xóa đi để thêm một Rule mới.
Trước khi xóa, quan trọng nhất là bạn cần phải xác định được quy tắc này nằm ở hàng thứ mấy trong loại kết nối (INPUT, OUTPUT,..) bằng việc thực thi command : iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all — anywhere anywhere
ACCEPT tcp — anywhere anywhere tcp dpt:https
ACCEPT all — anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT tcp — anywhere anywhere tcp dpt:ssh
ACCEPT tcp — anywhere anywhere tcp dpt:http
DROP all — anywhere anywhere
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Vậy ở đây là chúng ta cần xóa quy tắc số 4 của INPUT:
iptables -D INPUT 4
Ngoài ra, nếu bạn muốn xóa toàn bộ các quy tắc chứa hành động DROP thì có thể sử dụng lệnh sau:
iptables -D INPUT -j DROP
Lưu cấu hình IPtables
Sau khi cấu hình xong, bạn phải luôn nhớ gõ lệnh lưu quy tắc và khởi động lại IPtables để hệ thống áp dụng thay đổi.
service iptables save
service iptables restart
Mặc dù IPtables còn có thêm nhiều khái niệm khác nữa các bạn có thể tham khảo thêm tại HowTos/Network/Iptables của CentOS để hiểu hơn.
Các bạn cần biết rằng IPtables khá quan trọng nên nếu có thể bạn hãy nắm vững cách sử dụng. Bởi vì ngoài IPtables ra, còn có một số ứng dụng khác như CSF Firewall, Fail2Ban để thiết lập tường lửa. Nhưng chung quy lại vẫn sử dụng thông qua IPtables.
Chúc bạn thiết lập IPtables cho hệ thống Cloud Server Linux thành công!