Đa số các bản phiên bản Linux đều được cài đặt sẵn tiện tích tường lửa iptables
(riêng CentOS sử dụng firewalld
) để quản lý gói tin dựa theo các quy tắc được thiết lập sẵn nhằm nâng cao tính bảo mật cho hệ thống. Tuy nhiên việc cấu hình iptables
chẳng dễ dàng tí nào bởi cấu trúc lệnh dài dòng và khó nhớ.
Ví dụ muốn mở port 8888
phải gõ combo sau
Mở port 8888
iptables -A INPUT -p tcp -m tcp --dport 8888 -j ACCEPT
Code language: Nginx (nginx)
Lưu lại thông số, nếu không sau khi reboot sẽ bị mất
sudo netfilter-persistent save
Code language: Nginx (nginx)
Để cấu hình tường lưa trên Linux tiện lợi và hiệu quả hơn, bạn ta nên chuyển qua sử dụng UFW (Uncomplicated Firewall) do Canonical (công ty làm ra điều hành Ubuntu) phát triển. UFW không phải là một ứng dụng tường lừa thay thế iptables
, nó chỉ giao diện dòng lệnh của iptables
với các câu lệnh ngắn gọn, dễ nhớ hơn.
Với UFW, khi cần mở port 8888, chỉ cần phải gõ 1 lệnh duy nhất
sudo ufw allow 8888
Code language: Nginx (nginx)
Chỉ 1 dòng ngắn gọn duy nhất thay vì 2 dòng dài lê thê như khi dùng iptables
.
Dưới đây là hướng dẫn cách sử dụng UFW để giúp bạn cấu hình tường lửa trên Linux hiệu quả hơn.
Mục Lục
1. Cài đặt UFW
Bạn chỉ nên cài đặt UFW trên hệ thống Linux mới, chưa cài đặt bất cứ control panel, script quản lý nào như cPanel, aaPanel, CyberPanel, Centminmod,… Vì các loại control panel này luôn cài đặt sẵn các tiện ích tường lửa đi kèm. Cài đặt thêm UFW sẽ gây xung đột hệ thống.
Cập nhật hệ thống trước khi cài đặt
sudo apt update
sudo apt upgrade -y
Code language: Nginx (nginx)
Kiểm tra xem UFW đã được cài sẵn trên máy chưa bằng lệnh
which ufw
Code language: Bash (bash)
Nếu không nhận được kết quả nào, nghĩa là ufw chưa được cài đặt trong máy. Bạn cài đặt UFW như các package quen thuộc khác
sudo apt install ufw
Code language: Nginx (nginx)
Mặc định sau khi cài đặt, ufw sẽ không được kích hoạt. Bạn cần giữ nguyên như thế. Chỉ kích hoạt UFW sau khi đã thực hiện những bước cấu hình căn bản.
sudo ufw status
Code language: Nginx (nginx)
Kết quả trả về: inactivate
Output
Status: inactive
Code language: Nginx (nginx)
2. Cấu hình căn bản UFW
Thiết lập chế độ mặc định
Đầu tiên, bạn cần thiết lập chế độ hoạt động mặc định của UFW:
- Chặn tất cả các kết nối từ ngoài truy cập vào máy chủ
- Chỉ cho phép kết nối từ máy chủ ra bên ngoài.
Sau đó, chúng ta sẽ thiết lập thêm các quy tắc để cho phép các kết nối bên ngoài truy cập vào các dịch vụ qua các cổng được chỉ định tuỳ theo nhu cầu sử dụng.
Chặn deny
truy cập từ bên ngoài vào máy chủ:
sudo ufw default deny incoming
Code language: JavaScript (javascript)
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Code language: PHP (php)
Cho phép allow
kết nối từ máy chủ ra bên ngoài
sudo ufw default allow outgoing
Code language: JavaScript (javascript)
Default outgoing policy changed to 'allow'
(be sure to update your rules accordingly)
Code language: PHP (php)
Mở cổng kết nối SSH
Bạn cần mở cổng kết nối SSH trước khi kích hoạt UFW. Nếu không, bạn sẽ không thể truy cập vào máy chủ được nữa, do thiết lập mặc định đã chặn mọi kết nối từ bên ngoài vào.
Bạn có thể mở kết nối SSH bằng 3 cách:
Sử dụng tên ứng dụng OpenSSH
sudo ufw allow OpenSSH
Code language: Nginx (nginx)
Output
Rule added
Rule added (v6)
Code language: Nginx (nginx)
Sử dụng tên dịch vu ssh
sudo ufw allow ssh
Code language: Nginx (nginx)
Output
Rule added
Rule added (v6)
Code language: Nginx (nginx)
Sử dụng port 22
sudo ufw allow 22
Code language: Nginx (nginx)
Rule added
Rule added (v6)
Code language: Nginx (nginx)
Nếu bạn đã cấu hình truy cập SSH qua cổng khác, cần phải thay đổi port tương ứng khi cấu hình UFW. Ví dụ, nếu bạn cấu hình truy cập SSH Server qua cổng 2222
, hãy đổi thành lệnh sau để mở cổng kết nối
sudo ufw allow 2222
Code language: Nginx (nginx)
Rule added
Rule added (v6)
Code language: Nginx (nginx)
3. Kích hoạt UFW
Sau khi đã mở cổng kết nối SSH, bạn đã có thể kích hoạt tường lửa UFW.
Trước khi kích hoạt, kiểm tra lại các quy tắc đã được thiết lập trên UFW
sudo ufw show added
Code language: Nginx (nginx)
Added user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
Code language: Nginx (nginx)
Sau khi đã chắc chắn đã mở cổng kết nối SSH, kích hoạt UFW bằng lệnh
sudo ufw enable
Code language: Bash (bash)
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Code language: Nginx (nginx)
Hệ thống sẽ cảnh báo việc kích hoạt UFW có thể gây gián đoạn kết nối SSH. Do bạn đã cấu hình mở cổng SSH nên sẽ không gặp vấn đề nào cả. Chọn y
và bấm Enter
để xác nhận.
Tường lửa giờ đã được kích hoạt. Kiểm tra lại tình trạng hoạt động của UFW để xác nhận
sudo ufw status verbose
Code language: Nginx (nginx)
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
Code language: YAML (yaml)
4. Cấu hình UFW nâng cao
Ở bước này, chúng ta cần cấu hình mở kết nối cho các dịch vụ đang được cài đặt trên máy chủ.
Mở kết nối cho web server Apache / Nginx
- Dịch vụ web server HTTP sử dụng cổng 80, mở kết nối bằng lệnh
sudo ufw allow http
hoặcsudo ufw allow 80
- Dịch vụ web server HTTPS sử dụng cổng 443, mở kết nối bằng lệnh
sudo ufw allow https
hoặcsudo ufw allow 443
- Bạn cũng có thể mở kết nối HTTP và HTTPS chỉ theo tên của Web Server:
sudo ufw allow 'Apache Full'
(nếu máy chủ đang cài web server Apache) hoặcsudo ufw allow 'Nginx Full'
(nếu máy chủ đang cài web server Nginx)
Bạn có thể kiểm tra hồ sơ ứng dụng đã được cài đặt trên máy chủ bằng lệnh
sudo ufw app list
Code language: PHP (php)
Mở kết nối theo cổng mạng
Bạn có thể cấu hình mở cổng mạng cho UFW bằng lệnh sudo ufw allow <port>
.
Ví dụ mình muốn mở kết nối cho WireGuard VPN Server chạy trên cổng 51820, sử dụng lệnh sau
sudo ufw allow 51820
Code language: Nginx (nginx)
Mở thêm kết nối cổng 873 cho dịch vụ truyền tải file qua mạng rsync
sudo ufw allow 873
Code language: Nginx (nginx)
Bạn có thể mở cùng lúc 1 dãy port , nhưng phải kết hợp thêm giao thức (udp / tcp) vào lệnh. Ví dụ dưới đây là cách mở kết nối cho dịch vụ X11
sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp
Code language: YAML (yaml)
Cho phép kết nối theo địa chỉ IP
Bạn có thể cho phép kết nối vào máy chủ theo địa chỉ IP
sudo ufw allow from 123.123.123.123
Code language: CSS (css)
Bạn có thể quy định thêm cổng kết nối để giới hạn truy cập cho IP. Ví dụ mình muốn cho phép địa chỉ IP 123.123.123.123
kết nối vào cổng 22
(SSH), sử dụng lệnh sau
sudo ufw allow from 123.123.123.123 to any port 22
Code language: YAML (yaml)
Cho phép kết nối theo Subnet
Bạn có thể thay thế IP bằng Subnet để cho phép kết nối theo lớp mạng. Ví dụ: mình muốn cho phép dãy IP từ 10.0.1.1
đến 10.0.1.254
, sử dụng lệnh sau
sudo ufw allow from 10.0.1.0/24
Code language: YAML (yaml)
Chặn kết nối
Sử dụng tham số deny
để chặn kết nối vào máy chủ.
Chặn kết nối HTTP
sudo ufw deny http
Code language: Nginx (nginx)
Chặn địa chỉ IP 123.123.123.123
sudo ufw deny from 123.123.123.123
Code language: CSS (css)
Chặn cổng 25
từ máy chủ ra bên ngoài (mục đích nhằm chặn dịch vụ email SMTP)
sudo ufw deny out 25
Code language: Nginx (nginx)
Xoá kết nối theo số thứ tự
Để xoá quy tắc theo số thứ tự, bạn cần liệt kê các quy tắc theo thứ tự bằng lệnh
sudo ufw status numbered
Code language: Nginx (nginx)
Kết quả nhận được
Status: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] OpenSSH (v6) ALLOW IN Anywhere (v6)
[ 4] 80/tcp (v6) ALLOW IN Anywhere (v6)
Code language: YAML (yaml)
Nếu muốn xoá kết nối dịch vụ HTTP, số thứ tự 2, sử dụng lệnh
sudo ufw delete 2
Code language: JavaScript (javascript)
Deleting:
allow 80
Proceed with operation (y|n)? y
Rule deleted
Code language: YAML (yaml)
Xoá kết nối UFW theo tên hoặc cổng mạng
Bạn cũng có thể xoá UFW rule theo tên dịch vụ hoặc cổng mạng.
Ví dụ mình có thể xoá kết nối dịch vụ HTTP bằng 1 trong 2 cách sau
sudo ufw delete allow http
Code language: JavaScript (javascript)
hoặc
sudo ufw delete allow 80
Code language: JavaScript (javascript)
Khi sử dụng cách xoá kết nối theo tên hoặc cổng mạng, cả hai quy tắc của IPv4 và IPv6 đều sẽ bị xoá.
Kiểm tra tình trạng hoạt động của UFW
Bạn có thể kiểm tra tình trạng hoạt động của UFW bằng lệnh
sudo ufw status verbose
Code language: Nginx (nginx)
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
Code language: YAML (yaml)
5. Tắt hoặc thiết lập lại UFW
Nếu bạn không muốn sử dụng UFW nữa, có thể vô hiệu hoá nó bằng lệnh
sudo ufw diable
Code language: Nginx (nginx)
Firewall stopped and disabled on system startup
Code language: Nginx (nginx)
Các quy tắc đã thiết lập vẫn được giữ nguyên, không bị xoá khi bạn vô hiệu hoá UFW. Khi bạn kích hoạt UFW, các quy tắc này sẽ hiệu lực trở lại.
Nếu muốn xoá hết tắc cả các quy tắc đã thiết lập và cấu hình UFW lại từ đầu, bạn dùng tham số reset
sudo ufw reset
Code language: Nginx (nginx)
6. Lời kết
UFW giúp việc quản lý tường lửa trên Linux đơn giản và hiệu quả hơn rất nhiều so với việc cấu hình trực tiếp bằng iptables
. Trong trường hợp bạn muốn thiết lập các cấu hình tường lửa bảo mật hơn, hãy nghiên cứu thêm fail2ban
và csf
.
Nếu bạn đang sử dụng dịch vụ máy ảo miễn phí của Oracle Cloud Free Tier, UFW là công cụ không thể thiếu sau khi thiết lập máy ảo giúp bạn mở cổng dịch vụ dễ dàng hơn.
Tham khảo: https://www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-18-04
[convertkit form=7087807]
Status ufw của mình nè.
# sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
New profiles: skip
To Action From
— —— —-
22 ALLOW IN Anywhere
22/tcp ALLOW IN Anywhere
80 ALLOW IN Anywhere
443 ALLOW IN Anywhere
9000 ALLOW IN Anywhere
22 (v6) ALLOW IN Anywhere (v6)
22/tcp (v6) ALLOW IN Anywhere (v6)
80 (v6) ALLOW IN Anywhere (v6)
443 (v6) ALLOW IN Anywhere (v6)
9000 (v6) ALLOW IN Anywhere (v6)
Làm cách nào để dùng UFW chặn hết các IP nước ngoài truy vấn vào VPS được ạ.
Bạn có thể xem hướng dẫn ở đây: https://gist.github.com/jasonruyle/8870296