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