2
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á 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ể yê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 soá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
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ể đượcghi đè 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) trong khi vẫn cho phép người sử dụng hợp pháp có thể cố gắng đăng nhập một lần nữa sau khi kết thúc thời gian cấm
destmail
Sử dụng tùy chọn này để thiết lập các email của người sẽ nhận được cảnh báo khi một IP bị cấm
banaction
Sử dụng tùy chọn này để chỉ định hành động sẽ được thực thi để cấm một địa
chỉ IP vi phạm. Tức là:
iptables --- Sử dụng Iptables để cấm các IP vi phạm iptables-new --- Chỉ cấm các kết nối mới
iptables-multiport --- Cấm tất cả các Port từ IP vi phạm shorewall --- Sử dụng Shorewall thay vì Iptables
Protocol
Thiết lập các giao thức mặc định để cấm, TCP hoặc UDP.
Ví dụ: [ssh] Enabled = true port=ssh filter=sshd logpath=/var/log/auth.log maxretry=6
Đây là ví dụđiển hình cho SSH, kiểm tra log /var/log/auth.log bằng cách sử dụng
bộ lọc sshd và nếu nó tìm thấy 6 nổ lực tấn công thì sẽđóng port 22 (hành động
mặcđịnh) [apache-multiport] enable=true port=http,https filter = apache-auth logpath = /var/log/apache*/*error.log maxretry=6
Tương tự với ví dụ thứ 2 cho Apache, sự khác biệt là khối 2 port (http và https) và kiểm tra các tập tin log.
4.5.3 Fail2ban kết hợp với Iptables
Trong giải pháp này, chúng ta có một tường lửa dựa trên Linux giữa Internet và các máy chủ. Mỗi máy tính và máy ảo phía sau tường lửa chạy Fail2ban, nhưng