Sử Dụng Iptables Thiết Lập Tường Lửa trên Ubuntu 12.04 Chi Tiết

Sử Dụng Iptables Thiết Lập Tường Lửa trên Ubuntu 12.04 Chi Tiết

Ubuntu 12.04

Bài viết này đề cập đến một phiên bản của Ubuntu hiện không còn được hỗ trợ. Nếu bạn đang vận hành một máy chủ chạy Ubuntu 12.04, chúng tôi khuyến nghị nâng cấp hoặc di chuyển dữ liệu sang phiên bản Ubuntu được hỗ trợ:

Nâng cấp lên Ubuntu 14.04.
Nâng cấp từ Ubuntu 14.04 lên Ubuntu 16.04.
Di chuyển dữ liệu máy chủ sang phiên bản được hỗ trợ.

Lý do: Ubuntu 12.04 đã đạt đến thời điểm kết thúc hỗ trợ (EOL) vào ngày 28 tháng 4 năm 2017 và không còn nhận các bản vá bảo mật hay cập nhật. Hướng dẫn này không còn được duy trì.

Bảo mật máy chủ là ưu tiên hàng đầu? Tìm hiểu cách sử dụng Iptables để thiết lập tường lửa trên Ubuntu 12.04 qua hướng dẫn chi tiết. Nếu bạn cần môi trường Windows, hãy khám phá dịch vụ VPS Windows tại DataOnline để đảm bảo hiệu suất và bảo mật tối ưu.

Thay vào đó:
Hướng dẫn này có thể vẫn hữu ích như một tài liệu tham khảo, nhưng có thể không hoạt động trên các phiên bản Ubuntu khác. Nếu có, chúng tôi khuyến nghị sử dụng hướng dẫn dành riêng cho phiên bản Ubuntu bạn đang sử dụng. Bạn có thể sử dụng chức năng tìm kiếm ở đầu trang để tìm phiên bản mới hơn.

Về Iptables

Để tăng cường bảo mật cho máy chủ sau khi cài đặt ban đầu, Ubuntu được trang bị iptables – tường lửa mặc định của bản phân phối. Ban đầu, mặc dù tường lửa của Ubuntu đã được cấu hình, nó được cài đặt để cho phép tất cả lưu lượng truy cập đến và đi trên một máy chủ ảo (VPS). Để có sự bảo vệ mạnh mẽ hơn, chúng ta có thể thêm một số quy tắc cơ bản cho iptables.

Các quy tắc iptables được xây dựng từ một loạt các tùy chọn (tham số) có thể được kết hợp để tạo nên mỗi quy trình cụ thể. Mỗi gói tin đi qua tường lửa sẽ được kiểm tra theo thứ tự của các quy tắc. Ngay khi gói tin khớp với một quy tắc, nó sẽ thực hiện hành động tương ứng; nếu không, nó sẽ tiếp tục đi xuống theo thứ tự.

Lưu ý: Hướng dẫn này chỉ bao gồm bảo mật IPv4. Trên Linux, bảo mật IPv6 được duy trì riêng biệt với IPv4. Ví dụ, lệnh “iptables” chỉ duy trì các quy tắc tường lửa cho địa chỉ IPv4, trong khi có một công cụ tương đương cho IPv6 gọi là “ip6tables”, có thể được sử dụng để duy trì các quy tắc tường lửa cho địa chỉ mạng IPv6.

Nếu VPS của bạn được cấu hình cho IPv6, vui lòng nhớ bảo vệ cả giao diện mạng IPv4 và IPv6 của bạn bằng các công cụ thích hợp. Để biết thêm thông tin về các công cụ IPv6, hãy tham khảo hướng dẫn: Cách cấu hình công cụ để sử dụng IPv6 trên một Linux VPS 

Các lệnh iptables

Mặc dù hướng dẫn này chỉ đề cập đến một số lệnh cơ bản cung cấp bảo mật tối thiểu cho máy chủ, có rất nhiều trường hợp chi tiết và cụ thể khác có thể được phát triển với iptables. Dưới đây là một số lệnh hữu ích nhất khi xây dựng tường lửa cho VPS của bạn. Lưu ý rằng đây chỉ là danh sách ngắn; còn rất nhiều tùy chọn khác.

  • -A: (Append) – thêm một quy tắc vào iptables

  • -L: (List) – hiển thị các quy tắc hiện tại

  • -m conntrack: cho phép các quy tắc dựa trên trạng thái kết nối hiện tại, được giải thích chi tiết qua tham số –cstate.

  • –cstate: giải thích các trạng thái mà kết nối có thể có; có 4 trạng thái: New, Related, Established, và Invalid.

  • -p: (protocol) – ám chỉ giao thức của quy tắc hoặc của gói tin cần kiểm tra. Giao thức được chỉ định có thể là tcp, udp, udplite, icmp, esp, ah, sctp hoặc từ khóa đặc biệt “all”.

  • –dport: (port) – ám chỉ cổng mà qua đó máy kết nối.

  • -j: (jump) – chỉ định hành động cần thực hiện nếu gói tin khớp hoàn toàn với quy tắc. Nó có thể là một trong bốn hành động:

    • -ACCEPT: gói tin được chấp nhận và không xử lý thêm quy tắc nào khác.

    • -REJECT: gói tin bị từ chối, người gửi sẽ được thông báo, và không xử lý thêm quy tắc nào khác.

    • -DROP: gói tin bị từ chối nhưng không thông báo cho người gửi, và không xử lý thêm quy tắc nào khác.

    • -LOG: gói tin được chấp nhận nhưng được ghi nhận vào log, sau đó tiếp tục xử lý các quy tắc tiếp theo.

  • -I: (Insert) – thêm một quy tắc vào giữa các quy tắc đã có

    • Ví dụ: -I INPUT 3 – chèn một quy tắc vào vị trí thứ ba trong danh sách.

  • -v: (verbose) – hiển thị thêm thông tin chi tiết về một quy tắc.

Tạo các quy tắc iptables

Nếu bạn gõ lệnh sau, bạn có thể xem các quy tắc iptables hiện tại:

sudo iptables -L

Các quy tắc hiện tại sẽ hiển thị như sau:

Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
Nếu bạn đã có một bộ quy tắc khác được thiết lập hoặc muốn bắt đầu lại từ đầu, bạn luôn có thể đặt lại các quy tắc về mặc định bằng cách xóa sạch chúng:
sudo iptables -F

Ngoài ra, nếu bạn muốn tăng tốc công việc với iptables, bạn có thể thêm tùy chọn -n vào lệnh. Tùy chọn này vô hiệu hóa việc tra cứu DNS và ngăn lệnh cố gắng tìm kiếm bản đảo ngược của mỗi IP trong tập quy tắc. Ví dụ, để liệt kê các quy tắc:

iptables -L -n
A Basic Firewa

Một tường lửa cơ bản

Hiện tại, các quy tắc mặc định cho phép tất cả kết nối đến và đi, không có biện pháp bảo mật nào được áp dụng. Khi xây dựng bảng quy tắc, hãy nhớ rằng ngay khi một gói tin được ACCEPTED, REJECTED hoặc DROPPED, các quy tắc tiếp theo sẽ không được xử lý.

Do đó, các quy tắc được đặt ở đầu danh sách có ưu tiên hơn so với các quy tắc sau đó.

Trong quá trình tạo quy tắc, chúng ta cần đảm bảo không vô tình chặn SSH (phương thức kết nối đến máy chủ của chúng ta).

Đầu tiên, hãy đảm bảo rằng tất cả các kết nối hiện tại – tất cả các kết nối đang hoạt động tại thời điểm tạo quy tắc – được cho phép duy trì:

sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Giải thích:
  1. -A báo cho iptables thêm một quy tắc vào cuối bảng.

  2. INPUT chỉ định rằng quy tắc này thuộc chuỗi INPUT.

  3. -m conntrack kèm theo –ctstate ESTABLISHED,RELATED đảm bảo rằng quy tắc này chỉ áp dụng cho các kết nối hiện tại và các kết nối liên quan đến chúng.

  4. -j ACCEPT cho biết gói tin sẽ nhảy (jump) đến hành động ACCEPT, tức là được chấp nhận và kết nối sẽ tiếp tục.

Sau khi đảm bảo rằng tất cả các kết nối hiện tại đến VPS của bạn được duy trì không bị gián đoạn, chúng ta có thể tiến hành chặn các kết nối không an toàn khác.

Giả sử rằng chúng ta muốn chặn tất cả lưu lượng đến, ngoại trừ những lưu lượng đến từ 2 cổng phổ biến: cổng 22 cho SSH và cổng 80 cho lưu lượng web. Chúng ta tiến hành cho phép tất cả lưu lượng trên các cổng được chỉ định bằng các lệnh sau:

