Tìm hiểu về tường lửa Linux và iptables

Giới thiệu về iptables

Tường lửa trên Linux, hay còn gọi là hệ thống lọc gói tin, được xây dựng từ hai thành phần chính: netfilteriptables.

  • Netfilter (kernel space) là một phần của nhân Linux, chứa các bảng lọc gói tin với các luật điều khiển quá trình xử lý.
  • Iptables (user space) là công cụ dòng lệnh cho phép quản trị viên thêm, sửa, xóa các luật trong các bảng này.

Cấu trúc của iptables

Iptables hoạt động theo mô hình phân cấp: iptables → Tables → Chains → Rules.

Các bảng (tables) mặc định gồm: Filter, NAT, Mangle, và Raw. Mỗi bảng chứa các chuỗi (chains), và mỗi chuỗi bao gồm các luật (rules).

Bảng Filter chi tiết

Bảng Filter chịu trách nhiệm lọc gói tin và có ba chuỗi nội tại:

  • INPUT – Xử lý gói tin đến từ bên ngoài.
  • OUTPUT – Xử lý gói tin gửi ra ngoài.
  • FORWARD – Xử lý gói tin được chuyển tiếp qua máy chủ.

Luồng dữ liệu điển hình

  • Khi truy cập vào máy chủ: Luật được áp dụng trên chuỗi INPUT.
  • Khi máy chủ kết nối ra ngoài: Luật áp dụng trên chuỗi OUTPUT.
  • Khi máy chủ làm cầu nối cho các máy khác: Luật áp dụng trên chuỗi FORWARD.

Các thao tác cơ bản với iptables

Sau đây là một số lệnh quản lý dịch vụ iptables:

# Khởi động dịch vụ
service iptables start

# Dừng dịch vụ
service iptables stop

# Khởi động lại
service iptables restart

# Xem trạng thái
service iptables status

# Lưu cấu hình hiện tại
service iptables save

Tệp cấu hình chính: /etc/sysconfig/iptables-config
Tệp lưu luật: /etc/sysconfig/iptables
Bật tính năng chuyển tiếp gói tin:

echo "1" > /proc/sys/net/ipv4/ip_forward

Cú pháp lệnh iptables

Cấu trúc tổng quát:

iptables [-t <tên_bảng>] <tùy_chọn_lệnh> [<tên_chuỗi>] [<điều_kiện>] [-j <hành_động>]

1. Chọn bảng

Mặc định là bảng Filter nếu không chỉ định -t.

2. Các tùy chọn lệnh phổ biến

Tùy chọnMô tả
-AThêm luật vào cuối chuỗi
-DXóa luật khỏi chuỗi
-IChèn luật vào đầu chuỗi (hoặc vị trí chỉ định)
-RThay thế luật tại vị trí chỉ định
-LLiệt kê các luật
-FXóa tất cả luật trong chuỗi (hoặc toàn bảng)
-NTạo chuỗi mới do người dùng định nghĩa
-XXóa chuỗi do người dùng định nghĩa
-PĐặt chính sách mặc định cho chuỗi
-nHiển thị địa chỉ IP dạng số
-vHiển thị chi tiết
--line-numberHiển thị số thứ tự luật

3. Điều kiện khớp gói tin

Điều kiện được chia làm hai loại: cơ bản và mở rộng.

  • Cơ bản:
    • -p : Giao thức (tcp, udp, icmp, all...)
    • -s : Địa chỉ nguồn
    • -d : Địa chỉ đích
    • -i : Giao diện đầu vào
    • -o : Giao diện đầu ra
  • Mở rộng: Bao gồm các module như state, limit, connlimit, recent...

4. Hành động (target)

  • ACCEPT – Cho phép gói tin đi qua.
  • DROP – Hủy gói tin, không phản hồi.
  • REJECT – Từ chối gói tin, gửi thông báo lỗi về nguồn.
  • LOG – Ghi log vào /var/log/messages rồi chuyển sang luật tiếp theo.
  • RETURN – Dừng xử lý chuỗi hiện tại, quay về chuỗi gọi.

Các ví dụ lệnh thực tế

Xóa toàn bộ luật hiện tại

iptables -F

Xem danh sách luật

iptables -L -v -n

Thêm luật cho phép HTTP

iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Chèn luật vào vị trí thứ 2 trong chuỗi INPUT

iptables -I INPUT 2 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Xóa luật số 2 trong chuỗi INPUT

iptables -D INPUT 2

Thay thế luật số 3

iptables -R INPUT 3 -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

Đặt chính sách mặc định

iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

Cho phép SSH từ xa

iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Cho phép máy chủ tự kết nối SSH ra ngoài

iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

Giới hạn tốc độ ping

iptables -A INPUT -i eth0 -d 192.168.146.3 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT

Giới hạn kết nối SSH mới

iptables -I INPUT 1 -p tcp --dport 22 -d 192.168.146.3 -m state --state ESTABLISHED -j ACCEPT
iptables -I INPUT 2 -p tcp --dport 22 -d 192.168.146.3 -m limit --limit 2/minute --limit-burst 2 -m state --state NEW -j ACCEPT

Chống tấn công cơ bản với iptables

1. Chống SYN flood

Cách 1: Giới hạn tốc độ gói SYN

iptables -N syn-flood
iptables -A INPUT -p tcp --syn -j syn-flood
iptables -A syn-flood -m limit --limit 1/s --limit-burst 4 -j RETURN
iptables -A syn-flood -j DROP

Cách 2: Giới hạn số kết nối SYN từ một IP

iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP

2. Chống tấn công DOS (dùng module recent)

Giới hạn tối đa 3 kết nối SSH đồng thời:

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP

Giới hạn số lần thử SSH trong 5 phút:

iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

3. Chống một IP truy cập HTTP quá nhiều

iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 30 -j DROP

4. Chặn kết nối ra từ phần mềm độc hại

iptables -A OUTPUT -m state --state NEW -j DROP

5. Chống Ping flood

iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/m -j ACCEPT

Thẻ: iptables netfilter filter table INPUT chain OUTPUT chain

Đăng vào ngày 19 tháng 5 lúc 00:09