Thứ Ba, 17 tháng 8, 2010

Hướng Dẫn Cài Đặt Firewall-Proxy

Chúng ta xây dựng mô hình Firewall kết hợp Proxy để quản lý mọi hành động trong hệ thống, tránh được những rủi ro không mong muốn.
Mô hình tham khảo như sau:



Để thực hiện, chúng ta cần cài đặt các chương trình sau:
• ShoreWall: làm firewall, quản lý traffic, chặn ứng dụng dựa vào port,…
• Squid: làm proxy, cache web, quản lý hành vi user,…
• Sarg: monitor proxy.

Do tài nguyên hạn hẹp, nên ta thực hiện nó trên cùng 1 máy, RAM chừng 2GB là được.
Bài viết này dùng Cent OS 5.4 (áp dụng luôn cho các distro của cent, như RedHat).
Các gói hỗ trợ cho cài đặt:
#yum install -y gcc gcc-c++ ;compiler

Cài đặt gói rpmforge-release từ http://dag.wieers.com/rpm/packages/rpmforge-release/
#wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
#rpm –ivh /rpmforge-release-0.3.6-1.el5.rf.i386.rpm
Gói này để nó tự động đi tìm những thứ cần thiết cho ta khi cần.


I. ShoreWall:
1. Giới thiệu:
Shorewall là chương trình quản lý iptables, giúp ta điều khiển được hành vi traffic ở mức L3.
2. Cài đặt:
Download các gói cần thiết, ổn định tại thời điểm đó tại http://www.shorewall.net/pub/shorewall/
#mkdir /source
#cd source
#wget http://www.shorewall.net/pub/shorewall/4.2/shorewall-4.2.2/shorewall-shell-4.2.2.tar.bz2
#wget http://www.shorewall.net/pub/shorewall/4.2/shorewall-4.2.2/shorewall-perl-4.2.2.2.tar.bz2
#wget http://www.shorewall.net/pub/shorewall/4.2/shorewall-4.2.2/shorewall-common-4.2.2.1.tar.bz2
#tar -jxvf shorewall-shell-4.2.2.tar.bz2
#tar -jxvf shorewall-perl-4.2.2.2.tar.bz2
#tar -jxvf shorewall-common-4.2.2.1.tar.bz2

Vào các directory vừa giải nén, cài đặt:
#./install.sh
Vào nơi chứa các file cấu hình cho shorewall
#cd /etc/shorewall

Tạo các zones trong /etc/shorewall/zones
#ZONE TYPE OPTIONS IN OUT
# OPTIONS OPTIONS
fw firewall
loc ipv4
net ipv4
dmz ipv4

Khai báo các interfaces tương ứng với các zonez trong file /etc/shorewall/interfaces
#ZONE INTERFACE BROADCAST OPTIONS
net eth0
loc eth1
dmz eth2

Khai báo trong các policy trong /etc/shorewall/policy
#SOURCE DEST POLICY LOG LIMIT: CONNLIMIT:
# LEVEL BURST MASK
loc net REJECT info
loc dmz REJECT info
loc fw REJECT info
net all ACCEPT info
dmz all ACCEPT info
$FW all ACCEPT

Dùng SNAT để các máy trong LAN, DMZ đi internet bằng IP public, trong file /etc/shorewall/masq
#INTERFACE SOURCE ADDRESS PROTO PORT(S) IPSEC MARK
eth0 eth1
eth0 eth2

Dùng DNAT để các máy ngoài internet truy cập vào máy ta đã publish, trong file /etc/shorewall/rules
#ACTION SOURCE DEST PROTO DEST SOURCE ORIGINAL RATE USER/ MARK CONNLIMIT TIME

ACCEPT loc fw icmp echo-request
ACCEPT loc dmz icmp echo-request
ACCEPT loc net tcp 80,443
ACCEPT loc net udp 53
DNAT net dmz:172.27.1.104 tcp 80 - ; giả sử ta đang publish web server 172.27.1.104

REDIRECT loc 3128 tcp www - !172.27.1.105 ;172.27.1.105 là máy Proxy server, dòng này để user truy cập internet đều bị tự động đá qua cho proxy xử lý.


Chỉnh lại STARTUP_ENABLED=Yes trong file /etc/shorewall/shorewall.conf
# vi /etc/shorewall/shorewall.conf
STARTUP_ENABLED=Yes


Start dịch vụ shorewall:
#shorewall start
#shorewall restart
#shorewall clear //Xóa các rule trong cache

Vậy là xong phần shorewall.

II. Squid:
1. Giới thiệu:
Hiện có rất nhiều chương trình làm proxy, nhưng ta chọn squid bởi những tính năng ưu việt của nó (tính tới thời điểm hiện tại):
• Quản lý cache theo kiểu chia nhỏ, giúp truy cập nhanh hơn (trong khi ISA thì gom 1 cục, và 15GB thì die)
• Hỗ trợ ICP , tự động cập nhật thông tin của những URL đã có sẵn trong cache, đảm bảo nội dung mới liên tục ( một số chương trình proxy không hỗ trợ cái này phải set thời gian update, chứ không chỉ đọc được thông tin cũ).
• Khắc phục được tình trạng chỉ hỗ trợ HTTP, HTTPs, FTP như các proxy khác.
• ….
Có thể làm được mọi thứ theo ý mình trên squid.

