Các gói tin từ ngồ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ụ ( System Service ) nào đó chạy trên hệ thống. Khi hệ thống gửi trả lời, gói tin mà nó
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 N: tạo chain mới
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á trị hoặc một chuỗi có dạng: starting-port:ending-port
syn: xác định gói tin có phải là một yêu cầu tạo một kết nối TCP mới không. icmp-type: xác định loại gói icmp (echo-reply hay echo-request).
m multiport --sport < port, port >: xác định một loạt các giá trị port nguồn m multiport --dport < port, port >: xác định một loạt các giá trị port đích. m multiport --port < port, port >: xác định một loạt các giá trị port ( không
phân biệt nguồn hay đích ).
m --state < state >: xác định trạng thái kết nối mà gói tin thể hiện. Các trạng thái thơng dụng nhất được dùng là:
ESTABLISHED: gói tin thuộc một kết nối đã được thiết lập. NEW: gói tin thể hiện một yêu cầu kết nốị
RELATED: gói tin thể hiện một yêu cầu kết nối thứ hai (có liên quan đến kết nối thứ nhất, thường xuất hiện ở những giao thức FPT hay ICMP)
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
4.5.1.6 Các lệnh cơ bản
Cài đặt Iptables
apt-get install iptables
Kiểm tra version iptables:
rpm -q iptables
Và để xem iptables là thực sự hoạt động, chúng ta có thể kiểm tra xem các mô-đun iptables được nạp và sử dụng L-switch để kiểm tra các quy định hiện đang được
nạp:
lsmod | grep ip_tables
iptables hoạt động thì kết quả trả về tương tự như sau: ip_tables 17029 1 iptable_filter
x_tables 17349 2 xt_tcpudp,ip_tables
Lệnh khởi động iptables:
service iptables start service iptables stop service iptables restart
hoặc:
/etc/init.d/iptables start /etc/init.d/iptables stop /etc/init.d/iptables restart
Lệnh bật/tắt iptables trong starup:
chkconfig iptables on chkconfig iptables off
Lệnh kiểm tra tình trạng iptables:
service iptables status
Lệnh mở 1 port:
iptables -A INPUT -p tcp --dport 80 -j ACCEPT //port:80 for web iptables -A INPUT -p tcp --dport 21 -j ACCEPT //port:21 for ftp
Lệnh mở 1 dãy port:
iptables -A INPUT -p tcp --dport 7777:7778 -j ACCEPT //mở port từ 7777 đến 7778
Kiểm tra các Port đang mở:
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
Kiểm tra iptables cho phép kết nối:
iptables -L -n
Sau khi thao tác bạn có thể vào đây check các port xem xữ lý ok không
4.5.1.7 Cách lưu, reboot và chỉnh sửa cấu hình Iptables
Thơng thường iptables lưu trữ cấu hình hiện tại của nó tại /etc/sysconfig/iptables,
mỗi lần hệ thống reboot nó sẽ dùng lệnh iptable-restore để đọc lại cấu hình từ file này và active nó.
Để xem cấu hình iptables hiện tại bạn có thể dùng lệnh:
cat /etc/sysconfig/iptables hoặc iptables-save
# Generated by iptables-save v1.2.9 on Mon Nov 8 11:00:07 2004 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [144:12748] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 255 -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Nov 8 11:00:07 2004
Để sửa cấu hình iptables bạn khơng nên sửa trực tiếp trên file /etc/sysconfig/iptables này thay vào đó bạn nên up cấu hình hiện tại ra một file tạm thời nào đó như sau:
iptables-save > firewall-config cat firewall-config
# Generated by iptables-save v1.2.9 on Mon Nov 8 11:00:07 2004 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [144:12748] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
-A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp -m icmp --icmp-type 255 -j ACCEPT -A RH-Firewall-1-INPUT -p esp -j ACCEPT
-A RH-Firewall-1-INPUT -p ah -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Mon Nov 8 11:00:07 2004
Chỉnh sửa file firewall-config theo ý bạn (thêm sửa xoá các rules)
Sau đó reload nó để cho iptables sử dụng xem có hoạt động đúng với ý mình khơng
bằng lệnh:
iptables-restore < firewall-config
Nếu thấy hệ thống hoạt động tốt bạn có thể n tâm save file cấu hình đó bằng lệnh service iptables savẹ
4.5.2 FAIL2BAN
4.5.2.1 Giới thiệu về Fail2ban
Fail2ban là một phần mềm nguồn mở phòng chống xâm nhập được viết theo
ngơn ngữ lập trình Python. Nó có thể chạy trên các hệ thống POSIX có một giao diện cho một hệ thống kiểm sốt gói hoặc tường lửa được cài đặt sẵn (ví
dụ, iptables, TCP Wrapper, shorewall, denyhost ). Fail2ban được sử dụng để ngăn chặn các cuộc tấn cơng DoS. Trong sự kết hợp với iptables nó sẽ cấm các địa chỉ IP
đáng ngờ được tìm thấy từ các bộ lọc fail2ban.
4.5.2.2 Chức năng của Fail2ban
Fail2ban hoạt động bằng cách lựa chọn chặn địa chỉ IP của máy chủ đang cố
gắng xâm phạm an ninh của hệ thống. Nó xác định các máy chủ bị chặn bằng cách theo dõi các tập tin đăng nhập (ví dụ như / var / log / pwdfail, / var / log /
auth.log, vv) và cấm IP bất kì máy chủ nào cố gắng đăng nhập quá nhiều hoặc thực
hiện bất kỳ hành động nào khác không mong muốn trong một khung thời gian xác
định bởi người quản trị. Fail2ban thường được thiết lập để unban một máy chủ bị
chặn trong một thời gian nhất định, để khơng "khóa" bất kỳ kết nối hợp pháp nào mà có thể tạm thời sai (trường hợp quên pass tạm thời hoặc gõ sai). Tuy nhiên, một unban với thời gian chừng vài phút là đủ để ngăn chặn một kết nối mạng bị tràn ngập bởi các kết nối độc hại, cũng như giảm khả năng thành công của các cuộc tấn công từ điển.
Fail2ban có thể thực hiện nhiều hành động bất cứ khi nào một địa chỉ IP
đáng ngờ được phát hiện: cập nhật các quy tắc tường lửa của Netfilter / iptables,
hoặc TCP Wrapper bảng hosts.deny, từ chối địa chỉ IP của một kẻ tấn công, thông
báo email, hoặc bất kỳ hành động nào do người dùng định nghĩa bằng cách thực thi một kịch bản Python (tự tạo).
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
4.5.2.3 Các tính năng chính của Fail2ban
Dưới đây là danh sách những tính năng chính có sẵn trong Fail2ban. Kiến trúc Client / Server.
Đa luồng. Cấu hình caọ
Hỗ trợ FAM / Gamin.
Phân tích các tập tin đăng nhập và tìm mẫu nào đã chọ
Thực hiện lệnh khi một mơ hình đã được phát hiện cùng một địa chỉ IP cho
nhiều hơn lần X, X có thể được thay đổị
Sau một khoảng thời gian nhất định, thực thi một lệnh để bỏ cấm địa chỉ IP.
Sử dụng Netfilter / iptables bằng cách mặc định, nhưng cũng có thể sử dụng TCP Wrapper (/ etc / hosts.deny) và nhiều hành động khác.
Xử lý luân chuyển các file bản ghị
Giải quyết tên máy đến địa chỉ IP DNS.
Tự động phát hiện của các định dạng ngày / giờ
Hỗ trợ ký tự đại diện trong tùy chọn LogPath
Hỗ trợ xử lý cho rất nhiều các dịch vụ (sshd, apache, qmail, proftpd, sasl, Asterisk, vv)
Hỗ trợ cho một vài hành động (iptables, tcp-wrapper, shorewall, các thông báo mail, vv)
Mã này đã được viết lại hoàn toàn, kể từ khi 0.6.x. Fail2ban hoàn toàn được viết bằng Python và do đó có thể làm việc trên hầu hết các hệ thống * nix.
4.5.2.4 Cơ chế hoạt động
Fail2ban bao gồm 2 phần: khách hàng và máy chủ.
Máy chủ (fail2ban-server) là đa luồng và lắng nghe trên một trình cắm
Unix cho các lệnh và thông tin khách hàng trong thời gian thực. Các máy chủ chính nó khơng biết gì về các tập tin cấu hình. Như vậy, lúc khởi động, máy chủ ở trạng thái "mặc định" trong đó khơng có nhà tù (jail) nào được xác định.
Khách hàng (fail2ban-client) là lối vào Fail2ban. Nó kết nối tới trình cắm
máy chủ các tập tin và gửi các lệnh để cấu hình và vận hành máy chủ. Khách hàng có thể đọc các tập tin cấu hình hoặc đơn giản là có thể được sử dụng để gửi một
lệnh duy nhất tới máy chủ bằng cách sử dụng command line hoặc chế độ tương tác
(được kích hoạt với -i option).
4.5.2.5 Cài đặt và cấu hình Fail2ban
Để cài đặt Fail2ban sử dụng câu lệnh:
apt-get install fail2ban
Cấu hình
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
Fail2ban có hai tập tin cấu hình chính được gọi là /etc/fail2ban/fail2ban.conf và /etc/fail2ban/jail.conf
Thông thường bạn chỉ cần thay đổi jail.conf Jail.conf được chia bởi section:
[default] Trường hợp tất cả những tùy chọn mặc định nên đi, vì tất cả chúng có thể
được ghi đè bởi những tùy chọn khác được viết trong các jail cá nhân ghi vào tập tin
nàỵ
Các tùy chọn là:
enabled
Xác định một section nào đó được kích hoạt hay khơng, các giá trị của nó là:
false
true
filter
Điều này không được sử dụng trong section default mà nó được sử dụng để nói cho
fail2ban client những gì nó đang tìm kiếm trong logfile, giá trị của nó là một trong:
sshd
proftpd
httpd
action
Tùy chọn này nói cho Fail2ban hành động gì sau khi một nguyên tắc bị phá vỡ, có thể được quy định bởi một hành động mặc định trong section default, và để ghi đè
lên mỗi phần tử bạn cần phải thay đổi các giá trị mặc định.
logpath
Với tùy chọn này chúng ta phải vượt qua tập tin được phân tích cú pháp, nên được
đưa vào những tài khoản phân phối khác nhau, có những tập tin log khác nhau, ví
dụ cho SSH:
CentOS -> /var/log/secure
Debian -> /var/log/auth
Ubuntu -> /var/log/auth
Sabayon -> /var/log/messages
Nếu bạn đặt một giá trị sai ở đây, nó sẽ khơng làm việc và sẽ cung cấp cho bạn rằng khơng có lỗị
Ignoreip
Tùy chọn này được sử dụng để thiết lập một hoặc một số IP khơng bị chặn,
khơng có điều gì xảy ra khi một người dùng dù đăng nhập sai bao nhiêu lần đi nữa
CHƯƠNG 4: CÁC GIẢI PHÁP BẢO MẬT CHO HỆ THỐNG
maxretry
Tùy chọn này được sử dụng để thiết lập các giới hạn của việc thử lại cấp cho một người sử dụng trước khi bị chặn
bantime
Tùy chọn này được sử dụng để thiết lập thời gian (tính bằng giây) một IP sẽ bị cấm, tốt nhất là 5 phút, tức 300 giây, điều này sẽ triệt tiêu các bot (Anti ĐoS)