Cách thiết lập Firewall với UFW trêb Ubuntu 16.04

2 năm trước

Cách thiết lập Firewall với UFW trêb Ubuntu 16.04

 

UFW, hay Uncomplicated Firewall, là một interface của iptables được xây dựng để hướng tới việc đơn giản hóa quá trình cấu hình firewall. Trong khi iptables mang tính cứng nhắc và khó cấu hình, UFW là một lựa chọn phù hợp hơn với bạn nếu bạn đang tập làm quen với việc thiết lập firewall để bảo mật hệ thống.

Bài viết này sẽ hướng dẫn bạn cách thiết lập một firewall với UFW trên Ubuntu 16.04.

 

Yêu cầu

 

  • Một server chạy Ubuntu 16.04, bao gồm một sudo non-root user và một firewall.
  • Nếu chưa có máy chủ Ubuntu Server, bạn có thể tham khảo bảng giá Cloud Server tại ViCloud.​​

UFW được cài đặt mặc định trên Ubuntu. Nếu nó đã bị gỡ vì một số lý do thì bạn có thể cài đặt lại với sudo apt-get install ufw.

 

Bước 1 — Sử dụng IPv6 với UFW (tùy chọn)

 

Hướng dẫn này sử dụng nền tảng IPv4 , nhưng những cấu hình của bạn vẫn có hiệu lực trên IPv6 khi được kích hoạt. Nếu server của bạn đã có IPv6 , đảm bảo rằng UFW được cấu hình để đảm bảo khả năng tương thích. Mở file cấu hình UFW với nano :

sudo nano /etc/default/ufw

 

Đảm bảo giá trị của IPV6 là yes

/etc/default/ufw excerpt
...
IPV6=yes...

Lưu rồi đóng file. Giờ đây khi UFW được kích hoạt, nó sẽ ghi cấu hình firewall của cả IPv4 and IPv6. Tuy nhiên, trước khi kích hoạt UFW, hãy đảm bảo rằng firewall của bạn được cấu hình để cho phép bạn kết nối thông qua SSH.

Bắt đầu với các thiết lập mặc định của UFW.

 

Bước 2 — Thiết lập các cài đặt mặc định

 

Nếu bạn mới bắt đầu tiếp cận với firewall, những quy tắc đầu tiên cần biết là các luật mặc định của firewall. Mặc định thì UFW được thiết lập để từ chối tất cả các kết nối đến và cho phép tất cả các kết nối đi. Điều này có nghĩa là kết nối từ bên ngoài nào đến cloud server của bạn đều bị chặn lại, trong khi bất kỳ ứng dụng nào của server cũng có thể truyền dữ liệu ra bên ngoài.

Đặt lại cấu hình mặc định của UFW bằng lệnh:

sudo ufw default deny incoming
sudo ufw default allow outgoing

 

Các lệnh này chặn tất cả kết nối đến và cho phép tất cả kết nối đi. Thường thì cấu hình này chỉ dành cho máy tính cá nhân để đảm bảo an toàn, nhưng vì ta đang cấu hình cho một server nên sẽ cần nhận yêu cầu rồi phản hồi lại với nhũng yêu cầu hợp lệ. 

 

 

Bước 3 — Cho phép kết nối SSH

 

Sau bước trên, khi được kích hoạt, UFW sẽ từ chối tất cả truy cập từ bên ngoài. Điều này nghĩa là ta cần tạo những luật kết nối để cho phép các kết nối hợp lệ — như những kết nối SSH hoặc HTTP chẳng hạn.

Nếu bạn đang sử dụng Cloud Server  thì nên cho phép kết nối SSH đến để có thể kết nối và quản lý server của mình từ xa. Để cấu hình server cho phép kết nối SSH đến, bạn có thể sử dụng lệnh này:

sudo ufw allow ssh

 

Lệnh này sẽ tạo ra các quy tắc tường lửa cho phép tất cả các kết nối trên cổng 22, cổng mặc định của SSH daemon. UFW định danh được SSH cùng một số dịch vụ khác vì tên của chúng đưuọc lưu trong file /etc/services

Tuy nhiên, bạn có thể dùng một lệnh tương đương bằng cách xác định cổng thay vì tên dịch vụ. Ví dụ, lệnh trên có thể được thay thế như sau:

sudo ufw allow 22

 

Nếu muốn SSH daemon dùng một cổng khác, bạn cần chỉ rõ cổng đó.  Ví dụ nếu muốn dùng cổng 2222, gõ lệnh:

sudo ufw allow 2222

 

Bước 4 — Kích hoạt UFW

 

Để kích hoạt UFW, sử dụng lệnh này:

sudo ufw enable 

 

Bạn sẽ nhận được cảnh báo rằng lệnh này có thể làm gián đoạn các kết nối SSH hiện tại. Nhập vào y để tiếp tục.

Firewall đã được kích hoạt thành công. Kiểm tra lại quá trình cấu hình với lệnh sudo ufw status verbose .

 

Bước 5 — Cho phép một số kết nối  khác

 

Lúc này, bạn nên cho phép tất cả các kết nối khác mà server của bạn cần đáp ứng. Các kết nối đó phụ thuộc vào nhu cầu cụ thể của bạn. Vì bạn đã biết cách cho phép kết nối trên một cổng cụ thể, hãy cho phép các kết nối trên các thông điệp sau:

  • HTTP trên cổng 80, là cổng các web server bình thường sử dụng với lệnh sudo ufw allow http hoặc sudo ufw allow 80
  • HTTPS trên cổng 443, là cổng các web server được mã hóa sử dụng để tăng tính bảo mật. Dùng lệnh sudo ufw allow https hoặc sudo ufw allow 443
  • FTP trên cổng 21, là cổng được dùng cho dịch vụ FTP( File Transfer) với lệnh sudo ufw allow ftp hoặc sudo ufw allow 21/tcp

 Bên cạnh đó, có một số cách khác để cho phép các kết nối khác ngoài việc xác định một cổng hoặc dịch vụ đã biết.

Với một dải cổng cụ thể

 

Bạn có thể chỉ định các dải cổng để cho phép kết nối với UFW cho một số ứng dụng sử dụng nhiều cổng thay vì chỉ một cổng duy nhất. Ví dụ, để cho phép các kết nối X11 sử dụng cổng 6000-6007, dùng lệnh:

sudo ufw allow 6000:6007/tcp
sudo ufw allow 6000:6007/udp

 

Khi chỉ định phạm vi cổng với UFW, bạn phải chỉ định giao thức (tcp or udp) để quy định giao thức cho phép trên các cổng đó. Tuy nhiên bạn không thực sự cần phải chỉ định giao thức cụ thể, vì nếu không chỉ định thì cả 2 giao thức đều được cho phép, và điều này ổn cho hầu hết trường hợp.

Địa chỉ IP cụ thể

 

Khi làm việc với UFW, bạn cũng có thể chỉ định địa chỉ IP. Ví dụ, nếu bạn muốn cho phép kết nối từ một địa chỉ IP cụ thể, chẳng hạn như địa chỉ15.15.15.51, dùng lệnh:

sudo ufw allow from 15.15.15.51

 

Bạn cũng có thể chỉ định một cổng cụ thể mà địa chỉ IP được phép kết nối bằng cách thêm vào cụm từ to any port. Ví dụ nếu chỉ muốn cho phép kết nối từ địa chỉ 15.15.15.51 qua cổng 22 (SSH),dùng lệnh:

sudo ufw allow from 15.15.15.51 to any port 22

 

Subnet Mask

 

Nếu muốn cho phép một subnet mask của các địa chỉ IP, bạn có thể dùng kí hiệu CIDR  để chỉ cụ thể một netmask. Nếu muốn cho phép các địa chỉ IP từ 15.15.15.1 đến 15.15.15.254 , dùng lệnh:

sudo ufw allow from 15.15.15.0/24

 

Nếu chỉ muốn cho phép kết nối trên cổng 22 (SSH) như trên, ta dùng lệnh:

sudo ufw allow from 15.15.15.0/24 to any port 22

Kết nối với một giao diện mạng cụ thể

 

Nếu bạn muốn tạo một quy tắc cuaur firewall chỉ áp dụng cho một network interface cụ thể, bạn có thể chỉ định "allow in on" ngay sau tên của nó.

Hiển thị các network interface với lệnh:

ip addr 

 

Output Excerpt:...
2: eth0:  mtu 1500 qdisc pfifo_fast state
...
3: eth1:  mtu 1500 qdisc noop state DOWN group default 
...
 

