Bài viết này sẽ hướng dẫn bạn cách phát hiện nguồn gốc các địa chỉ IP trong trường hợp nó phát xuất các cuộc tấn công DDOS. Từ đó bạn có thể kết hợp với iptables để chặn các địa chỉ này.
Để làm được điều này ta sử dụng một ứng dụng miễn phí được gọi là psad. psad hoạt động đồng bộ với iptables nhằm giám sát các tập tin log của iptables và kiểm tra các hành động quét cổng cũng như những luồng dữ lệu nghi ngờ báo hiệu một ai đó đang cố gắng xâm nhập vào hệ thống máy chủ của bạn.
Để cài đặt psad nếu bạn đang sử dụng bản phân phối Ubuntu hoặc Fedora thì có thể sử dụng một trong hai lệnh dưới đây:
# sudo apt-get install psad
hoặc
# yum install psad
Nếu hai lệnh trên không thể thực hiện thì bạn có thể tải về psad tại địa chỉ sau download page
Bài hướng dẫn này được thực hiện trên máy chủ Ubuntu. Tuy nhiên vẫn có thể đối ứng với các bản phân phối khác. Mở tập tin syslog.conf bằng trình soạn thảo yêu thích:
# vim /etc/syslog.conf
Thêm dòng dưới đây vào cuối tập tin:
kern.info |/var/lib/psad/psadfifo
bạn có thể sử dụng lệnh sau để hoàn tất tác vụ tương tự:
# echo -e 'kern.info\t|/var/lib/psad/psadfifo' >> /etc/syslog.conf
Sau đó khở động lại hai dịch vụ sysklogd và klog:
/etc/init.d/sysklogd restart
/etc/init.d/klogd restart
Cách làm việc của psad là phát hiện và hướng dẫn iptables chặn bất kỳ các địa chỉ IP được đưa vào diện nghi vấn. Do vậy thỉnh thoảng vẫn xảy ra tình trạng chặn nhầm IP mà bạn sử dụng. Để tránh điều này, bạn nên tạo một tập tin chứa danh sách các địa chỉ IP tin cậy. Tạo một tập tin tương tự như sau:
# vim /home/calvin/safeiplist.cfg
Điền các địa chỉ IP mà bạn muốn psad đưa vào danh sách tin cậy:
127.0.0.0/24
192.168.0.0/24
122.164.34.240
Không sử dụng đoạn mã tương tự đoạn mã sau đây để cấu hình iptables với các quy luật cần thiết. Ghi chúđoạn mã này sẽ xóa bỏ tất cả các thiết lập trước đây từ phần khởi tạo iptables của bạn. Tạo một tập tin tên là ipblock.sh, sau đó sao chép và dán đoạn mã sau đồng thời thay thế hai biến WORKDIR và SAFEIPLIST cho đúng với thiết lập của bạn.
WORKDIR="/home/calvin/"
INTERVAL="5"
HITCOUNT="5"
SAFEIPLIST="safeiplist.cfg"
cd $WORKDIR
iptables -F
if [ -f $SAFEIPLIST ]; then
IPS=$(grep -Ev “^#” $SAFEIPLIST)
for i in $IPS
do
iptables -A INPUT -s $i -j ACCEPT
done
fi
iptables -A INPUT -m state –state NEW -m recent –set
iptables -A INPUT -m state –state NEW -m recent –update –seconds $INTERVAL –hitcount $HITCOUNT -j LOG
Đoạn mã trên sẽ ghi nhận địa chỉ IP nếu nó thực hiện quá 5 lần thử kết nối trong khoảng thời gian 5 giây. Sau đó, bạn cấp quyền thực thi và chạy nó.
# chmod +x /home/calvin/ipblock.sh
# /home/calvin/ipblock.sh
Giờ đây mở tập tin cấu hình psad và chỉnh sửa như sau:
EMAIL_ADDRESSES you@yourdomain.com;
Thiết lập tên máy:
HOSTNAME yourdomain.com;
Nếu bạn chỉ có một cạc mạng thì thiết lập giá trị HOME_NET thành:
HOME_NET NOT_USED;
Bạn cũng cần điều chỉnh cấp độ phòng vệ cho psad, và định ra các cổng mà psad sẽ bỏ qua. Ví dụ nếu bạn cần yêu cầu psad bỏ qua giao thức UDP kết nối đến cổng 80 và 8080, thì làm như sau:
IGNORE_PORTS udp/80, udp/8080;
Lưu và đóng tập tin. Sau đó khởi động lại dịch vụ psad:
# /etc/init.d/psad restart
Để xem các báo cáo của psad, chạy lệnh:
Để làm được điều này ta sử dụng một ứng dụng miễn phí được gọi là psad. psad hoạt động đồng bộ với iptables nhằm giám sát các tập tin log của iptables và kiểm tra các hành động quét cổng cũng như những luồng dữ lệu nghi ngờ báo hiệu một ai đó đang cố gắng xâm nhập vào hệ thống máy chủ của bạn.
Để cài đặt psad nếu bạn đang sử dụng bản phân phối Ubuntu hoặc Fedora thì có thể sử dụng một trong hai lệnh dưới đây:
# sudo apt-get install psad
hoặc
# yum install psad
Nếu hai lệnh trên không thể thực hiện thì bạn có thể tải về psad tại địa chỉ sau download page
Bài hướng dẫn này được thực hiện trên máy chủ Ubuntu. Tuy nhiên vẫn có thể đối ứng với các bản phân phối khác. Mở tập tin syslog.conf bằng trình soạn thảo yêu thích:
# vim /etc/syslog.conf
Thêm dòng dưới đây vào cuối tập tin:
kern.info |/var/lib/psad/psadfifo
bạn có thể sử dụng lệnh sau để hoàn tất tác vụ tương tự:
# echo -e 'kern.info\t|/var/lib/psad/psadfifo' >> /etc/syslog.conf
Sau đó khở động lại hai dịch vụ sysklogd và klog:
/etc/init.d/sysklogd restart
/etc/init.d/klogd restart
Cách làm việc của psad là phát hiện và hướng dẫn iptables chặn bất kỳ các địa chỉ IP được đưa vào diện nghi vấn. Do vậy thỉnh thoảng vẫn xảy ra tình trạng chặn nhầm IP mà bạn sử dụng. Để tránh điều này, bạn nên tạo một tập tin chứa danh sách các địa chỉ IP tin cậy. Tạo một tập tin tương tự như sau:
# vim /home/calvin/safeiplist.cfg
Điền các địa chỉ IP mà bạn muốn psad đưa vào danh sách tin cậy:
127.0.0.0/24
192.168.0.0/24
122.164.34.240
Không sử dụng đoạn mã tương tự đoạn mã sau đây để cấu hình iptables với các quy luật cần thiết. Ghi chúđoạn mã này sẽ xóa bỏ tất cả các thiết lập trước đây từ phần khởi tạo iptables của bạn. Tạo một tập tin tên là ipblock.sh, sau đó sao chép và dán đoạn mã sau đồng thời thay thế hai biến WORKDIR và SAFEIPLIST cho đúng với thiết lập của bạn.
WORKDIR="/home/calvin/"
INTERVAL="5"
HITCOUNT="5"
SAFEIPLIST="safeiplist.cfg"
cd $WORKDIR
iptables -F
if [ -f $SAFEIPLIST ]; then
IPS=$(grep -Ev “^#” $SAFEIPLIST)
for i in $IPS
do
iptables -A INPUT -s $i -j ACCEPT
done
fi
iptables -A INPUT -m state –state NEW -m recent –set
iptables -A INPUT -m state –state NEW -m recent –update –seconds $INTERVAL –hitcount $HITCOUNT -j LOG
Đoạn mã trên sẽ ghi nhận địa chỉ IP nếu nó thực hiện quá 5 lần thử kết nối trong khoảng thời gian 5 giây. Sau đó, bạn cấp quyền thực thi và chạy nó.
# chmod +x /home/calvin/ipblock.sh
# /home/calvin/ipblock.sh
Giờ đây mở tập tin cấu hình psad và chỉnh sửa như sau:
EMAIL_ADDRESSES you@yourdomain.com;
Thiết lập tên máy:
HOSTNAME yourdomain.com;
Nếu bạn chỉ có một cạc mạng thì thiết lập giá trị HOME_NET thành:
HOME_NET NOT_USED;
Bạn cũng cần điều chỉnh cấp độ phòng vệ cho psad, và định ra các cổng mà psad sẽ bỏ qua. Ví dụ nếu bạn cần yêu cầu psad bỏ qua giao thức UDP kết nối đến cổng 80 và 8080, thì làm như sau:
IGNORE_PORTS udp/80, udp/8080;
Lưu và đóng tập tin. Sau đó khởi động lại dịch vụ psad:
# /etc/init.d/psad restart
Để xem các báo cáo của psad, chạy lệnh: