Thứ năm, 05/07/2018 | 00:00 GMT+7

Cài đặt Firewall với UFW trên Ubuntu 18.04

UFW, hay Firewall đơn giản, là một giao diện của iptables nhằm mục đích đơn giản hóa quá trình cấu hình firewall. Mặc dù iptables là một công cụ ổn định linh hoạt, nhưng người mới bắt đầu có thể khó sử dụng để cấu hình firewall đúng cách. Nếu bạn đang muốn bắt đầu bảo mật mạng của bạn và không chắc chắn nên sử dụng công cụ nào, UFW có thể là lựa chọn phù hợp.

Firewall này là ứng dụng nằm ở tầng 3 TCP/IP, nó sẽ cho kiểm soát các gói tin đi vào ra, do đó nó sẽ có thể chặn/mở theo 2 tham số là địa chỉ IP và Port.

Hướng dẫn này sẽ chỉ cho bạn cách cài đặt firewall với UFW trên Ubuntu 18.04.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần:

UFW được cài đặt theo mặc định trên Ubuntu. Nếu nó đã bị gỡ vì lý do nào đó, bạn có thể cài đặt nó bằng sudo apt install ufw .

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

Hướng dẫn này được viết với IPv4, nhưng sẽ hoạt động cho IPv6 miễn là bạn kích hoạt nó. Nếu server Ubuntu của bạn đã bật IPv6, hãy đảm bảo UFW được cấu hình để hỗ trợ IPv6 để nó sẽ quản lý các rule (luật) firewall cho IPv6 ngoài IPv4. Để thực hiện việc này, hãy mở cấu hình UFW bằng nano hoặc editor bạn quen dùng.

  • sudo nano /etc/default/ufw

Sau đó, đảm bảo giá trị của IPV6yes . Nó sẽ giống như thế này:

/ etc / default / ufw đoạn trích
IPV6=yes

Lưu và đóng tập tin. Bây giờ, khi UFW được bật, nó sẽ được cấu hình cho cả IPv4 và IPv6. Tuy nhiên, trước khi bật UFW, cần đảm bảo kết nối qua SSH. Hãy bắt đầu với việc cài đặt mặc định.

Bước 2 - Cài đặt policy (chính-sách) mặc định

Nếu bạn mới bắt đầu với firewall, các rule (luật) đầu tiên cần xác định là các policy (chính-sách) mặc định. Các rule (luật) này kiểm soát cách xử lý lưu lượng truy cập không trùng với bất kỳ luật nào. Theo mặc định, UFW được cài đặt để từ chối tất cả kết nối và cho phép tất cả các kết nối đi. Điều này nghĩa là bất kỳ ai cố gắng truy cập server sẽ không thể kết nối, trong khi bất kỳ ứng dụng nào trong server đều đi ra ngoài được.

Hãy đặt các rule (luật) UFW của bạn mặc định để tiếp tục hướng dẫn này. Để đặt các giá trị mặc định với UFW, ta sử dụng các lệnh sau:

  • sudo ufw default deny incoming
  • sudo ufw default allow outgoing

Các lệnh này đặt các giá trị mặc định để từ chối kết nối đến (input) và cho phép các kết nối đi (output). Chỉ riêng các mặc định firewall này có thể đủ cho một máy tính cá nhân, nhưng các server thường cần phản hồi các yêu cầu đến từ user bên ngoài. Ta sẽ xem xét điều đó sau đây.

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

Nếu ta bật firewall UFW ngay bây giờ, nó sẽ từ chối tất cả các kết nối đến. Điều này nghĩa là ta cần tạo các rule (luật) cho phép các kết nối đến hợp pháp - ví dụ: kết nối SSH hoặc HTTP - nếu ta muốn server phản hồi các loại truy cập. Ví dụ bạn đang sử dụng cloud server (vps...) , có thể bạn cần cho phép các kết nối SSH đến để có thể quản lý server.

Để cấu hình server để cho phép các kết nối SSH đến, bạn có thể sử dụng lệnh sau:

  • sudo ufw allow ssh

Khi đó firewall cho phép kết nối trên cổng 22 , là cổng mà trình nền SSH lắng nghe theo mặc định. UFW biết cổng allow ssh nghĩa là gì vì nó được liệt kê dịch vụ trong file /etc/services .

Tuy nhiên, ta có thể viết luật tương đương bằng cách chỉ định cổng thay vì tên dịch vụ. Ví dụ, lệnh này hoạt động giống như lệnh ở trên:

  • sudo ufw allow 22

Nếu đã cấu hình daemon SSH của bạn để sử dụng một cổng khác, bạn sẽ phải chỉ định cổng thích hợp. Ví dụ: nếu server SSH của bạn đang nghe trên cổng 2222 , bạn có thể sử dụng lệnh này để cho phép kết nối trên cổng đó:

  • sudo ufw allow 2222

Bây giờ firewall của bạn đã được cấu hình để cho phép các kết nối SSH đến, ta có thể kích hoạt nó.

Bước 4 - Bật UFW

Để bật UFW, hãy sử dụng lệnh sau:

  • sudo ufw enable

Bạn sẽ nhận được một cảnh báo cho biết lệnh có thể làm gián đoạn các kết nối SSH hiện có. Ta đã cài đặt luật firewall cho phép kết nối SSH, vì vậy bạn có thể tiếp tục. Trả lời dấu nhắc bằng y và nhấn ENTER .

Firewall hiện đang hoạt động. Chạy sudo ufw status verbose để xem các rule (luật) được đặt. Phần còn lại của hướng dẫn này trình bày cách sử dụng UFW chi tiết hơn, như cho phép hoặc từ chối các loại kết nối khác nhau.

Bước 5 - Cho phép các kết nối khác

Đến đây, bạn nên cho phép tất cả các kết nối khác mà server cần phản hồi. Các kết nối mà bạn nên cho phép tùy thuộc vào nhu cầu cụ thể của bạn. Như trên bạn đã biết viết các rule (luật) cho phép kết nối dựa trên tên dịch vụ hoặc cổng; ta đã làm điều này cho SSH trên cổng 22 . Bạn cũng có thể làm điều này cho:

  • HTTP trên cổng 80, là những gì web server không được mã hóa sử dụng, sử dụng sudo ufw allow http hoặc sudo ufw allow 80
  • HTTPS trên cổng 443, là những gì web server được mã hóa sử dụng, sử dụng sudo ufw allow https hoặc sudo ufw allow 443

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

Dãy cổng (port) cụ thể

Bạn có thể chỉ định phạm vi cổng với UFW. Một số ứng dụng sử dụng nhiều cổng, thay vì một cổng duy nhất.

Ví dụ: để cho phép kết nối X11, sử dụng cổng 6000 - 6007 , hãy sử dụng các lệnh sau:

  • 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 hoặc udp ) mà các rule (luật) sẽ áp dụng. Ta chưa đề cập đến vấn đề này trước đây vì không chỉ định giao thức sẽ tự động cho phép cả hai giao thức, điều này là OK trong hầu hết các 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 các kết nối từ một địa chỉ IP cụ thể, chẳng hạn như địa chỉ IP cơ quan hoặc nhà riêng là 203.0.113.4 , bạn cần chỉ định from , sau đó là địa chỉ IP:

  • sudo ufw allow from 203.0.113.4

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 to any port theo sau là số cổng. Ví dụ: Nếu bạn muốn cho phép 203.0.113.4 kết nối với cổng 22 (SSH), hãy sử dụng lệnh này:

  • sudo ufw allow from 203.0.113.4 to any port 22

Mạng con

Nếu bạn muốn cho phép một mạng con địa chỉ IP, bạn có thể thực hiện bằng cách sử dụng ký hiệu CIDR để chỉ định một mặt nạ mạng. Ví dụ: nếu bạn muốn cho phép tất cả các địa chỉ IP từ 203.0.113.1 đến 203.0.113.254 bạn có thể sử dụng lệnh này:

  • sudo ufw allow from 203.0.113.0/24

Tương tự như vậy, bạn cũng có thể chỉ định cổng đích mà mạng con 203.0.113.0/24 được phép kết nối. Ta sẽ sử dụng cổng 22 (SSH) làm ví dụ:

  • sudo ufw allow from 203.0.113.0/24 to any port 22

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

Nếu muốn tạo luật firewall chỉ áp dụng cho một interface (giao-diện) mạng cụ thể, bạn có thể thực hiện việc này bằng cách chỉ định “cho phép bật” theo sau là tên của interface (giao-diện) mạng.

Bạn có thể cần liệt kê các interface (giao-diện) mạng trước khi tiếp tục. Để thực hiện, hãy sử dụng lệnh này:

  • ip addr
Output Excerpt
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
. . .
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default
. . .

Kết quả cho biết tên interface (giao-diện) mạng. Chúng thường được đặt tên như eth0 hoặc enp3s2 .

Vì vậy, nếu server có interface (giao-diện) mạng công cộng được gọi là eth0 , bạn có thể cho phép truy cập HTTP (cổng 80 ) đến nó bằng lệnh này:

  • sudo ufw allow in on eth0 to any port 80

Làm trên sẽ cho phép server nhận được các yêu cầu HTTP từ internet (public).

Hoặc, nếu muốn server database MySQL của bạn (cổng 3306 ) lắng nghe các kết nối trên interface mạng riêng eth1 , bạn có thể sử dụng lệnh này:

  • sudo ufw allow in on eth1 to any port 3306

Điều này sẽ cho phép các server khác trên mạng riêng của bạn kết nối với database MySQL.

Bước 6 - Từ chối kết nối

Nếu bạn chưa thay đổi policy mặc định cho các kết nối đến, UFW được cấu hình mặc định để từ chối tất cả các kết nối đến.

Tuy nhiên, đôi khi bạn sẽ muốn từ chối các kết nối cụ thể dựa trên địa chỉ IP nguồn hoặc mạng con, có thể bạn thấy server đang bị tấn công từ đó.

Để viết luật từ chối (deny), bạn có thể sử dụng các lệnh được mô tả ở trên, thay thế cho phép (allow) bằng từ chối (deny) .