Tên của các network interface là eth0 và eth1.

Nếu muốn có một public network interface eth0, cho phép kết nối HTTP (trên cổng 80) với lệnh:

sudo ufw allow in on eth0 to any port 80

 

Lệnh này cho phép máy chủ của bạn nhận yêu cầu HTTP trên Internet.

 Hoặc nếu bạn muốn MySQL database server (port 3306)  nhận các kết nối trên network interface eth1, dùng lệnh:

sudo ufw allow in on eth1 to any port 3306

 

Lệnh này cho phép các server khác trong mạng riêng của bạn kết nối với MySQL database.

 

Bước 6 — Từ chối Kết nối

 

Nếu bạn không thay đổi cài đặt mặc định cho các kết nối đến, UFW sẽ từ chối tất cả các kết nối đến. Vì thế, bạn nên tạo ra một cấu hình an toàn cho firewall bằng cách tạo ra các luật rõ ràng cho phép một số cổng và địa chỉ IP cụ thể được kết nối.

Tuy nhiên, đôi khi bạn sẽ muốn từ chối mọi kết nối đến để tránh server bị tấn công. Khi đó, bạn cần tạo quy tắc từ chối với bất kỳ dịch vụ hoặc địa chỉ IP nào mà bạn không muốn cho phép kết nối. Để viết quy tắc từ chối, bạn có thể sử dụng các lệnh trước đó, thay thế allow thành deny với các IP cụ thể bạn muốn cấm kết nối.

Để từu chối kết nối HTTP ,dùng lệnh:

sudo ufw deny http 

 

Hay nếu muốn chặn kết nối từ IP  15.15.15.51 :

sudo ufw deny from 15.15.15.51

 

 

Bước 7 — Xóa quy tắc

 

Có 2 cách để xóa một quy tắc: theo số và theo tên.

 

Xóa theo số hiệu của quy tắc

 

Hiển thị trạng thái của UFW với các quy tắc được đánh số:

sudo ufw status numbered 

 

Numbered Output:Status: active
To Action From
-- ------ ----
[ 1] 22 ALLOW IN 15.15.15.0/24
[ 2] 80 ALLOW IN Anywhere
 

Nếu muốn xóa quy tắc thứ 2( cho phép kết nối trên cổng 80, chính là các kết nối HTTP),dùng lệnh:

sudo ufw delete 2

 

Nếu bạn đang kích hoạt IPv6, các kết nối cũng sẽ bị chặn khi bị xóa ở đây.

Xóa bằng tên

 

Thay vì sử dụng số, ta sẽ xóa một quy tắc bằng chính tên của chúng. Ví dụ để chặn kết nối HTTP ( quy tắc cho phép kết nối tên là allow http ) ta sẽ dùng lệnh:

sudo ufw delete allow http

 

Hoặc dùng lệnh sau:

sudo ufw delete allow 80

 

 

 

Bước 8 — Kiểm tra lại trạng thái và các quy tắc của UFW

 

Dùng lệnh sau để kiểm tra trang thái của UFW:

sudo ufw status verbose 

 

Nếu UFW chưa được kích hoạt, kích hoạt nó với lệnh:

Output
Status: inactive
 
 

Ở đây, ta sẽ thấy UFW đang chỉ cho phép kết nối SSH trên cổng 22:

Output:
Status: active
Logging: on (low)
Default: deny (incoming),allow (outgoing),disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
 
 

Bước 9 — Vô hiệu hóa và Reset UFW (tùy chọn)

 

Nếu muốn tắt UFW, dùng lệnh:

sudo ufw disable 

 

Tất cả các quy tắc đã bị vô hiệu hóa. Nếu muốn bật trở lại, dùng lệnh sudo ufw enable 

Lệnh để reset UFW về giá trị mặc định là:

sudo ufw reset 

 

Sau khi reset, tất cả cấu hình của bạn sẽ bị xóa, và bạn sẽ phải thực hiện lại các bước từ đầu.

 

Tổng kết

 

Giờ thì firewall của bạn đã được cấu hình để cho phép (ít nhất là) kết nối SSH . Hãy viết các quy tắc của mình một cách hợp lí để đảm bảo các dịch vụ và bảo mật được hệ thống.