Cách cài đặt và sử dụng Iptables | Học trực tuyến CNTT, học lập trình từ cơ bản đến nâng cao

Cách cài đặt và sử dụng Iptables

Chia sẻ kiến thức 03/03/2022

Iptables là một công cụ tường lửa (Firewall) cho Linux. Bài viết này của FUNiX sẽ hướng dẫn các bạn cách cài đặt và sử dụng Iptables trên hệ thống Ubuntu.

>> 4 lợi ích khi chuyển sang hệ điều hành Linux

>> Top 10 IDE lập trình C# cho Windows, Linux, Mac (2021)

>> Cách đặt địa chỉ IP từ chương trình C trong Linux?

Khi đã hiểu rõ về nó, người dùng có thể bảo mật VPS (Virtual Private Server – Máy chủ ảo) Linux của mình bằng cách sử dụng giao diện dòng lệnh (command-line interface).

1. Iptables là gì và nó hoạt động như thế nào?

Iptables là một chương trình tường lửa cho Linux. Nó sẽ giám sát lưu lượng truy cập đến server bằng cách sử dụng các bảng (table). Các bảng này tập hợp các quy tắc (rule), được gọi là các chuỗi (chain), sẽ lọc các gói dữ liệu đến và đi.

[optin-monster-shortcode id = ”fv4lqeko3gylvecpszws”]

Khi một packet phù hợp với một quy tắc, nó sẽ được cung cấp một đích để hướng đến, có thể là một chuỗi khác hoặc một trong các giá trị đặc biệt sau:

  • ACCEPT – sẽ cho phép packet truyền qua.
  • DROP – sẽ không để packet đi qua.
  • RETURN – sẽ dừng packet khi nó đi qua một chuỗi và yêu cầu nó quay trở lại chuỗi trước đó.

Trong bài hướng dẫn này, chúng ta sẽ làm việc với một trong các bảng mặc định, được gọi là bộ lọc (filter). Nó bao gồm ba chuỗi:

  • INPUT – Kiểm soát các packet đến server.
  • FORWARD – Các packet đến sẽ được lọc và chuyển tiếp đến một nơi khác.
  • OUTPUT – Lọc các packet sẽ đi ra khỏi server.

Trước khi cài đặt và sử dụng Iptables, chúng ta phải có quyền truy cập SSH (Secure Socket Shell) root hoặc sudo vào máy tính chạy Ubuntu 16.04 trở lên. Bạn có thể thiết lập kết nối thông qua PuTTY (Windows) hoặc terminal shell (Linux, macOS). 

Lưu ý: Quy tắc iptables chỉ áp dụng cho ipv4. Nếu muốn thiết lập tường lửa (firewall) cho giao thức ipv6, chúng ta cần sử dụng ip6tables để thay thế.

>>> Đọc bài viết: 5 Điểm đáng chú ý tại khóa học lập trình trực tuyến FPT – FUNiX

2. Cách cài đặt và sử dụng tường lửa Iptables Linux

2.1 Bước 1 – Cài đặt Iptables

Iptables được cài đặt sẵn trong hầu hết các bản phân phối của Linux. Tuy nhiên nếu nó không được mặc định trong hệ thống Ubuntu/Debian, hãy làm theo các bước sau:

  1. Kết nối với server thông qua SSH. 
  2. Thực hiện từng lệnh sau:

sudo apt-get update 

sudo apt-get install iptables

  1. Kiểm tra trạng thái cấu hình iptables hiện tại bằng cách chạy lệnh:

sudo iptables -L -v

Tùy chọn -L được sử dụng để liệt kê tất cả các quy tắc và -v là để hiển thị thông tin định dạng chi tiết. Ví dụ:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target     prot opt in out   source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target     prot opt in out   source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)

pkts bytes target     prot opt in out   source destination

Bây giờ chúng ta sẽ tiến hành cài đặt tường lửa Linux. Tại thời điểm này, chúng ta có thể thấy rằng tất cả các chuỗi đều được đặt thành ACCEPT và không có quy tắc nào. Điều này có nghĩa là bất kỳ packet nào cũng có thể đi qua mà không cần lọc, sẽ không an toàn.

Bước tiếp theo chúng ta sẽ tìm hiểu về cách xác định các quy tắc cho các chuỗi.