Ví dụ: để từ chối các kết nối HTTP, bạn có thể sử dụng lệnh này:

  • sudo ufw deny http

Hoặc nếu bạn muốn từ chối  kết nối từ 203.0.113.4 bạn có thể sử dụng lệnh này:

  • sudo ufw deny from 203.0.113.4

Bây giờ ta hãy xem cách xóa các rule.

Bước 7 - Xóa luật

Biết cách xóa các rule (luật) firewall cũng quan trọng như biết cách tạo chúng. Có hai cách khác nhau để chỉ định luật nào cần xóa: theo số luật hoặc theo luật thực tế (tương tự như cách luật được chỉ định khi chúng được tạo). Ta sẽ bắt đầu với phương pháp xóa theo số luật vì nó dễ dàng hơn.

Theo số luật (rule number)

Nếu bạn đang sử dụng số luật để xóa các rule (luật) firewall, điều đầu tiên bạn muốn làm là lấy danh sách các rule (luật) firewall của bạn. Trạng thái lệnh UFW có một tùy chọn để hiển thị các số bên cạnh mỗi luật, như được minh họa ở đây:

  • 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 ta quyết định rằng ta muốn xóa luật 2, luật cho phép kết nối cổng 80 (HTTP), ta có thể chỉ định nó trong lệnh xóa UFW như sau:

  • sudo ufw delete 2

Điều này sẽ hiển thị dấu nhắc xác nhận sau đó xóa luật 2, cho phép kết nối HTTP. Lưu ý nếu bạn đã bật IPv6, bạn cũng muốn xóa luật IPv6 tương ứng.

Theo luật thực tế

Thay thế cho số luật là chỉ định luật thực tế để xóa. Ví dụ: nếu bạn muốn xóa luật allow http , bạn có thể viết nó như sau:

  • sudo ufw delete allow http

Bạn cũng có thể chỉ định luật bằng allow 80 , thay vì theo tên dịch vụ:

  • sudo ufw delete allow 80

Phương pháp này sẽ xóa cả luật IPv4 và IPv6, nếu chúng tồn tại.

Bước 8 - Kiểm tra trạng thái và luật UFW

Bạn có thể kiểm tra trạng thái của UFW bằng lệnh này:

  • sudo ufw status verbose

Nếu UFW bị tắt, theo mặc định, bạn sẽ thấy thông báo như sau:

Output
Status: inactive

Nếu UFW đang hoạt động, đúng như vậy nếu bạn đã làm theo Bước 3, kết quả sẽ thông báo rằng nó đang hoạt động và nó sẽ liệt kê bất kỳ luật nào được đặt. Ví dụ: nếu firewall được đặt để cho phép các kết nối SSH (cổng 22 ) từ bất kỳ đâu, kết quả có thể giống như sau:

Output
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere

Sử dụng lệnh status nếu bạn muốn kiểm tra xem UFW đã cấu hình firewall như thế nào.

Bước 9 - Tắt hoặc Đặt lại UFW (tùy chọn)

Nếu bạn không còn cần sử dụng UFW, bạn có thể tắt nó bằng lệnh sau:

  • sudo ufw disable

Mọi luật mà bạn đã tạo với UFW sẽ không còn hoạt động. Bạn luôn có thể chạy sudo ufw enable nếu bạn cần kích hoạt nó sau này.

Nếu bạn đã cấu hình các rule (luật) UFW nhưng bạn cần đặt về ban đầu, để bỏ qua các luật đã tạo, bạn có thể sử dụng lệnh:

  • sudo ufw reset

Điều này sẽ vô hiệu hóa UFW và xóa bất kỳ luật nào đã được định nghĩa đó.

Kết luận

Firewall của bạn hiện đã được cấu hình để cho phép (tối thiểu) kết nối SSH, hạn chế mọi kết nối không cần thiết, để server sẽ hoạt động tốt và an toàn.

Để tìm hiểu về các cấu hình UFW phổ biến hơn, hãy xem hướng dẫn về UFW Essentials: Common Firewall Rules and Commands .


Tags:

Các tin trước

Cài đặt và Sử dụng Docker với Ubuntu 18.04 2018-07-05
Tạo chứng chỉ Tự ký cho Apache trên Ubuntu 18-04 2018-07-05
Cài đặt MongoDB trên Ubuntu 18.04 2018-06-07
Cài đặt OpenVPN Server trên Ubuntu 18.04 2018-05-24
Cài đặt LEMP - Linux Nginx MySQL PHP trên Ubuntu 18 04 2018-05-23
Cài đặt và sử dụng PostgreSQL trên Ubuntu 18.04 2018-05-04
Cài đặt Apache Web Server trên Ubuntu 18.04 2018-04-27
Bảo mật cơ bản Ubuntu 18.04 2018-04-27
Cài đặt xác thực đăng nhập SSH Keys, không cần password trên Ubuntu 18.04 2018-04-27
Cài đặt Linux Apache MySQL PHP (LAMP) trên Ubuntu 18 04 2018-04-27