iptables là gì?
iptables là ứng dụng tường lửa miễn phí trong Linux, cho phép thiết lập các quy tắc riêng để kiểm soát truy cập, tăng tính bảo mật. Khi sử dụng máy chủ, tường lửa là một trong những công cụ quan trọng giúp bạn ngăn chặn các truy cập không hợp lệ. Đối với các bản phân phối Linux như Ubuntu, Fedora, CentOS… bạn có thể tìm thấy công cụ tường lửa tích hợp sẵn iptables.
Cách sử dụng iptables để mở port VPS
Chèn chuỗi ACCEPT PORT để mở port trong iptables với cấu trúc lệnh mở port xxx:
# iptables -A INPUT -p tcp -m tcp --dport xxx -j ACCEPT
A là Append – chèn vào chuỗi INPUT (chèn xuống cuối)
# iptables -I INPUT -p tcp -m tcp --dport xxx -j ACCEPT
I là Insert – chèn vào chuỗi INPUT (chèn vào dòng chỉ định rulenum).
Để tránh xung đột với rule gốc, chèn rule vào đầu, dùng –I.
Mở port SSH
Mở port SSH 22 để truy cập VPS thông qua SSH, cho phép kết nối SSH ở bất kì thiết bị nào, người nào, ở bất cứ đâu.
# iptables -I INPUT -p tcp -m tcp --dport 22 -j ACCEPT
SSH được hiển thị mặc định ở cổng 22, nếu đổi SSH sang một cổng khác thì iptables sẽ hiển thị số cổng.
ACCEPT tcp -- anywhere anywhere cp dpt:ssh
Cấu hình chỉ cho phép kết nối VPS qua SSH từ một địa chỉ IP duy nhất được xác định.
# iptables -I INPUT -p tcp -s xxx.xxx.xxx.xxx -m tcp --dport 22 -j ACCEPT
Lúc đó, iptables sẽ thêm rule
ACCEPT tcp -- xxx.xxx.xxx.xxx anywhere tcp dpt:ssh
Mở port Web Server
Cho phép truy cập vào web server qua port mặc định 80 và 443:
# iptables -I INPUT -p tcp -m tcp --dport 80 -j ACCEPT # iptables -I INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables hiển thị HTTP và HTTPS theo mặc định
ACCEPT tcp -- anywhere anywhere tcp dpt:http ACCEPT tcp -- anywhere anywhere tcp dpt:https
Mở port Mail
Cho phép user dùng SMTP Server qua port mặc định là 25 và 465:
# iptables -I INPUT -p tcp -m tcp --dport 25 -j ACCEPT # iptables -I INPUT -p tcp -m tcp --dport 465 -j ACCEPT
iptables sẽ hiển thị SMTP và URD theo mặc định
ACCEPT tcp -- anywhere anywhere tcp dpt:smtp ACCEPT tcp -- anywhere anywhere tcp dpt:urd
Mở port POP3 (port mặc định 110 và 995) cho phép user đọc mail trên server
# IPtables -A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
# IPtables -A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
iptables sẽ hiển thị POP3 và POP3S theo mặc định
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3
ACCEPT tcp -- anywhere anywhere tcp dpt:pop3s
Cho phép sử dụng giao thức IMAP mail protocol (port mặc định là 143 và 993)
# IPtables -A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
# IPtables -A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
iptables sẽ hiển thị IMAP và IMAPS theo mặc định
ACCEPT tcp -- anywhere anywhere tcp dpt:imap
ACCEPT tcp -- anywhere anywhere tcp dpt:imaps
Chặn 1 IP truy cập
# IPtables -A INPUT -s IP_ADDRESS -j DROP
Chặn 1 IP truy cập vào 1 port cụ thể
#IPtables -A INPUT -p tcp -s IP_ADDRESS –dport PORT -j DROP
Sau khi đã thiết lập tất cả bao gồm mở các port cần thiết hoặc hạn chế kết nối cần block toàn bộ các kết nối còn lại và cho phép toàn bộ các kết nối ra ngoài từ VPS.
# IPtables -P OUTPUT ACCEPT
# IPtables -P INPUT DROP
Kiểm tra lại các quy tắc sau khi thiết lập
# service IPtables status
Hoặc
# IPtables -L –n
-n để nói đến yếu tố cần quan tâm là địa chỉ IP, ví dụ nếu chặn kết nối từ một địa chỉ xác định thì iptables sẽ hiển thị là xxx.xxx.xxx.xxx với tham số -n
Kết thúc, lưu lại các thiết lập tường lửa iptables nếu không chúng sẽ mất khi reboot hệ thống. Đối với CenOS, cấu hình được lưu tại /etc/sysconfig/iptables.
# IPtables-save | sudo tee /etc/sysconfig/IPtables
Hoặc
# service IPtables save
IPtables: Saving firewall rules to /etc/sysconfig/IPtables:[ OK ]
Cách thiết lập iptables với Linux Firewall để bảo mật Ubuntu VPS
Bước 1: Cài đặt iptables Linux Firewall
- Cài đặt iptables
Hầu hết các bản Linux hiện nay đều được tích hợp sẵn iptables. Tuy nhiên, nếu chưa có sẵn trên Ubuntu hoặc Debian bạn có thể dùng lệnh sau để cài đặt:
sudo apt-get update
sudo apt-get install IPtables
- Xem trạng thái hiện tại của iptables
sudo IPtables -L –v
Trong đó, -L dùng để liệt kê tất cả quy tắc (rule) và –v để liệt kê các danh sách bổ trợ. Chú ý đến ký tự viết hoa và viết thường được phân biệt với nhau.
Ví dụ:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Kết quả trên cho biết ba Chain được thiết lập mặc định là ACCEPT và không có Chain nào có rule.
Bước 2: Định nghĩa các chain rules
Tức là thêm nó vào danh sách chain hiện tại, dưới đây là lệnh iptables được định dạng với các tùy chọn thông thường.
sudo IPtables -A -i <interface> -p <protocol (tcp/udp)> -s <source> --dport <port no.> -j <target>
Trong đó:
- A là thêm chain rules.
- i<interface> là giao diện mạng cần thực hiện lọc các gói tin.
- p<protocol> là giao thức mang thực hiện lọc (tcp/udp).
- dort<port no.> là cổng muốn đặt bộ lọc.
Cho phép lưu lượng truy cập trên localhost
Cho phép giao tiếp giữa ứng dụng mà database của nó trên server như bình thường.
sudo IPtables -A INPUT -i lo -j ACCEPT
Kết quả:
Chain INPUT (policy ACCEPT 7 packets, 488 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- lo any anywhere anywhere
-A thêm rules vào chains INPUT cho phép tất cả kết nối ở interface lo
Các cổng được phép truy cập: HTTP, SSH, SSL
sudo IPtables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo IPtables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo IPtables -A INPUT -p tcp --dport 443 -j ACCEPT
Cho phép tất cả các truy cập TCP trên các cổng 22 (SSH), HTTP (80), HTTPS (443).
Lọc các gói tin dựa trên nguồn
Thêm vào tham số -s để cho phép hoặc từ chối các gói tin dựa trên IP nguồn.
sudo IPtables -A INPUT -s 192.168.1.3 -j ACCEPT
Các gói tin đến từ IP nguồn là 192.168.1.3 sẽ được nhấp nhận.
sudo IPtables -A INPUT -s 192.168.1.3 -j DROP
Các gói tin đến từ IP nguồn là 192.168.1.3 sẽ bị từ chối.
sudo IPtables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP
Từ chối các gói tin từ một dãy IP, dùng tham số Iprange –m với dãy IP đặt sau-src-range.
Chặn tất cả truy cập
sudo IPtables -A INPUT -j DROP
Kiểm tra lại sau khi thiết lập
sudo IPtables -L –v
Lưu ý: cần DROP tất cả các gói tin từ các nguồn khác để tránh các truy cập trái phép từ các cổng mở trên server.
Xóa các rules
sudo IPtables -F
Xóa tất cả các rules để tạo lại từ đầu.
Để xóa từng rule khác nhau dùng tham số -D và chọn số tương ứng. Liệt kê các rule bằng lệnh:
sudo IPtables -L --line-numbers
Kết quả:
Chain INPUT (policy ACCEPT)
num target prot opt source destination
ACCEPT all -- 192.168.0.4 anywhere
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
Sau đó, xóa một rule bằng cú pháp
sudo IPtables -D INPUT 3
Xóa rules số 3 ở chain INPUT
Bước 3: Lưu giữ các thay đổi
Những iptables rules được tạo ra đều được lưu trong bộ nhớ, khi reboot máy chủ cần phải tạo lại các rules này. Để lưu giữ các thay đổi vào hệ thống dùng lệnh:
sudo /sbin/IPtables-save
Để tắt firewall, dùng lệnh:
sudo IPtables -F
sudo /sbin/IPtables-save