2. Cài đặt:
#yum -y install squid
Cấu hình các thông số cơ bản:(ta chỉ cần thay đổi một số tùy chọn là squid có thể hoạt động được, mặc định squid cấm tất cả các browser truy cập)
Ta nên copy file squid.conf.default thành file squid.conf.
#cp /etc/squid/squid.conf.default /etc/squid.conf
#vi /etc/squid/squid.conf
#squid lang nghe cac proxy client tren port 3128, có thể đổi lại port tùy thích
#thong so transparent de no co the lam viec voi firewall redirect
http_port 3128 transparent //line 919

#port su dung ICP
icp_port 3130 //line 1449

#cahe_mem = RAM/3, o day la RAM he thong = 256
cache_mem 60 MB //line 1576
cache_swap_low 90 //line 1838
cache_swap_high 95

#cache_dir: cấu hình thư mục lưu dữ liệu được cache
#default: cache_dir ufs /var/spool/squid 100 16 256
#squid se luu cache tai /var/spool/squid voi kich thuoc cache=5000MB
#level-1 subdirectory =16 la so thu muc con tao trong squid
#level-2 subdirectory=256
cache_dir ufs /var/spool/squid 5000 16 256 //line 1782

#cache_access_log: lưu trữ activity request của client yêu cầu đến proxy server để truy cập web
cache_access_log /var/log/squid/access.log //line 1961

#cache_log: lưu trữ thông tin chung về cache
cache_log /var/log/squid/cache.log //line 1962

#cache_store_log: lưu trữ các thông tin về đối tượng được cache trên proxy, thời gian lưu trữ...
cache_store_log /var/log/squid/store.log //line 1971

#cache_effective_user, cache_effective_group: người dùng và nhóm có thể thay đổi squid
cache_effective_user squid
cache_effective_group squid

cache_replacement_policy heap LFUDA // thuật toán cache đĩa
memory_replacement_policy heap GDSF //thuật toán cache RAM
maximum_object_size_in_memory 32 KB // file lớn nhất có thể RAM cache
maximum_object_size 1000 MB // file lớn nhất có thể cache

#Access Control List và Access Control Operators: dùng để ngăn chặn việc truy xuất dựa vào tên #miền, địa chỉ IP. Mặc định, squid từ chối tất cả, vì vậy phải cấu hình lại

acl mynetwork src "/etc/squid/allowip.txt" //line 591
http_access allow mynetwork
http_access deny all

visible_hostname squid

Khởi động squid:
#/etc/init.d/squid start
Nếu có báo lỗi do không có quyền ghi trong /var/spool/squid, ta phải gán cho user/group squid có quyền 770.
#chmod 770 /var/spool/squid

Cho nó auto start:
#chkconfig squid on

3. Tùy biến nâng cao trong squid:
a. Cấm truy cập website dựa trên domain đã định:
Thêm vào trong file cấu hình một số phần như sau:
#vi /etc/squid/squid.conf
//deny website in ban_list
acl denywebsite dstdom_regex "/etc/squid/ban_list"
http_access deny denywebsite

Tạo file ban_list
#vi /etc/squid/ban_list
yahoo.com
vnexpress.net
nhacso.net

b. Hạn chế nội dung các file download:
#vi /etc/squid/squid.conf
acl home_network src 192.168.1.0/24
acl denyfiletypes url_regex -i .mp3$ .mpg$ .mpeg$ .mp2$ .avi$ .wmv$ .wma$ .exe$
http_access deny denyfiletypes
http_access allow home_network

Nếu muốn chỉ cho 1 net nào đó được download thì thêm vào !net_muon_cho
acl it-server src "/etc/squid/it-server.txt"
http_access deny denyfiletypes !it-server
sau đó soạn file it-server.txt gồm net mình muốn cho download các file trên

c. Cấu hình squid proxy để điều khiển băng thông:
Thêm vào file cấu hình một số phần như sau:
#Add control bandwidth
acl ip src "/etc/squid/ip.txt"
acl all src 0.0.0.0/0.0.0.0
#Add control bandwidth
delay_pools 1
delay_class 1 2
delay_access 1 allow ip
delay_access 1 deny all
delay_parameters 1 -1/-1 15000/15000

Với delay_parameters 1 -1/-1 15000/15000 ta sẽ giới hạn băng thông cho các client không thể vượt quá 15000 tương đương 15Kbps.
Sau đó tạo file /etc/squid/ip.txt như sau:
#vi /etc/squid/ip.txt
192.168.1.33/24
192.168.1.34/24

d. Cấu hình nội dung hiện ra khi client bị cấm truy cập site nào đó:
Chỉnh sửa file /usr/share/squid/errors/English/ERR_ACCESS_DENIED
#vi /usr/share/squid/errors/English/ERR_ACCESS_DENIED
giờ thì tùy biến nội dung hiện ra khi user truy cập một trang web nào mà ta đã cấm.

e. Hạn chế dung lượng download:
Giả sử ta hạn chế không cho download trên 10MB, ngoại trừ IT
Nếu muốn chỉ cho 1 net nào đó được download thì thêm vào !net_muon_cho
#vi /etc/squid/squid.conf
acl network src "/etc/squid/network.txt"
acl it-server src "/etc/squid/it-server.txt"
reply_body_max_size 10000000 allow network !it-server

Xem thông tin squid:
#squidclient mgr:info //xem tình trạng cache
#uptime //xem tải
#top //xem tổng hợp tình trạng hệ thống

III. Cấu hình Sarg để monitor squid log:
Dĩ nhiên ta cần phải monitor squid log để biết được user truy cập site nào nhiều, download cái gì, …
1. Cài đặt:
#yum -y install gd gd-devel
#yum -y install sarg

Nên để ý 2 thông số sau trong file cấu hình của sarg
#vi /etc/sarg/sarg.conf
access_log /var/log/squid/access.log ( file log của squid )
output_dir /var/www/sarg/ONE-SHOT ( thư mục chứa report )

Cho phép IP nào được xem report của sarg:
#vi /etc/httpd/conf.d/sarg.conf
Allow from 192.168.0.1,127.0.0.1 //allow IP to see report

Các file script để lấy thông tin theo ngày, theo tuần, theo tháng:
#vi /etc/cron.daily/sarg
#!/bin/bash

# Get yesterday's date
YESTERDAY=$(date --date "1 days ago" +%d/%m/%Y)

exec /usr/bin/sarg \
-o /var/www/sarg/daily \
-d $YESTERDAY &>/dev/null
exit 0

#vi /etc/cron.weekly/sarg
#!/bin/bash

# Get one week ago date
WEEKAGO=$(date --date "7 days ago" +%d/%m/%Y)

exec /usr/bin/sarg \
$LOG_FILES \
-o /var/www/sarg/weekly \
-d $WEEKAGO-$YESTERDAY &>/dev/null
exit 0

#vi /etc/cron.monthly/sarg
#!/bin/bash

# Get 1 month ago date
MONTHAGO=$(date --date "1 month ago" +%d/%m/%Y)

exec /usr/bin/sarg \
$LOG_FILES \
-o /var/www/sarg/monthly \
-d $MONTHAGO-$YESTERDAY &>/dev/null
exit 0

Tạo chỉ số index:
#sarg -ix
Chạy lần đầu:
#/usr/bin/sarg
#/etc/cron.daily/sarg
#/etc/cron.weekly/sarg
#/etc/cron.monthly/sarg

2. Cấu hình Crontab:
Trong file /etc/crontab thêm vào những dòng sau
#vi /etc/crontab
1 0 * * * root /etc/cron.daily/sarg
1 1 * * 0 root /etc/cron.weekly/sarg
1 2 1 * * root /etc/cron.monthly/sarg

Note : /etc/init.d/httpd start
Kiểm tra: http://IP_server_proxy/sarg

3. Setup Real Time cho Squid:
SqStat là một đoạn script cho phép xem các kết nối của user đang active qua squid. Nó dùng cachemgr protocol để lấy thông tin từ squid proxy server.
Ta download SqStat từ http://samm.kiev.ua/sqstat/ gói sqstat-1.20.tar.gz.
Yêu cầu hệ thống phải cài squid và php 4.1 trở lên.

Cài đặt SqStat: giải nén gói download về vào trong thư mục /var/www/html/ , đổi tên thư mục sqstat-1.20 thành realtime, vào thư mục realtime đổi tên file config.inc.php.defaults lại thành config.inc.php , sửa lại file config.inc.php với thông số như sau :

/* Squid proxy server ip address or host name */
$squidhost[0]="localhost"; //line 13
/* Squid proxy server port */
$squidport[0]=3128; //đây là port lắng nghe của squid, nếu squid thay đổi phải đổi ở đây

Đổi tên tập tin sqstat.php thành index.php.
Restart httpd.

Vào trình duyệt gõ http://IP_squid/realtime.

Trên trình duyệt chính sẽ có nhưng thông số như sau:

Auto refresh : chỉnh thông số sẽ refresh lại sau thời gian cụ thể nào đó ( đơn vị tính là s ) , mặc định là 0 s
Update : lấy thông số kết nối tại thời điểm hiện tại
Stop : dừng lại


Tham khảo tại:
http://www.shorewall.net/shorewall_setup_guide.htm#Concepts
http://www.squid-cache.org/Doc/config/

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

Đăng nhận xét