sudo iptables -A INPUT -p tcp --dport ssh -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT

Ở cả hai lệnh trên, tùy chọn -p biểu thị giao thức của kết nối, trong trường hợp này là tcp, trong khi –dport chỉ định cổng mà gói tin được truyền qua.

Sau khi đảm bảo rằng lưu lượng mong muốn có thể đi qua tường lửa, chúng ta hoàn tất bằng cách chặn tất cả lưu lượng còn lại truy cập vào VPS của mình. Vì đây là quy tắc cuối cùng trong danh sách, nên tất cả lưu lượng phù hợp với bất kỳ quy tắc nào trước đó sẽ không bị ảnh hưởng và sẽ được xử lý theo cấu hình trước đó.

Hãy tạo một quy tắc để chặn tất cả lưu lượng còn lại:

sudo iptables -P INPUT DROP

Sau đó, chúng ta có thể xem các quy tắc cập nhật như sau:

sudo iptables -L Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:http

Chúng ta gần như hoàn tất. Tuy nhiên, còn thiếu một quy tắc nữa: chúng ta cần cung cấp truy cập loopback cho VPS. Nếu thêm quy tắc này mà không có chỉ định cụ thể, nó sẽ được đặt ở cuối danh sách và do theo sau quy tắc chặn tất cả lưu lượng, nó sẽ không có tác dụng.

Để khắc phục vấn đề này, chúng ta cần đưa quy tắc này lên đầu danh sách bằng cách sử dụng tùy chọn -I INPUT 1:

sudo iptables -I INPUT 1 -i lo -j ACCEPT

Giải thích:

  1. -I INPUT 1 đặt quy tắc này ở vị trí đầu tiên trong chuỗi INPUT.

  2. -i lo chỉ định giao diện loopback.

  3. -j ACCEPT đảm bảo rằng lưu lượng từ loopback sẽ được chấp nhận.

Bây giờ, chúng ta đã hoàn tất việc tạo một tường lửa cơ bản. Để xem chi tiết các quy tắc iptables, bạn có thể sử dụng lệnh với tùy chọn -v:

sudo iptables -L -v

Ví dụ, kết quả có thể hiển thị như sau:

Chain INPUT (policy DROP 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- lo any anywhere anywhere 1289 93442 ACCEPT all -- any any anywhere anywhere ctstate RELATED,ESTABLISHED 2 212 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh 0 0 ACCEPT tcp -- any any anywhere anywhere tcp dpt:http Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 157 packets, 25300 bytes) pkts bytes target prot opt in out source destination

Tuy nhiên, ngay khi máy chủ ảo khởi động lại, các quy tắc iptables sẽ bị xóa. Bước tiếp theo sẽ hướng dẫn cách lưu và khôi phục các quy tắc iptables.

Lưu các quy tắc iptables

Mặc dù các quy tắc iptables có hiệu lực, chúng sẽ tự động bị xóa nếu máy chủ khởi động lại. Để đảm bảo các quy tắc vẫn được duy trì, chúng ta có thể sử dụng một gói phần mềm có tên iptables-persistent.

Chúng ta có thể cài đặt nó bằng lệnh apt-get:

sudo apt-get install iptables-persistent

Trong quá trình cài đặt, bạn sẽ được hỏi có muốn lưu các quy tắc iptables cho cả IPv4 và IPv6 không. Hãy chọn “Yes” cho cả hai.

Sau đó, các quy tắc của bạn sẽ được lưu tại:

  • /etc/iptables/rules.v4 cho IPv4

  • /etc/iptables/rules.v6 cho IPv6

Khi cài đặt hoàn tất, hãy khởi động dịch vụ iptables-persistent:

sudo service iptables-persistent start

Sau mỗi lần khởi động lại máy chủ, bạn sẽ thấy các quy tắc vẫn được áp dụng.

Sau khi cấu hình tường lửa với Iptables, bạn cần máy chủ mạnh mẽ? Hãy thuê máy chủ VPS từ DataOnline để có hiệu suất vượt trội. Với hỗ trợ 24/7 và cấu hình linh hoạt, bạn sẽ yên tâm triển khai ứng dụng và bảo vệ dữ liệu hiệu quả.

Để lại một bình luận

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *