1. Trang chủ >
  2. Công nghệ thông tin >
  3. Quản trị mạng >

Mô hình mạng triển khai hệ thống phòng chống :

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.46 MB, 100 trang )


Hình 16: Luồng dữ liệu đi đến Web Server

Có thể hình dung luồng dữ liệu đi như sau:

-



Bước đầu tiên máy tính của người dùng sẽ tạo kết nối TCP với Máy

chủ web



-



Thông qua kết nối đó, request đến apache được gửi đến Máy chủ web



-



Request được netfilter so sánh với các rule do Iptables nhập vào.



-



Nếu request hợp lệ thì sẽ được chuyển sang user space (apache), apache

nhận request, xử lý rồi trả lời cho web brower.

Thông qua biểu đồ luồng dữ liệu đến Web Server ta thấy có 2 điểm mà



attacker sẽ lợi dụng để tấn công DDoS vào, đó là phần kết nối TCP và request

đến apache. Nếu attacker gửi rất nhiều TCP connection đến Web Server thì đến

một lúc nào đó, Máy chủ web sẽ không thể nhận thêm connection nữa (queue

đầy, …) và những connection của người dùng hợp pháp sẽ không được xử lý.

Mặc khác, do phụ thuộc vào lượng tài nguyên (RAM) trên máy chủ nên apache

chỉ có thể nhận và xử lý được một số có hạn request. Nên nếu attacker gửi càng



70



nhiều reuquest mà những request này đến được apache thì càng ít người dùng

hợp pháp được phục vụ.

Qua đó, em có một số ý tưởng cho giải pháp phòng chống DDoS cho Máy

chủ web đó là:

-



Cấu hình Server để có thể nhận và xử lý được nhiều nhất số kết nối

TCP/IP.



-



Kết thúc nhanh nhất các kết nối mà không làm ảnh huởng đến người

dùng hợp pháp để có thể nhận và xử lý các kết nối mới.



-



Giới hạn số connection đến Web Server, số connection đến apache



Hình 17: Luồng dữ liệu khi triển khai hệ thống phòng chống DDoS

Thông qua các ý tưởng, giải pháp được đưa ra bao gồm:

- Tối ưu hóa Máy chủ web ở tầng TCP/IP để server có thể nhận và xử lý

nhiều kết nối nhất đồng thời có thể giải phóng các kết nối một cách

nhanh nhất mà không làm ảnh hưởng đến người dùng hợp pháp.

- Cài đặt module connlimit cho Iptables để giới hạn số truy cập từ một IP.

- Triển khai hệ thống IPS gồm Snort inline và Iptables để chống lại các

request DDoS đến máy chủ web.

Em xin nhấn mạnh là hiện nay chưa có giải pháp nào tối ưu để chống lại DDoS,

giải pháp em đề xuất là một trong những giải pháp đã được triển khai và đã có

những thành công trong việc chống lại DDoS làm cho máy chủ web nói chung và

apache nói riêng không bị quá tải, không phục vụ được cho những người dùng hợp

lệ.



71



3. Mô hình thử nghiệm

Do điều kiện khách quan nên em chỉ có thể triển khai và kiểm nghiệm trên mô hình

trong mạng LAN. Mô hình thử nghiệm như sau:



Hình 18: Mô hình mạng thử nghiệm

Trong mô hình này:

- Gồm có 5 máy tính có cấu hình là 1Gb ram, CPU 2.2Ghz trong đó có 1 máy

sử dụng làm IPS/Máy chủ web (snort inline, Iptables , module ipt_connlimit, cài đặt

apache, php, mysql) trên đó có cài đặt một trang web sử dụng code joomla, 4 máy

còn lại đóng vai trò là attack host

- Tất cả các kết nối đều là full-duplex 100Mbit/s Ethernet (100BaseT)



4. Triển khai hệ thống

4.1 Tối ưu hóa server ở tầng TCP/IP

Bật chức năng tcp_syncookies : Bật chức năng này là cách đơn giản nhất để

chống lại SYN flood.

72



sysctl -w net.ipv4.tcp_syncookies=1

Đặt giá trị cho backlog queue : Giá trị tcp_max_syn_backlog sẽ quyết định có

bao nhiêu gói SYN được lưu trữ. tcp_syncookies phải được bật giá trị này mới có

hiệu lực.

sysctl -w net.ipv4.tcp_max_syn_backlog="2048"

Đặt lại số lần truyền lại gói SYN,ACK để reply lại gói SYN request. Mặc

định là 5 lần tương đương với thời gian timeout của kết nối TCP là 180 giây. Đặt

giá trị là 1 tương đương với thời gian timeout là 9 giây.

sysctl -w net.ipv4.tcp_synack_retries="1"

Bật chức năng IP spoofing protaction

sysctl -w net.ipv4.conf.all.rp_filter ="1"

Không chấp nhận forward broadcast

sysctl -w net.ipv4.icmp_echo_ignore_broadcasts="1"

Không chấp nhận source routed packet

sysctl -w net.ipv4.conf.all.accept_source_route=0

Tắt ICMP redirect

sysctl -w net.ipv4.conf.all.accept_redirects=1

Bật bad error message protection

sysctl -w net.ipv4.icmp_ignore_bogus_error_responses=1j

Một số cấu hình TCP khác :

• tcp_abort_on_overflow : Có 2 giá trị 0(mặc định) và 1.

Nếu có giá trị là 1 kernel sẽ reset những kết nối mới khi

queue đầy.

• tcp_fin_timeout : Mặc định là 60 giây.Giá trị của biến này

quyết định kernel sẽ giữ những socket ở trạng thái

FIN_WAIT-2 trong bao lâu nếu không nhận được gói

ACK/FIN từ phía client

• tcp_orphan_retries: Mặc định là 7.Giá trị này sẽ quyết

định TCP/IP stack thử ngắt kết nối ở phía client trước khi

đóng kết nối từ server.

73



• somaxconn : Mặc định là 128.Giá trị này giới hạn kích

thước của listen queue cho các gói new SYN

• ip_conntrack_max : số kết nối tcp lớn nhất mà hệ thống

có thể quản lý.



4.2 Cài đặt module connlimit cho Iptables

Cài rpm-build

yum install rpm-build

Tạo user ruby

useradd -d /home/ruby -s /bin/bash ruby

Đặt password cho user ruby

passwd ruby

Login vào user ruby

Xác định version của kernel đang dùng

uname -a

Xác định version của Iptables đang dùng

iptables -v

Download các packet và đặt ở thư mục home của user

wget http://mirror.centos.org/centos/5/updates/SRPMS/kernel-2.6.1892.1.22.el5.src.rpm (cùng version với kernel đang dùng)

wget http://www.netfilter.org/projects/iptables/files/iptables-1.3.5.tar.bz2

(cùng version với Iptables đang dùng)

wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-maticng-20090326.tar.bz2

Xây dựng môi trường build cho user

cd ~

mkdir -p \ rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}

echo ‘%_topdir %(echo $HOME)/rpmbuild’ > .rpmmacros

Cài kernel source

rpm -i kernel-2.6.18-92.1.22.e15.src.rpm

cd ~/rpmbuild/SPECS

74



rpmbuild -bp –target=`uname -m` kernel-2.6.spec

Sau bước trên kernel source sẽ được tạo ra tại :

~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.i686

Giải nén iptables và path-o-matic-ng

cd ~

tar -xvjf iptables-1.3.5.tar.bz2

tar -xvjf path-o-matic-ng-20090326.tar.bz2

Tạo và gán giá trị cho 2 biến môi trường

export KERNEL_DIR=~/rpmbuild/BUILD/kernel-2.6.18/linux2.6.18.i686

export IPTABLES_DIR=~/iptables-1.3.5/

Patch modules connlimit

cd path-o-matic-ng-20090326

./runme download

./runme connlimit

Cập nhật module vào kernel

cd ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.i686

make oldconfig

make prepare

make modules_prepare

cd net/ipv4/netfilter

make -C ~/rpmbuild/BUILD/kernel-2.6.18/linux-2.6.18.i686

M=$PWD modules

Copy new modules into update directory of the current system to set them active:

sudo cp ipt_connlimit.ko /lib/modules/2.6.18-92.1.22.e15/updates

sudo cd /lib/modules

sudo depmod 2.6.18-92.1.22.e15

Load module ipt_connlimit

sudo modprobe ipt_connlimit

Sử dụng : Giới hạn chỉ có 5 connection từ một IP đến apache

75



iptables -A INPUT -p tcp --syn --dport 80 -m connlimit -connlimit-above 5 -j REJECT



4.3 Cài đặt Snort inline

4.3.1 Cài đặt Snort inline

- Cài libnet-1.0.2a (các version mới hơn không thích hợp với snort inline )

wget http://www.packetfactory.net/libnet/dist/deprecated/libnet1.0.2a.tar.gz

tar xzvf libnet-1.0.2a.tar.gz

cd Libnet-1.0.2a

./configure

make

make install

