Thứ tư, 05/08/2015 | 00:00 GMT+7

Cách thiết lập firewall với UFW trên Ubuntu 14.04

UFW, hay Tường lửa không phức tạp, 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ụ vững chắc và linh hoạt, nhưng người mới bắt đầu có thể khó học cách sử dụng nó để cấu hình firewall đúng cách. Nếu bạn đang tìm cách 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 cho bạn.

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

Yêu cầu

Trước khi bắt đầu sử dụng hướng dẫn này, bạn nên có một account superuser riêng biệt, không phải root — user có quyền sudo — được cài đặt trên server Ubuntu của bạn. Bạn có thể xem cách thực hiện việc này bằng cách hoàn thành ít nhất các bước 1-3 trong hướng dẫn Cài đặt server ban đầu với Ubuntu 14.04 .

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

  • sudo apt-get install ufw

Sử dụng IPv6 với UFW

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 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 editor yêu thích của bạn. Ta sẽ sử dụng nano:

  • sudo nano /etc/default/ufw

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

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

Lưu và thoát. Nhấn Ctrl-X để thoát khỏi file , sau đó nhấn Y để lưu các thay đổi bạn đã thực hiện, sau đó ENTER để xác nhận tên file .

Khi UFW được bật, nó sẽ được cấu hình để viết cả luật firewall IPv4 và IPv6.

Hướng dẫn này được viết với IPv4, nhưng sẽ hoạt động tốt cho IPv6 miễn là bạn kích hoạt nó.

Kiểm tra Trạng thái và Luật UFW

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

  • sudo ufw status verbose

Theo mặc định, UFW bị tắt, vì vậy bạn sẽ thấy thông tin như sau:

Output:
Status: inactive

Nếu UFW đang hoạt động, kết quả sẽ cho biết 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ể trông 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

Do đó, hãy sử dụng trạng thái lệnh nếu bạn cần kiểm tra xem UFW đã cấu hình firewall như thế nào.

Trước khi bật UFW, ta sẽ muốn đảm bảo firewall của bạn được cấu hình để cho phép bạn kết nối qua SSH. Hãy bắt đầu với việc cài đặt các policy mặc định.

Cài đặt policy mặc định

Nếu bạn chỉ mới bắt đầu với firewall của bạn , các luật đầu tiên cần xác định là các policy mặc định của bạn. Các luật này kiểm soát cách xử lý lưu lượng truy cập không khớp rõ ràng với bất kỳ luật nào khác. Theo mặc định, UFW được đặt để 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 nghĩa là bất kỳ ai cố gắng truy cập server cloud của bạn sẽ không thể kết nối, trong khi bất kỳ ứng dụng nào trong server sẽ có thể tiếp cận thế giới bên ngoài.

Hãy đặt các luật UFW của bạn trở lại mặc định để ta có thể chắc chắn rằng bạn có thể làm theo hướng dẫn này. Để đặt các giá trị mặc định được sử dụng bởi UFW, hãy sử dụng các lệnh sau:

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

Như bạn có thể đoán, các lệnh này đặt các giá trị mặc định để từ chối kết nối đến và cho phép các kết nối gửi đi. Bản thân những 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 đó tiếp theo.

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 luật cho phép rõ ràng các kết nối đến hợp lệ — ví dụ: kết nối SSH hoặc HTTP — nếu ta muốn server của bạn phản hồi các loại yêu cầu đó. Nếu bạn đang sử dụng server cloud , có thể bạn cần cho phép các kết nối SSH đến để bạn có thể kết nối và quản lý server của bạn .

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

  • sudo ufw allow ssh

Điều này sẽ tạo ra các luật firewall cho phép tất cả các kết nối trên cổng 22, đó là cổng mà daemon SSH lắng nghe. UFW biết “ssh” và một loạt các tên dịch vụ khác nghĩa là gì vì nó được liệt kê là một dịch vụ sử dụng cổng 22 trong file /etc/services .

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 bạn đã 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 các 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ậ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 .

Tường lửa hiện đang hoạt động. Vui lòng chạy sudo ufw status verbose để xem các luật được đặt.

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ủa bạn 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. May mắn là bạn đã biết cách viết các 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.

Ta sẽ đưa ra một vài ví dụ về các dịch vụ rất phổ biến mà bạn có thể cần cho phép. Nếu bạn có dịch vụ nào khác mà bạn muốn cho phép tất cả các kết nối đến, hãy làm theo định dạng này.

HTTP — cổng 80

Kết nối HTTP, là những gì web server không được mã hóa sử dụng, có thể được cho phép bằng lệnh này:

  • sudo ufw allow http

Nếu bạn muốn sử dụng số cổng, 80, hãy sử dụng lệnh này:

  • sudo ufw allow 80

HTTPS — cổng 443

Có thể cho phép các kết nối HTTPS, là những gì web server được mã hóa sử dụng, bằng lệnh này:

  • sudo ufw allow https

Nếu bạn muốn sử dụng số cổng, 443, hãy sử dụng lệnh này:

  • sudo ufw allow 443

FTP — cổng 21

Có thể cho phép kết nối FTP, được sử dụng để truyền file không được mã hóa (mà bạn có thể không nên sử dụng) bằng lệnh này:

  • sudo ufw allow ftp

