1. Trang chủ >
  2. Công nghệ thông tin >
  3. Quản trị mạng >

Chương III. Tổng quan về Iptables

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.46 MB, 100 trang )


1. Tổng quan về Iptables

1.1 Giới thiệu chung về Iptables

Iptables là một tường lửa ứng dụng lọc gói dữ liệu rất mạnh, miễn phí và có sẵn

trên Linux. Netfilter/Iptables gồm 2 phần là Netfilter ở trong nhân Linux và

Iptables nằm ngoài nhân. Iptables chịu trách nhiệm giao tiếp giữa người dùng và

Netfilter để đẩy các luật của người dùng vào cho Netfiler xử lí. Netfilter tiến hành

lọc các gói dữ liệu ở mức IP. Netfilter làm việc trực tiếp trong nhân, nhanh và

không làm giảm tốc độ của hệ thống.



Hình 11: Mô hình Iptables/netfilter



1.2 Cấu trúc của Iptables

Tất cả mọi gói dữ liệu đều được kiểm tra bởi Iptables bằng cách dùng các bản

tuần tự xây dựng sẵn (queues). Có 3 loại bảng này gồm:

- Mangle : chịu trách nhiệm thay đổi các bits chất lượng dịch vụ trong TCP

header như TOS (type of service ), TTL (time to live) và MARK.

- Filter: chịu trách nhiệm lọc gói dữ liệu. Nó gồm 3 quy tắc nhỏ (chain) để thiết

lập các nguyên tắc lọc gói, gồm :

+ Forward chain: lọc gói khi đến server khác.

+ Input chain: lọc gói khi đi vào trong server.

37



+ Output chain: lọc gói khi ra khỏi server.

-



NAT : Gồm có hai loại:

+ Pre-routing : thay đổi địa chỉ của gói dữ liệu đến khi cần thiết.

+ Post-routing : thay đổi địa chỉ của gói dữ liệu khi cần thiết.



Loại



Chức năng



Quy tắc xử lý



Chức năng của chain



queues

Filter



queues

Lọc gói



gói (chain)

FORWARD



Lọc gói dữ liệu đi đến các server

khác kết nối trên các NIC của



NAT



Network



INPUT

OUTPUT

PREROUTING



firewall.

Lọc gói đi đến firewall.

Lọc gói đi ra khỏi firewall.

Việc thay đổi địa chỉ diễn ra



Address



trước khi dẫn đường. Thay đổi



Translation



địa chỉ đích sẽ giúp gói dữ liệu



(Biên dịch địa



phù hợp với bảng chỉ đường của



chỉ mạng)



firewall. Sử dụng destination

POSTROUTING



NAT hay DNAT

Việc thay đổi địa chỉ diễn ra sau

khi dẫn đường. Sử dụng Source



OUTPUT



NAT hay SNAT

NAT sử dụng cho các gói dữ liệu

xuất phát từ firewall. Hiếm khi

dùng trong môi trường SOHO



Chỉnh sửa



PREROUTING



TCP header



POSTROUTING



lượng dịch vụ trước khi dẫn



OUTPUT



đường. Hiếm khi dùng trong môi



INPUT



Mangle



(small office-home office)

Điều chỉnh các bit quy định chất



trường SOHO.



FORWARD

Bảng 01: Các loại queues và chức năng của nó

Ta hãy xem qua ví dụ mô tả đường đi của một gói dữ liệu :



38



Hình 12: Mô tả đường đi của gói dữ liệu.

Đầu tiên, gói dữ liệu đến mạng A, tiếp đó nó được kiểm tra bởi mangle table

PREROUTING chain (nều cần). Tiếp theo là kiểm tra gói dữ liệu bởi nat table's

PREROUTING chain để kiểm tra xem gói dữ liệu có cần DNAT hay không?

DNAT sẽ thay đổi địa chỉ đích của gói dữ liệu. Rồi gói dữ liệu được dẫn đi. Nếu

gói dữ liệu đi vào một mạng được bảo vệ, thì nó sẽ được lọc bởi FORWARD

chain của filter table, và nếu cần gói dữ liệu sẽ được SNAT trong

POSTROUTING chain để thay đổi IP nguồn trước khi vào mạng B.

Nếu gói dữ liệu được định hướng đi vào trong bên trong firewall , nó sẽ được

kiểm tra bởi INPUT chain trong mangle table, và nếu gói dữ liệu qua được các

kiểm tra của INPUT chain trong filter table, nó sẽ vào trong các chương trình của

39



server bên trong firewall .

Khi firewall cần gởi dữ liệu ra ngoài. Gói dữ liệu sẽ được dẫn và đi qua sự

kiểm tra của OUTPUT chain trong mangle table (nếu cần), tiếp đó là kiểm tra

trong OUTPUT chain của nat table để xem DNAT (DNAT sẽ thay đổi địa chỉ

đến) có cần hay không và OUTPUT chain của filter table sẽ kiểm tra gói dữ liệu

nhằm phát hiện các gói dữ liệu không được phép gởi đi. Cuối cùng trước khi gói

dữ liệu được đưa ra ngoài, SNAT and QoS sẽ được kiểm tra trong

POSTROUTING chain.



1.3 Targets

Targets là hành động sẽ diễn ra khi một gói dữ liệu được kiểm tra và phù hợp với

một yêu cầu nào đó. Khi một target đã được nhận dạng, gói dữ liệu sẽ được nhảy

(jump) để thực hiện các xử lý tiếp theo. Bảng sau liệt kê các targets mà Iptables

sử dụng.



Targets



Ý nghĩa



ACCEPT



Tùy chọn



Iptables ngừng xử lý gói

dữ liệu đó và chuyển tiếp

nó vào một ứng dụng cuối

hoặc hệ điều hành để xử



DROP



lý.

Iptables ngừng xử lý gói

dữ liệu đó và gói dữ liệu bị

chặn , loại bỏ.

Thông tin của gói sẽ được



--log-prefix “string”



đưa vào syslog để kiểm



Iptables sẽ thêm vào log



tra.Iptables tiếp tục xử lý



message một chuỗi do



gói với quy luật tiếp theo



người dùng định



kế tiếp.



LOG



sẵn.Thông thường là để

thông báo lý do vì sao gói



REJECT



Tương tự như DROP,



bị bỏ.

--reject-with qualifier



40



nhưng nó sẽ gửi trả lại cho



Tham số qualifier sẽ cho



phía người gởi một thông



biết loại thông báo gởi trả



báo lỗi rằng gói đã bị chặn



lại phía gởi.Qualifier gồm



và loại bỏ.



các loại sau:

icmp-port-unreachable

(mặc định)

icmp-net-unreachable

icmp-host-unreachable

icmp-proto-unreachable

icmp-net-prohibited

icmp-host-prohibited

tcp-reset

echo-reply



DNAT



Dùng để thực hiện

Destination network



ipaddress và địa chỉ đích



đích của gói dữ liệu sẽ



của gói dữ liệu.



được viết lại.

Dùng để thực hiện Source



--to-source

[-



network address



][:-



translation, viết lại địa chỉ



]



của nguồn gói dữ liệu.



Miêu tả ip và port sẽ được



Dùng để thực hiện Source



viết lại bởi Iptables.

[--to-ports [-



network address



]]



translation. Mặc định thì



Ghi rõ các port nguồn mà



địa chỉ IP nguồn sẽ giống



port nguồn gốc có thể ánh



như IP nguồn của firewall



MASQUERADE



Iptables sẽ viết lại địa chỉ



address translation, địa chỉ



SNAT



--to-destination ipaddress



xạ được.



Bảng 02: Miêu tả các target mà Iptables thường dùng nhất



41



1.4 Các tùy chọn quan trọng của Iptables

Các tham số sau sẽ cho phép Iptables thực hiện các hành động sao cho phù hợp