- Cài Flex, bison, libpcap,iptables-devel,pcre, pcre-devel

yum install flex bison libpcap iptables-devel pcre pcre-devel

Download snort (snort-2.8.3.1.tar.gz) và rules (snortrulessnapshot-CURRENT.tar.gz) tại http://www.snort.org/

- Giải nén:

tar -xvzf snort-2.8.3.1.tar.g

- Compile và cài đặt snort :

cd snort-2.8.3.1

./configure --enable-inline --enable-flexresp

make

make install

groupadd snort

useradd -g snort snort -s /sbin/nologin

mkdir /etc/snort

mkdir /etc/snort/rules

mkdir /var/log/snort

cd etc/

76



cp * /etc/snort

Giải nén rules

tar -xvzf snortrules-snapshot-CURRENT.tar.gz

cp rules/* /etc/snort/rules

- Chỉnh lại rules.Sửa tất cả các rule alert sang drop

cd /etc/snort_inline/rules/

for file in $(ls -1 *.rules)

do

sed -e 's:^alert:drop:g' ${file} > ${file}.new

mv ${file}.new ${file} -f

done

Chỉnh sửa lại file snort.config :Mở file /etc/snort/snort.config và sửa

theo các dòng sau :

var HOME_NET 192.168.1.0/24 với 192.168.1.0/24 là mạng nội bộ

var EXTERNAL_NET !$HOME_NET

var RULE_PATH /etc/snort/rules

- Tạo file snort tại /etc/init.d/snort có nội dung như sau:

#!/bin/sh

#

# chkconfig: 2345 99 82

# description: Starts and stops the snort intrusion detection



#



system

#

# config: /etc/snort/snort.conf

# processname: snort

# Source function library

. /etc/rc.d/init.d/functions

BASE=snort

DAEMON="-D -Q"

77



INTERFACE="-i eth0"

CONF="/etc/snort/snort.conf"

# Check that $BASE exists.

[ -f /usr/local/bin/$BASE ] || exit 0

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0

RETVAL=0

# See how we were called.

case "$1" in

start)

if [ -n "`/sbin/pidof $BASE`" ]; then

echo -n $"$BASE: already running"

echo ""

exit $RETVAL

fi

echo -n $"Starting ip_queue module:"

lsmod | grep ip_queue >/dev/null || /sbin/modprobe ip_queue;

echo -e '\t\t\t\t [ \033[32mOK\033[37m ]'

echo -n $"Starting iptables rules:"

#iptables -N ip_queue

#iptables -I INPUT -p tcp -j ip_queue

#Add new IPTABLES rules here and they will be added into the

#ip_queue Ruleset

78



iptables -I INPUT -p tcp --dport 80 -j QUEUE

echo -n "Starting snort service: "

export PCAP_FRAMES =32768

/usr/local/bin/$BASE $INTERFACE -c $CONF $DAEMON

sleep 1

action "" /sbin/pidof $BASE

RETVAL=$?

[ $RETVAL -eq 0 ] && touch

/var/lock/subsys/snort

;;

stop)

echo -n "Shutting down snort service: "

killproc $BASE

unset PCAP_FRAMES

echo -ne $"\nRemoving iptables rules:"

iptables -F

iptables -X

echo -e '\t\t\t\t [ \033[32mOK\033[37m ]'

echo -n $"Unloading ip_queue module:"

rmmod ip_queue

echo -en '\t\t\t\t [ \033[32mOK\033[37m ]'

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f

/var/lock/subsys/snort

;;

restart|reload)

$0 stop

$0 start

RETVAL=$?

79



;;

status)

status $BASE

RETVAL=$?

;;

*)

echo "Usage: snort {start|stop|restart|reload|status}"

exit 1

esac

exit $RETVAL

- Gán quyền :

chmod 755 /etc/init.d/snort

- Cấu hình để Snort chạy startup.

chkconfig snort on



4.3.2 Tự động cập nhật rule

Để tự động cập nhật rule cho Snort inline ta sẽ cài thêm chương trình

oinkmaster. Nhiệm vụ chính của chương trình này là tự động download các

rule mới nhất về theo lịch định sẵn.

Download oinkmaster-2.0 tại :

http://nchc.dl.sourceforge.net/sourceforge/oinkmaster/oinkmaster2.0.tar.gz

Giải nén :

tar oinkmaster-2.0.tar.gz

cd oinkmaster-2.0

cp oinkmaster.pl /usr/local/bin/

cp oinkmaster.conf /etc/



80



Xem Thêm
Tải bản đầy đủ (.doc) (100 trang)

×