Thứ Hai, 7 tháng 5, 2012

Chặn các dạng tấn công thông thường với Iptables firewall


Chống SYN-flood

Đây là dạng tấn công hệ thống gây “tràn” (flood) với một loạt các gói SYN. Mỗi gói tin này yêu cầu hệ thống trả lời với một gói SYN-ACK. Sau đó hệ thống sẽ đợi để nhận gói tin ACK trả lời (để hoàn tất quá trình bắt tay 3 bước). Bởi vì attacker không bao giờ gửi gói ACK trả lời cho nên toàn bộ tài nguyên hệ thống sẽ bị cạn kiệt do bị dồn ứ ở hàng đợi. Một khi hàng đợi bị đầy thì hệ thống sẽ không thể phục vụ các request khác từ người dùng hợp lệ (http/maill). Bởi thế mà phải chặn dạng tấn công này với iptables firewall.

Bắt buộc kiểm tra các gói SYN phân mảnh

Phải đảm bảo rằng các kết nối TCP đến dạng NEW là các gói SYN, nếu không phải thì chúng ta có thể DROP chúng.
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP

Bắt buộc kiểm tra các gói bị phân mảnh

Các gói tin đi đến mà bị phân mảnh thì hãy DROP chúng. Dạng tấn công này có thể khiến server gặp sự cố như mất dữ liệu.
iptables -A INPUT -f -j DROP

Các gói tin XMAS

Các gói tin XMAS dị hình thì nên DROP:
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

Drop tất cả các gói tin NULL

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP

Chặn việc giả mạo địa chỉ

Sử dụng iptables bạn có thể lọc để DROP các địa chỉ nguồn đáng ngờ. Mạng server không được cho phép các gói tin đòi phục vụ từ Internet mà yêu cầu đó có nguồn gốc từ mạng bên trong. Vấn đề giả mạo có thể phân loại như sau:
a) Giả mạo IP (IP Spoofing) – Vô hiệu việc xác thực địa chỉ nguồn, ví dụ xác thực dựa trên rhost. Lọc RPC theo dịch vụ, như portmap và NFS
b) Giả mạo DNS (DNS Spoofing) -
Dưới đây là địa chỉ IP/network quen thuộc của dạng tấn công này:
Địa chỉ IP nguồn là địa chỉ IP của server 
Nhóm private IP cho nội mạng, đôi khi còn gọi là “non-routable IP”, ám chỉ các IP này không thể route ra ngoài mạng công cộng (thực tế chúng vẫn có thể route được, nhưng chỉ trong nội mạng). Các nhóm private IP này gồm có:
=> Class A: 0.0.0.0/8
=> 127.0.0.0/8
=> 10.0.0.0/8
=> Class B: 172.16.0.0/12
=> Class C: 192.168.0.0/16
=> Class D: 224.0.0.0/4
=> Class E: 240.0.0.0/5
=> Link Local: 169.254.0.0/16
=> Test Net: 192.0.2.0/24
IP từ các nhóm này không thể xuất hiện trên mạng công cộng (public network) và tất nhiên không nên cho phép đi vào hệ thống máy chủ. Tham khảo thông tin từ website IANA để nắm thêm chi tiết quy định các network class trên.
Dưới đây là một shell script thử nghiệm ngăn chặn dạng tấn công này:
#!/bin/bash

INT_IF="eth1" # connected to internet
SERVER_IP="202.54.10.20" # server IP
LAN_RANGE="192.168.1.0/24" # your LAN IP range 

# Add your IP range/IPs here,
SPOOF_IPS="0.0.0.0/8 127.0.0.0/8 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 224.0.0.0/3"

IPT="/sbin/iptables" # path to iptables

# default action, can be DROP or REJECT
ACTION="DROP"

# Drop packet that claiming from our own server
$IPT -A INPUT -i $INT_IF -s $SERVER_IP -j $ACTION
$IPT -A OUTPUT -o $INT_IF -s $SERVER_IP -j $ACTION

# Drop packet that claiming from our own internal LAN
$IPT -A INPUT -i $INT_IF -s $LAN_RANGE -j $ACTION
$IPT -A OUTPUT -o $INT_IF -s $LAN_RANGE -j $ACTION

for ip in $SPOOF_IPS
do
 $IPT -A INPUT -i $INT_IF -s $ip -j $ACTION
 $IPT -A OUTPUT -o $INT_IF -s $ip -j $ACTION
done
Lưu file và thoát. Chạy script trên. Thêm dòng sau vào /etc/sysctl.conf
net.ipv4.conf.all.rp_filter = 1
Mục này kích hoạt xác thực địa chỉ nguồn được tích hợp sẵn trong Linux kernel.
Cũng nên sử dụng NAT cho mạng nội bộ. Điều này sẽ gây khó khăn cho attacker trong việc giả mạo địa chỉ IP từ mạng bên ngoài.

Cản lọc ICMP, PING traffic

Nó bao gồm dạng tấn công ping of death và dội ICMP (ICMP floods). Xem thêm về phần cản lọc ICMP tại đây để hiểu rõ hơn.
Khi hệ thống đã an toàn, bạn có thể kiểm tra firewall với nmap hoặc hping2:
# nmap -v -f FIREWALL-IP
# nmap -v -sX FIREWALL-IP
# nmap -v -sN FIREWALL-IP
# hping2 -X FIREWALL-IP

Không có nhận xét nào:

Đăng nhận xét