với biểu đồ xử lý gói do người dùng hoạch định sẵn.



Các tùy chọn quan trọng



Ý nghĩa



- t



Nếu không chỉ định rõ table nào, thì table

filter sẽ được áp dụng.Có 3 loại table là



-j



filter, nat, mangle.

Nhảy đến một chuối target nào đó khi gói



-A

-F

-p



dữ liệu phù hợp với quy luật hiện tại.

Nối thêm một quy luật vào cuối chain

Xóa hết mọi quy luật trong bảng đã chọn.

Phù hợp với giao thức , thông thường là



-s

-d

-i



icmp, tcp, udp và all.

Phù hợp với IP nguồn.

Phù hợp với IP đích.

Phù hợp với điều kiện INPUT khi gói dữ



-o



liệu đi vào firewall.

Phù hợp với điều kiện OUTPUT khi gói

dữ liệu đi ra khỏi firewall.



Bảng 03: Bảng các tùy chọn quan trọng của Iptables

Để hiểu rõ hơn về các lệnh ta cùng xem ví dụ sau:

iptables -A INPUT -s 0/0 -i eth0 -d 192.168.1.1 -p TCP –j

ACCEPT

Iptables được cấu hình cho phép firewall chấp nhận các gói dữ liệu có giao

thức là TCP, đến từ card mạng eth0, có địa chỉ IP nguồn là bất kì đến địa chỉ

192.168.1.1, là địa chỉ IP của firewall.



Tùy chọn



Miêu tả



-p tcp --sport



Điều kiện TCP port nguồn (source port). Có thể



42



là một giá trị hoặc một chuỗi có dạng start-p tcp --dport



port-number:end-port-number

Điều kiện TCP port đích. Có thể là một giá trị

hoặc một chuỗi có dạng start-port-



-p tcp --syn



number:end-port-number

Dùng để nhận một yêu cầu kết nối TCP mới.

Có thể dùng dấu “!” để phủ định. Ví dụ:



-p udp --sport



!--syn là không có yêu cầu kết nối mới.

Điều kiện UDP port nguồn (source port). Có thể

là một giá trị hoặc một chuỗi có dạng start-



-p udp --dport



port-number:end-port-number.

Điều kiện UDP port đích. Có thể là một giá trị

hoặc một chuỗi có dạng start-port-



--icmp-type



number:end-port-number.

Thường dùng nhất là echo-reply và echo-



-m multiport --sport


request.

Liệt kê nhiều port nguồn khác nhau, phân cách



port>

-m multiport --dport


bởi dấu phẩy.

Liệt kê nhiều port đích khác nhau, phân cách



port>

-m multiport --port --port



bởi dấu phẩy.

Liệt kê nhiều port khác nhau, phân cách bởi dấu







phẩy. Không phân biệt port nguồn hay port



-m --state



đích.

Các trạng thái thông dụng nhất được dùng là :

ESTABLISHED : Gói dữ liệu là một phần của

kết nối đã được thiết lập bởi cả hai hướng.

NEW : Gói dữ liệu là bắt đầu của một kết nối

mới.

RELATED : Gói dữ liệu bắt đầu một kết nối

phụ.Thường là của giao thức FTP hoặc lỗi

ICMP.

INVALID : Gói dữ liệu không thể nhận dạng

được. Điều này có thể do thiếu tài nguyên hệ

thống hoặc lỗi ICMP không trùng với một



43



luồng dữ liệu đã có sẵn.



Bảng 04: Các điều kiện TCP và UDP thông dụng

Ví dụ:

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

Iptables được cấu hình cho phép firewall chấp nhận các gói ICMP echorequest và gửi các gói ICMP echo-reply.

iptables -A FORWARD -s 0/0 -i eth0 -d 192.168.1.58 -o eth1 -p tcp \

--sport 1024:65535 -m multiport --dport 80,443 -j ACCEPT

iptables -A FORWARD -d 0/0 -o eth0 -s 192.168.1.58 -i eth1 -p tcp \

-m state --state ESTABLISHED -j ACCEPT

Iptables được cấu hình cho phép firewall chấp nhận các gói dữ liệu có giao

thức là TCP, đến từ card mạng eth0, có địa chỉ IP nguồn là bất kì, đi đến địa chỉ

192.168.1.58 qua card mạng eth1. Số port nguồn là từ 1024 đến 65535 và port đích

là 80 (http) và 443 (https). Đến khi các gói dữ liệu nhận trở lại từ 192.168.1.58,

thay vì mở các port nguồn và đích, ta chỉ việc cho phép dùng kết nối cũ đã thiết lập

bằng cách dùng tham số -m state và --state ESTABLISHED.



2. Tổng quan về Snort inline

2.1 Giới thiệu chung về Snort và Snort inline

Snort là một kiểu IDS (Instruction Detection System). Nói ngắn gọn IDS là một

hệ thống được cài đặt trên mạng (hay máy tính) và nhiệm vụ của nó là giám sát

những gói tin vào ra hệ thống. Nếu một cuộc tấn công được phát hiện bởi Snort

thì nó có thể phản ứng bằng nhiều cách khác nhau phụ thuộc vào cấu hình đã thiết

lập, chẳng hạn như nó có thể gởi thông điệp cảnh báo đến nhà quản trị hay loại bỏ

gói tin khi phát hiện có sự bất thường trong các gói tin đó.

Từ phiên bản 2.3.0RC1 Snort đã tích hợp hệ thống ngăn chặn xâm nhập

(Snort inline- một dự án chính thức của Snort). Snort inline nhận các gói tin từ



44



Iptables (không như Snort lấy các gói tin từ libpcap) sau đó dựa vào các rule để

giúp Iptables bỏ qua hay loại bỏ các gói tin theo các quy tắc của Snort.



2.2 Tổng quan về Snort

2.2.1 Cấu trúc Snort



Hình 13: Sơ đồ luồng dữ liệu đi qua Snort

Snort được chia thành nhiều thành phần. Những thành phần này làm việc với

nhau để phát hiện các cách tấn công cụ thể và tạo ra output theo một định

dạng được đòi hỏi. Một IDS dựa trên Snort bao gồm các thành phần chính

sau đây:

- Packet Capture

- Packet Decoder

- Preprocessor

- Dectection Engine

- Output Plug-ins

Trong đó:

-



Packet Capture: Bộ phận lắng nghe trên các interface được chỉ



định và thu thập các gói tin rồi trao cho bộ phận Packet Decoder xử lý.

-



Packet Decoder (Bộ phận giải mã gói) :



Bộ phận giải mã gói lấy các gói từ bộ phận Packet Capture và chuẩn bị cho

việc gói tin được xử lí trước hoặc được gửi cho bộ phận phát hiện.

45



-



Preprocessor (Bộ phận xử lí trước) :



Bộ phận xử lí trước là những thành phần được sử dụng với Snort để sắp xếp

hoặc chỉnh sửa gói dữ liệu trước khi bộ phận phát hiện làm một vài xử lý để

tìm ra gói tin có được sử dụng bởi kẻ xâm nhập hay không. Một vài bộ phận

xử lý trước cũng thực thi việc phát hiện bằng cách tìm các dấu hiệu bất

thường trong header của gói tin và tạo ra các cảnh báo. Bộ phận xử lí trước

là rất quan trọng trong bất kì IDS nào, chúng chuẩn bị cho các gói dữ liệu

được phân tích dựa trên các luật trong bộ phận phát hiện. Kẻ tấn công sử

dụng nhiều kĩ thuật khác nhau để lừa IDS theo nhiều cách. Bộ phận xử lí

trước cũng được sử dụng để tái hợp các gói tin. Trên IDS, trước khi áp dụng

bất kì luật nào, bạn phải tái hợp các gói tin lại để tìm ra các dấu hiệu. Bộ

phận xử lí trước trong Snort có thể tái hợp các gói tin, giải mã HTTP URI,

ráp lại các dòng TCP, v.v... Những chức năng này rất quan trọng trong hệ

thống phát hiện xâm nhập.

-



Dectection Engine (Bộ phận phát hiện):



Đây là phần quan trọng nhất của Snort. Trách nhiệm của nó là phát hiện có

sự xâm nhập tồn tại trong gói tin hay không. Bộ phận phát hiện sử dụng các

luật của Snort cho mục đích này. Nếu một gói tin giống với bất kì luật nào,

một hành động tương ứng sẽ được thực hiện. Đây là bộ phận then chốt về

thời gian thực thi của Snort. Dựa vào bộ máy của bạn mạnh như thế nào và

bao nhiêu luật bạn định nghĩa mà nó có thể tốn những khoảng thời gian khác

nhau đối với các gói tin khác nhau. Nếu lưu lượng trên mạng là quá lớn khi

Snort đang hoạt động trong chế độ NIDS, bạn có thể mất một vài gói tin và

có thể thời gian đáp ứng không chính xác. Lưu lượng trên bộ phận phát hiện

phụ thuộc vào các yếu tố sau:

+ Số lượng các luật.

+ Sức mạnh của bộ máy mà Snort đang chạy.

+ Lưu lượng trên mạng.

Bộ phận phát hiện hoạt động theo những cách khác nhau ở các phiên

bản khác nhau của Snort. Trong tất cả phiên bản 1.x của Snort, bộ phận phát

46



hiện dừng việc xử lí gói tin khi phù hợp với một luật. Dựa vào luật, bộ phận

phát hiện sẽ có các hành động tương ứng. Điều này có nghĩa là nếu một gói

tin phù hợp với nhiều luật, chỉ có luật đầu tiên được áp dụng mà không xem

xét đến các luật còn lại. Điều này làm nảy sinh một vấn đề. Một luật có độ

ưu tiên thấp sẽ tạo ra một cảnh báo có độ ưu tiên thấp, nếu một luật có độ ưu

tiên cao bị xếp sau trong chuỗi luật. Vấn đề này được giải quyết trong Snort

phiên bản 2, khi mà tất cả các luật được so sánh trên một gói tin trước khi

tạo ra một cảnh báo. Sau khi so sánh tất cả các luật, luật có độ ưu tiên cao

nhất sẽ được chọn để tạo cảnh báo. Vì bộ phận phát hiện trong phiên bản 2

đã được viết lại hoàn toàn nên nó nhanh hơn rất nhiều so với các phiên bản

trước đây.

-



Output Plug-ins:



Module đầu ra hoặc plug-in có thể hoạt động theo nhiều cách phụ thuộc vào

việc bạn muốn lưu các output được tạo ra bằng hệ thống ghi và tạo cảnh báo

như thế nào.



2.2.2 Các tùy chọn trong câu lệnh Snort

Các option này cũng được mô tả rất kĩ trong file config của Snort ,nếu chỉ

muốn thử và tìm hiểu thì ta nên dùng các command line còn nếu muốn lưu

giữ luôn trong file lúc setting nên vào config file.

• -A altert-mode: Nhiều mode được hỗ trợ ở đây như : fast , full,

none, unsock .

• -b: Log packet dạng tcpdump. File với format dạng tcpdump sẽ nhỏ

hơn và là phương pháp tốt nhất khi cần lưu trữ với số luợng lớn log

data và packet. Dĩ nhiên nhỏ sẽ nhanh hơn và là sự lựa chọn trên các

mạng tốc độ cao .

• -c config-file: Chỉ định config file nào muốn sử dụng, cần thiết khi

Snort chạy ở mode NIDS .

• -d: Hiển thị dữ liệu ở tầng application khi dùng chế độ hiển thị đầy

đủ hoặc trong packet logging mode .

47



Xem Thêm