Nếu bạn muốn sử dụng số cổng, 21, hãy sử dụng lệnh này:

  • sudo ufw allow 21/tcp

Cho phép phạm vi cổng 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 luật sẽ áp dụng. Ta chưa đề cập đến điều này trước đây bởi vì việc không chỉ định giao thức chỉ đơn giản là 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.

Cho phé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à 15.15.15.51 , bạn cần chỉ định “from” rồi đến địa chỉ IP:

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

sudo ufw allow from 15.15.15.51 to any port 22 

Cho phép 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ừ 15.15.15.1 đến 15.15.15.254 bạn có thể sử dụng lệnh này:

  • sudo ufw allow from 15.15.15.0/24

Tương tự như vậy, bạn cũng có thể chỉ định cổng đích mà mạng con 15.15.15.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 15.15.15.0/24 to any port 22 

Cho phép kết nối với một network interface cụ thể

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

Bạn có thể cần tra cứu các network interface của bạn trước khi tiếp tục. Để làm như vậy, 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 ...

Đầu ra được tô sáng cho biết tên network interface . Chúng thường được đặt tên như “eth0” hoặc “eth1”.

Vì vậy, nếu server của bạn có network interface 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 như vậy sẽ cho phép server của bạn nhận được các yêu cầu HTTP từ Internet công cộng.

Hoặc, nếu bạn muốn server database MySQL của bạn (cổng 3306) lắng nghe các kết nối trên network interface 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 của bạn.

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 để từ chối tất cả các kết nối đến. Nói chung, điều này đơn giản hóa quá trình tạo policy firewall an toàn bằng cách yêu cầu bạn tạo các luật cho phép rõ ràng các cổng và địa chỉ IP cụ thể thông qua. Tuy nhiên, đôi khi bạn cầ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ó lẽ vì bạn biết rằng server của bạn đang bị tấn công từ đó. Ngoài ra, nếu bạn muốn thay đổi policy đến mặc định của bạn để cho phép (điều này không được khuyến khích vì lợi ích bảo mật), bạn cần tạo luật từ chối cho 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 luật từ chối , bạn có thể sử dụng các lệnh mà ta đã mô tả ở trên ngoại trừ bạn cần thay thế “allow” bằng “từ chối”.

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 tất cả các kết nối từ 15.15.15.51 bạn có thể sử dụng lệnh này:

sudo ufw deny from 15.15.15.51 

Nếu bạn cần trợ giúp viết bất kỳ luật từ chối nào khác, chỉ cần xem các luật cho phép trước đó và cập nhật chúng cho phù hợp.

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

Xóa luật

Biết cách xóa các 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, so với việc viết các luật thực tế để xóa, nếu bạn mới sử dụng UFW.

Theo số luật

Nếu bạn đang sử dụng số luật để xóa các luật firewall , điều đầu tiên bạn muốn làm là lấy danh sách các 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 “cho phép 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ì bằng 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.

Cách tắt UFW (tùy chọn)

Nếu bạn không còn cần sử dụng UFW vì bất kỳ lý do gì, bạn có thể tắt nó bằng lệnh sau:

  • sudo ufw disable

Mọi luật bạn đã tạo bằng 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.

Đặt lại luật UFW (tùy chọn)

Nếu bạn đã cấu hình các luật UFW nhưng bạn cần bắt đầu lại, bạn có thể sử dụng lệnh đặt lại:

  • sudo ufw reset

Điều này sẽ tắt UFW và xóa mọi luật đã được định nghĩa đó. Lưu ý các policy mặc định sẽ không thay đổi đối với cài đặt ban đầu của chúng, nếu bạn đã sửa đổi chúng bất kỳ lúc nào. Điều này sẽ giúp bạn có một khởi đầu mới với UFW.

Kết luận

Tường lửa của bạn bây giờ phải được cấu hình để cho phép (ít nhất) kết nối SSH. Đảm bảo cho phép bất kỳ kết nối đến nào khác mà server của bạn, đồng thời hạn chế mọi kết nối không cần thiết để server của bạn 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 này: UFW Essentials: Common Firewall Rules and Commands

Chúc may mắn!


Tags:

Các tin liên quan

Cách đánh giá độ trễ HTTP theo chuẩn với wrk trên Ubuntu 14.04
2015-07-21
Cách cài đặt và sử dụng Command Line Cheat Sheets trên Ubuntu 14.04
2015-07-21
Cách cài đặt và sử dụng CFEngine Community Edition trên Ubuntu 14.04
2015-07-17
Cách cài đặt và cấu hình Riak2 với Python3 trên Ubuntu 14.04
2015-07-14
Cách cài đặt Solr 5.2.1 trên Ubuntu 14.04
2015-07-14
Cách thiết lập R trên Ubuntu 14.04
2015-07-13
Cách triển khai ứng dụng Rails với Git Hooks trên Ubuntu 14.04
2015-07-09
Cách sử dụng Prometheus để giám sát server Ubuntu 14.04 của bạn
2015-06-30
Cách cài đặt control panel Ajenti và Ajenti V trên Ubuntu 14.04
2015-06-26
Cách tự động hóa cài đặt WordPress trên Ubuntu 14.04 bằng Ansible
2015-06-25