2
4.5 Giải pháp bảo mật hệ thống sử dụng kết hợp Fail2ban và IPTables
4.5.1 IPTABLES
Trong hệ thống Unix/Linux có rất nhiều FIREWALL. Trong đó có một
Firewall được cấu hình và hoạt động trên nền Console rất nhỏ và tiện dụng đó là
Iptablẹ Thông qua nó bạn có thể dễ dàng hiểu được nguyên lý hoạt động của một
hệ thống firewall nói chung.
4.5.1.1 Giới thiệu về iptables
Hình 4. 11: Vị trí Netfilter/Iptables trong Kernel Linux 2.4.
Iptables là một tường lửa ứng dụng lọc gói dữ liệu rất mạnh, có sẵn bên trong kernel Linux 2.4.x và 2.6.x. Netfilter/Iptable gồm 2 phần là Netfilter ở trong nhân Linux và Iptables nằm ngoài nhân. Iptables được dùng để quản lý các quy tắc lọc gói tin bên dưới cơ sở hạ tầng của Netfilter. Hệ thống con Netfilter của Linux 2.4x cho phép cài đặt, duy trì, và kiểm tra các quy tắc lọc gói tin trong Kernel. 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.
Nó là một giải pháp lọc gói tin mới, cao cấp hơn so với những gì có sẵn đối với Linux Kernel trước 2.4x. Netfilter cung cấp 1 số ưu điểm và hiện nay nó đã trở thành một giải pháp mạnh mẽ và hoàn thiện hơn để giúp bạn bảo vệ các mạng cộng
tác.
Tuy nhiên, Netfilter cũng không phải là một giải pháp hoàn toàn mới. Nó là một khung làm việc để xử lý các gói tin khi chúng đi qua các thành phần của Kernel.
Netfilter bao gồm:
* Xây dựng bức tường lửa dựa trên cơ chế lọc gói stateless và stateful
* Dùng bảng NAT và masquerading chia sẻ sự truy cập mạng nếu không có đủ địa chỉ mạng.
* Dùng bảng NAT để cài đặt transparent proxy
* Có khả năng theo dõi sự kết nối, có khả năng kiểm tra nhiều trạng thái của packet. Nó làm việc này cho UDP và ICMP tốt nhất là kết nối TCP, thí dụ tình trạng
đầy đủ của lọc ICMP chỉ cho phép hồi âm khi có yêu cầu phát đi, chứ không chặn các yêu cầu nhưng vẫn chấp nhận hồi âm với giả sử rằng chúng luôn đáp lại lệnh ping. Sự hồi âm không do yêu cầu có thể là tín hiệu của sự tấn công hoặc cửa saụ
* Xử sự đơn giản của các packet thoả thuận trong các chains (một danh sách các nguyên tắc) INPUT, OUTPUT, FORWARD. Trên các host có nhiều giao diện mạng, các packet di chuyển giữa các giao diện chỉ trên chain FORWARD hơn là trên 3
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
chain.
* Phân biệt rõ ràng giữa lọc packet và NAT (Nework Ađress Translation)
* Có khảnăng giới hạn tốc độ kết nối và ghi nhật ký. Bạn có thể giới hạn kết nối và ghi nhật ký ồạt để tránh sự tấn công từ chối dịch vụ (Deinal of service).
* Có khảnăng lọc trên các cờ và địa chỉ vật lý của TCP.
* Là một Firewall có nhiều trạng thái, nên nó có thể theo dõi trong suốt sự kết nối, do đó nó an toàn hơn Firewall có ít trạng tháị
* Iptables bao gồm một vài bảng, mỗi bảng với một chính sách (police) mặc định và các nguyên tắc trong chain xây dựng sẵn.
4.5.1.2 Các bảng (Tables) và chuỗi luật (Chain) của Iptables
Khi một gói tin đầu tiên tới Firewall, phần cứng sẽ tiếp nhận nó và sau đó
chuyển tiến trình điều khiển thiết bịtương ứng trong nhân hệ điều hành. Sau đó, gói
tin sẽ bắt đầu đi qua một loạt các bước trong nhân hệ điều hành, trước khi nó được gửi tới ứng dụng cục bộ hoặc là được chuyển tiếp đến máy tính khác hay chịu tác
động nào đó của nhân hệđiều hành. Một mặt mạnh của Iptables là ở chỗ nhiều bảng có thểđược sử dụng để quyết định “số phận” của một gói tin nào đó, phụ thuộc vào kiểu của gói tin đang được kiểm trạ Và hành động được thực hiện trên gói tin đó.
Bảng mặc định, bảng filter, có chứa các chuỗi luật (các Chain) được xây dựng sẵn: INPUT, OUTPUT, và FORWARD. Theo mặc định Iptables chứa hai bảng bổ sung dùng để thực hiện các công việc lọc gói xác định: Bảng NAT và bảng Manglẹ
Mỗi bảng chứa tập hợp các chuỗi luật (các Chain) mặc định và các hành động (các Rules). Khi các chuỗi luật được thảo mãn, thì các hành động đã được áp dụng vào gói tin. Các hành động có thể khác nhau tương ứng với mỗi bảng hoặc thậm chí là chuỗi mà nó chiếm giữ. Tuy nhiên, người dùng cũng được phép định nghĩa những chuỗi luật mới trong các bảng.
Với ba bảng FILTER, MANGLE, NAT và các chain trong mỗi bảng, người
quản trị có thể tạo ra các rules cho phép các gói tin vào ra hệ thống (được bảo vệ
bằng iptables) tuỳ theo ý muốn của mình.
4.5.1.2.1 Bảng Nat
Chỉ được sử dụng để chuyển đổi địa chỉ tĩnh hoặc động trên những gói tin. Nói cách khác, nó chỉ được dùng để chuyển đổi trường địa chỉ nguồn hay trường địa chỉ đích của gói tin, tuỳ theo luật được chỉ rạ Các gói tin trong một dòng dữ liệu (stream) chỉ đi qua bảng này một lần. giả sửgói đầu tiên của một dòng dữ liệu được cho phép (chỉ có gói đầu tiên trong một dòng dữ liệu sẽ vấp phải chuỗi này). Phần gói còn lại trong dòng dữ liệu sẽđược tựđộng thay đổi địa chỉ và sẽ phải chịu cùng
các tác động như gói đầu tiên.
- Khi một máy bên trong mạng nội bộ truy cập vào tài nguyên bên ngoài thì
packet được gửi đến IP NAT, IP NAT sẽ thay đổi địa chỉ nguồn của packet bằng một địa chỉ hợp lệ trong dãy địa chỉđược cấp trên Internet nếu còn.
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
- Khi một máy của mạng bên ngoài truy cập tài nguyên của mạng cục bộ qua
IP NAT, khi packet đến IP NAT nó sẽthay đổi địa chỉ đích của packet bằng một địa chỉ của mạng nội bộ.
Để chuyển đổi trường địa chỉ nguồn hoặc đích trong packet chúng ta sử dụng 3 chuỗi luật được xây dựng sẵn:
Chuỗi luật PREOUTING: dùng để chuyển đổi địa chỉ các gói tin ngay sau
khi đi vào Firewall.
Chuỗi luật POSROUTING: Dùng để thay đổi địa chỉ gói tin trước khi chúng ra khỏi Firewall.
Chuỗi luật OUTPUT: Dùng để thay đổi địa chỉ các gói tin được phát sinh cục bộ(trên Firewall) trước khi định tuyến.
Các hành động thực hiện trong bảng này là:
- DNAT dùng trong trường hợp bạn có một địa chỉ IP chung (public) và muốn chuyển hướng các truy nhập vào Firewall tới một số máy khác (ví dụ trên
DMZ). Nói cách khác, chúng ta thay đổi địa chỉ đích của gói tin và dẫn đường cho nó tới một số máy tính khác.
Hình 4. 12: NAT tĩnh
- SNAT được dùng để thay đổi địa chỉ nguồn của các gói tin. Để làm ẩn các phần trong mạng cục bộ hoặc DMZ… Ví dụ nếu một Firewall biết được địa chỉ IP ở ngoài, nhưng cần thay thếđịa chỉ IP của mạng cục bộ bằng địa chỉ của Firewall. với
hành động này Firewall sẽ tựđộng SNAT và De-SNAT các gói tin, do đó để có khả năng thực hiện kết nối từ LAN đến Internet. Ví dụ nếu dùng 192.168.0.0/netmask, các gói tin sẽ không bao giờ đến được Internet, bởi vì IANA đã điều chỉnh những mạng này là private và chỉdùng trong các LAN độc lập.
Hình 4. 13: NAT động
- MASQUERADE được dùng giống như là SNAT, nhưng hành động MASQUERADE thực hiện tính toán ít hơn. Vì mỗi lần hành động MASQUERADE bắt gặp (hit) một gói tin nó sẽ tựđộng kiểm tra địa chỉ IP để dùng thay vì thực hiện
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
các thao tác như SNAT - chỉ dùng một địa chỉ IP được cấu hình đơn.
MASQUERADE làm cho nó có thể thực hiện tốt với địa chỉ IP DHCP động mà ISP của bạn có thể cung cấp cho PPP,PPPoE hoặc SLIP các kết nối đến Internet.
Bảng lọc (Filter)
Bảng filter dùng để lọc các gói tin. Chúng ta có thể kiểm tra và lọc các gói
tin tương ứng và lọc gói chúng theo cách mà chúng ta muốn. Đây là nơi chúng ta
thật sự thực hiện hành động trên các gói tin và kiểm tra nội dung của gói tin và loại bỏ (DROP) hoặc chấp nhận(ACCEPT) chúng.Có 3 chuỗi luật được xây dựng sẵn trong bảng này là:
- INPUT được áp dụng cho tất cả các gói tin đến Firewall.packet cho host
được chuyển qua chain input. Chú ý rằng tất cả các gói tin đến máy này đều phải thông của chuỗi input, không cần biết đến giao tiếp mạng nào hay hướng đến của chúng.
- FORWARD được áp dụng trên tất cả các gói tin sẽ đi qua Firewall (các gói tin không được phát sinh trên máy Firewall và có đích đến ngoài máy Firewall).
Là packet được nhận bởi host mà nó được định cho một host khác thì nó sẽ được chuyển sang chain nàỵ
- OUTPUT được áp dụng cho tất cả các gói tin được phát sinh từ các tiến trình cục bộ tức là packet được tạo từ host và chuyển cho host khác thì được chuyển qua chain output.
* Phần lớn tất cảcác hành động áp dụng lên gói tin đều có thểđược sử dụng trong chuỗi luật này tuy nhiên những hành động đã được nêu ở phần trên chỉ có thể được sử dụng trong bảng riêng của nó.
Bảng Mangle
Được sử dụng để thay đổi thông tin của gói tin. Ta có thể thay đổi nội dung gói tin và phần header của gói tin đó. Bảng này gồm 5 chuỗi luật được xây dựng sẵn.
- PREOUTING: được sử dụng đểthay đổi gói tin khi chúng vừa vào Firewall
và trước khi chúng qua bước quyết định dẫn đường.
- POSTROUTING: được sử dụng để thay đổi thông tin gói tin ngay sau khi tất cả các quyết định dẫn đường được thực hiện.
- INPUT: được sử dụng đểthay đổi thông tin gói tin sau khi chúng đã được dẫn tới bản thân máy cục bộ, nhưng trước khi được gửi tới tiến trình ứng dụng.
- FORWARD: được sử dụng để thay đổi thông tin gói tin sau khi chúng đã
sang bước quyết định dẫn đường đầu tiên, nhưng trước khi chúng chịu tác động của quyết định dẫn đường cuối cùng.
- OUTPUT: được sử dụng để thay đổi thông tin của các gói tin được phát sinh cục bộtrước khi chúng được chuyển sang bước quyết định dẫn đường.
Chúng ta không sử dụng bảng này để thực hiện lọc gói tin và cũng không
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
động có thể được sử dụng trong bảng này bao gồm:TOS, TTL, MARK, chúng chỉ
hợp lệ trong bảng manglẹ
- TOS: dùng xác lập một byte (8 - bit) TOS (Type of service) trong phần tiêu đề IP của gói tin. Nó không thực sự hoàn hảo trên thực tế nó không sử dụng trên internet và hầu hết các router không quan tâm đến giá trị trong trường này, và đôi
khi chúng thực hiện sai trên thông tin chúng nhận được.
- TTL: dùng thay đổi trường TTL (Time To Live) của gói tin tương kết. - MARK: dùng xác lập các giá trị cho trường điểm đặc biệt cho gói tin. Những điểm này được nhận diện bởi các chương trình iprouter2 để thực hiện dẫn
đường khác nhau trên gói phụ thuộc vào mark mà chúng có. Chúng ta cũng có thể
giới hạn băng thông và class based queuing trên những mark nàỵ
Mỗi rule mà bạn tạo ra phải tương ứng với một chain, table nào đấỵ Nếu bạn không xác định tables nào thì iptables coi mặc định là cho bảng FILTER.
4.5.1.3 Cách thức Packet qua Firewall
Hình 4. 14: Cách thức truyền packet trong Firewall
Các gói tin từ ngoài đi vào sẽ được kiểm tra bởi các Pre-routing chain đầu
tiên xem xem nó có cần DNAT không sau đó gói tin được routing. Nếu gói tin cần đi tới một hệ thống khác ( protected network ) nó sẽ được lọc bởi các FORWARD
chain của bảng FILTER và nếu cần nó có thể được SNAT bởi các Post-routing
chain trước khi đến được hệ thống đích. Tương tự khi hệ thống đích cần trả lời, gói
tin sẽ đi theo thứ tự như vậy nhưng theo chiều ngược lạị Lưu ý trong hình vẽ những
FORWARD và Post-routing chain của bảng mangle chỉ tác động vào đặc điểm QOS
( Quality of Service ) của gói tin.
Nếu gói tin được gửi tới hệ thống ( hệ thống chứa iptables ) nó sẽ được xử lý
bởi các INPUT chain và nếu không bị lọc bỏ nó sẽ được xử lý bởi một dịch vụ (
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
gửi đi được xử lý bởi các OUTPUT chain và có thể được xử ký bởi các Post-routing chain của bảng FILTER và bảng MANGLE nếu nó cần SNAT hay QoS.
4.5.1.4 Các build-in targets và một số tùy chọn thường dùng
Jump là cơ chế chuyển một packet đến một target nào đó để xử lý thêm một số thao tác khác.
Target là cơ chế hoạt động trong iptables, dùng để nhận diện và kiểm tra packet.
4.5.1.5 Các build-in targets thường dùng
ACCEPT: iptables chấp nhận gói tin, đưa nó qua hệ thống mà không tiếp tục
kiểm tra nó nữạ
DROP: iptables loại bỏ gói tin, không tiếp tục xử lý nó nữạ
LOG: thông tin của packet sẽ gởi vào syslog daemon iptables tiếp tục xử lý luật tiếp theo trong bảng mô tả luật. Nếu luật cuối cùng không match thì sẽ
drop packet. Với tùy chọn thông dụng là --log-prefix=”string”, tức iptables sẽ ghi nhận lại những message bắt đầu bằng chuỗi “string” hoặc --log-level
level (Ghi log sử dụng chỉ định cấp syslog. Level 7 là một lựa chọn tốt trừ
khi bạn cần gì đặc biệt khác)
REJECT: ngăn chặn packet và gởi thông báo cho sender. Với tùy chọn thông dụng là --reject-with qualifier, tức qualifier chỉ định loại reject message sẽ được gởi lại cho người gởị Các loại qualifer sau: icmp-port- unreachable (default), icmp-net-unreachable, icmp-host-unreachable, icmp-proto-unreachable, …
DNAT: thay đổi địa chỉ đich của packet. Tùy chọn là --to-destination ipađress.
SNAT: thay đổi địa chỉ nguồn của packet. Tùy chọn là --to-source <ađress>[-
ađress][:<port>-<port>]
MASQUERADING: được sử dụng để thực hiện kỹ thuật NAT (giả mạo địa chỉ nguồn với địa chỉ của interface của firewall). Tùy chọn là [--to-ports <port>[-<port>]], chỉđịnh dãy port nguồn sẽ ánh xạ với dãy port ban đầụ
Một số tùy chọn thường dùng
Để xây dụng các rules bạn còn phải sử dụng các tùy chọn để tạo điều kiện so
sánh. Sau đây là một số tùy chọn thường dùng:
t: chỉ ra tên của bảng mà rule của bạn sẽđược ghi vào (mặc định là FILTER). j: nhảy đến một kiểu xử lý (target) tương ứng như đã định nghĩa ở trên nếu
điều kiện so sánh thoả mãn.
A: ghi nối tiếp rule vào đuôi một chain
F: xóa tất cả các luật trong bảng lựa chọn
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
X: Xóa hết các luật đã tạo
P: đặt chính sách mặc định cho các Chain ( build-in INPUT, OUTPUT and FORWARD)
L: liệt kê các luật có trong Chain
F: xóa các luật có trong Chain (Flush Chain)
Z: reset bộ đếm Packet về 0
A: thêm luật (Append)
D: xóa luật (Delete)
R: thay thế luật (Replace)
I: chèn thêm luật (Insert)
p: so sánh protocol (giao thức) của gói tin.
s: so sánh địa chỉ nguồn của gói tin.
d: so sánh địa chỉ đích của gói tin
i: so sánh tên card mạng mà gói tin đi vào hệ thống qua đó
o: so sánh tên card mạng mà gói tin từ hệ thống đi ra qua đó.
p tcp --sport <port>: xác định port nguồn của gói tin TCP. Có thể là một giá trị hoặc một chuỗi có dạng: start-port-number:end-port-number
p tcp --dport <port>: xác định port đích của gói tin TCP. Có thể là một giá trị
hoặc một chuỗi có dạng: starting-port:ending-port
p udp --sport <port>: xác định port nguồn của gói tin UDP. Có thể là một giá trị hoặc một chuỗi có dạng: start-port-number:end-port-number
p udp --dport <port>: xác định port đích của gói tin UDP. Có thể là một giá