2.2 Bước 2: Xác định quy tắc chuỗi

Xác định quy tắc có nghĩa là gắn nó vào chuỗi. Để thực hiện việc này thì cần chèn tùy chọn -A (Append) ngay sau lệnh iptables như sau:

sudo iptables -A

Iptable sẽ nhận được cảnh báo rằng các quy tắc mới đang được thêm vào một chuỗi. Sau đó, chúng ta có thể kết hợp lệnh với các tùy chọn khác, ví dụ như:

  • -i (interface) – giao diện mạng có lưu lượng ta muốn lọc, như eth0, lo, ppp0, … 
  • -p (protocol) – giao thức mạng diễn ra quá trình lọc. Nó có thể là tcp, udp, udplite, icmp, sctp, icmpv6, …. Ngoài ra, bạn có thể nhập all để chọn mọi giao thức.
  • -s (source) – địa chỉ để lưu lượng truy cập đến. Chúng ta có thể thêm hostname hoặc địa chỉ IP.
  • –dport (destination port) – số lượng cổng đích của một giao thức, ví dụ như 22 (SSH), 443 (https), ….
  • -j (target) – tên của mục tiêu (ACCEPT, DROP, RETURN). Mỗi khi thực hiện một quy tắc mới đều cần phải chèn tên mục tiêu.

Nếu muốn sử dụng tất cả các tùy chọn trên, chúng ta phải viết lệnh theo thứ tự sau:

sudo iptables -A <chain> -i <interface> -p <protocol (tcp/udp) > -s <source> –dport <port no.>  -j <target>

Khi hiểu được cú pháp cơ bản, chúng ta có thể bắt đầu định cấu hình tường lửa để tăng cường bảo mật cho server của mình. Dưới đây chúng ta sẽ sử dụng chuỗi INPUT để làm ví dụ.

2.2.1 Kích hoạt lưu lượng truy cập trên Localhost

Để cho phép lưu lượng truy cập trên localhost, hãy nhập lệnh sau:

sudo iptables -A INPUT -i lo -j ACCEPT

Trường hợp này sẽ sử dụng giao diện lo hoặc loopback. Chúng được sử dụng cho tất cả các giao tiếp trên localhost. Lệnh trên sẽ đảm bảo cho các kết nối trên cùng một máy giữa cơ sở dữ liệu và ứng dụng web sẽ hoạt động bình thường.

>>> Xem thêm: Từ A-Z chương trình học FUNiX – Mô hình đào tạo lập trình trực tuyến số 1 Việt Nam

2.2.2 Bật kết nối trên cổng HTTP, SSH và SSL

Thực hiện kết nối các http (cổng 80), https (cổng 443) và ssh (cổng 22) lại với nhau sao cho chúng có thể hoạt động như bình thường. Để làm điều này, chúng ta cần chỉ định giao thức (-p) và cổng tương ứng (–dport). Thực hiện từng lệnh sau:

sudo iptables -A INPUT -p tcp –dport 22 -j ACCEPT

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

sudo iptables -A INPUT -p tcp –dport 443 -j ACCEPT

Kiểm tra xem các quy tắc đã được thêm vào iptables chưa:

sudo iptables -L -v

Nó sẽ trả về với kết quả như bên dưới, có nghĩa là tất cả các kết nối giao thức TCP (Transmission Control Protocol – Giao thức điều khiển truyền vận) từ các cổng được chỉ định sẽ được chấp nhận:

2.2.3 Lọc các packet dựa trên source

Iptables cho phép chúng ta lọc các packet dựa trên địa chỉ IP hoặc một dải địa chỉ IP. Nó được chỉ định đứng sau tùy chọn -s. Ví dụ, để chấp nhận các packet từ 192.168.1.3, sử dụng lệnh:

sudo iptables -A INPUT -s 192.168.1.3 -j ACCEPT

Chúng ta cũng có thể từ chối các packet từ một địa chỉ IP cụ thể bằng cách thay thế ACCEPT bằng DROP.

sudo iptables -A INPUT -s 192.168.1.3 -j DROP

Nếu muốn loại bỏ các packet từ một loạt các địa chỉ IP, chúng ta phải sử dụng tùy chọn -m và mô-đun iprange. Sau đó, chỉ định dải địa chỉ IP với –src-range. Mỗi dấu gạch nối sẽ phân tách phạm vi địa chỉ ip mà không cần dấu cách:

sudo iptables -A INPUT -m iprange –src-range 192.168.1.100-192.168.1.200 -j DROP

2.2.4 Bỏ qua tất cả các lưu lượng truy cập khác

Việc sử dụng DROP cho tất cả các lưu lượng truy cập khác sau khi xác định các quy tắc –dport là rất quan trọng. Vì điều này sẽ ngăn chặn các kết nối trái phép truy cập vào server thông qua các cổng khác đang mở. Sử dụng lệnh sau:

sudo iptables -A INPUT -j DROP

Lúc này những kết nối trái phép bên ngoài các cổng đã được chỉ định sẽ bị ngắt.

2.2.5 Xóa các quy tắc

Nếu muốn xóa tất cả các quy tắc, chúng ta có thể sử dụng tùy chọn -F (flush):

sudo iptables -F

Lệnh này sẽ xóa tất cả các quy tắc hiện tại. Tuy nhiên, nếu muốn xóa một quy tắc cụ thể, chúng ta phải sử dụng tùy chọn -D. Trước tiên cần xem lại tất cả các quy tắc có sẵn bằng cách nhập lệnh sau:

sudo iptables -L –line-numbers

Chúng ta sẽ nhận được một danh sách những quy tắc dưới đây:

Chain INPUT (policy ACCEPT)

num  target     prot opt source            destination

 

1    ACCEPT     all — 192.168.0.4       anywhere

2    ACCEPT     tcp — anywhere          anywhere tcp dpt:https

3    ACCEPT     tcp — anywhere          anywhere tcp dpt:http

4    ACCEPT     tcp — anywhere          anywhere tcp dpt:ssh

Để xóa các quy tắc, hãy chèn chuỗi và số tương ứng từ danh sách. Giả sử chúng ta muốn loại bỏ quy tắc số ba của chuỗi INPUT. Thì lệnh sẽ là:

sudo iptables -D INPUT 3

2.3 Bước 3 – Các thay đổi liên tục

Các quy tắc iptables đã tạo sẽ được lưu trong bộ nhớ. Điều đó có nghĩa là chúng ta phải xác định lại chúng khi khởi động lại. Để thực hiện những thay đổi này liên tục sau khi khởi động lại server, bạn có thể sử dụng lệnh sau:

sudo /sbin/iptables-save

Nó sẽ lưu các quy tắc hiện tại trên file cấu hình hệ thống, file này sẽ được sử dụng để cấu hình lại các bảng mỗi khi khởi động lại server.

Lưu ý rằng chúng ta phải luôn chạy lệnh này mỗi khi thực hiện thay đổi đối với các quy tắc. Ví dụ: nếu muốn tắt iptables, bạn cần thực hiện hai dòng sau:

sudo iptables -F

sudo /sbin/iptables-save

Kết quả nhìn thấy sẽ là:

3. Kết luận

Iptables là một chương trình tường lửa mạnh mà chúng ta có thể sử dụng để bảo mật máy chủ Linux hoặc VPS. Điều tuyệt vời là chúng ta có thể xác định các quy tắc khác nhau dựa trên sở thích của mình.

FUNiX vừa giới thiệu đến các bạn những bước chi tiết về Cách cài đặt và sử dụng Iptables. Hy vọng có thể giúp bạn quản lý bộ quy tắc để lọc các packet đến và đi trên server của mình.

Nguồn tham khảo: https://www.hostinger.com/tutorials/iptables-tutorial

>>> Nếu bạn đang có nhu cầu học lập trình trực tuyến, tìm hiểu ngay tại đây:

>>> Xem thêm các chủ đề hữu ích:

 

Phạm Thị Thanh Ngọc ( theo Hostinger )

ĐĂNG KÝ TƯ VẤN HỌC LẬP TRÌNH TẠI FUNiX

Bình luận (
0
)

Bài liên quan

  • Tầng 0, tòa nhà FPT, 17 Duy Tân, Q. Cầu Giấy, Hà Nội
  • info@funix.edu.vn
  • 0782313602 (Zalo, Viber)        
Chat Button
Chat với FUNiX GPT ×

yêu cầu gọi lại

error: Content is protected !!