среда, 21 июля 2010 г.

Proxy server on DEBIAN 5.0

Задача сервера: обеспечить безопасность внутренней сети от угроз из интернета и предоставить доступ сотрудникам до сети интернета, с введенными правилами ограничений.
Операционная система: Linux Debian 5.0

Установленное программное обеспечение:
- прокси сервер SQUID 3.0,
- SARG для генерации отчетов по использованию интернета сотрудниками отеля,
- web-сервер apache2.0 для просмотра отчетов через web браузер,
- файрволл iptables fw-script для обеспечения безопасности внутренней сети отеля из глобальной сети интернет.

Сотрудники разбиты на 3 группы:
1. Группа администраторов, нет ограничений.
2. Группа сотрудников с ограниченным доступом до интернета.
3. Группа с доступом только на разрешенные сайты.
Все остальные сотрудники не имеют доступ в интернет через сервер.

Ограничения для 2-й группы:
- запрет на доступ следующих ресурсов:
.fishki.net
.odnoklasniki.ru
.vkontakte.ru
.youtube.ru
.youtube.com
.depositfiles.com
.vip-file.com
- запрет на заход интернет порталов, где в доменном имени присутствуют: sex, porno, love.
- запрет на заход интернет порталов находящихся в домене net, tv, т.к. в этих доменах в основном находятся развлекательные ресурсы.
- запрет на скачивание видео и музыки следующих форматов: .mp3, .acf, .wma, .avi, .mpeg, .mpeg4, .wmv, .flv, .asf.

3-я группа может заходить на следующие сайты:
.yandex.ru
.rambler.ru
.rbc.ru

Решение:
настраиваем сетевые интерфейсы
# The loopback network interface
auto lo
iface lo inet loopback

# Внешний сетевой интерфейс
allow-hotplug eth0
iface eth0 inet static
address x.x.x.x
netmask 255.255.255.252
gateway x.x.x.
#Запуск скрипта firewall на внешнем интерфейсе
pre-up /etc/init.d/fw-script start

# внутренний интерфейс
allow-hotplug eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0

создаем скрипт fw-script и кладем его /etc/init.d
#! /bin/sh

my_init() {
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -F
iptables -t nat -F
iptables -X
echo 1 > /proc/sys/net/ipv4/ip_forward
}
my_access() {
#################################################
echo "Create filter rules..."
echo "Create local rules..."
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP

iptables -A OUTPUT -o eth1 -j ACCEPT
iptables -A INPUT -i eth1 -j ACCEPT
echo "Allow output tcp traffic..."
iptables -A OUTPUT -o eth0 -j ACCEPT

#forward packets
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

echo "Allow input ssh trafic on port 22..."
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
echo "Create input-output icmp traffic..."
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -o eth0 -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT


echo "Allow input traffic... rinetd is allow forwarding!!!!! not iptables!"

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 3389 -j ACCEPT

echo #allow traffic on squid#
iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-port 3128

echo "Create main rules..."
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A OUTPUT -o eth0 -j ACCEPT

iptables -A INPUT -i eth0 -p UDP --dport 1194 -j ACCEPT

#NAT
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source X.X.X.240 #Внешний ip

}
case "$1" in
start|restart|reload)
echo -n "Starting Firewall configuration by VITAL "
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
my_init
#GO
# my_traf
my_access
# rc_status -v
;;
stop)
echo -n "Shutting down Firewall "
iptables -F
iptables -t nat -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
rc_status -v
;;
status)
echo "Current Firewall-rules "
echo "Current iptables rules in the filter table:"
echo "-------------------------------------------"
iptables -v -L -n
echo " "
echo "Current iptables rules in the nat table:"
echo "-------------------------------------------"
iptables -v -n -t nat -L
# rc_status -v
;;
*)
echo "Usage: $0 (start|restart|reload|status)"
exit 1
;;
esac
#rc_exit

Для проброса портов во внутрь сети устанавливаем rinetd
apt-get install rinetd
В rinetd.conf прописываем от куда и куда проброс во внутрь сети
X.X.X.240 3389 192.168.1.11 3389

Устанавливаем squid
apt-get install squid3

Редактируем squid.conf
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

#acl office src 192.168.1.0/24
# Admins full internet
acl admin_users src "/etc/squid3/adminusers"
# Allow Users Inet in Office with restrict sait
acl inet_users src "/etc/squid3/internetusers"
# Restrict Inet for Users
acl inet_restrict src "/etc/squid3/restrictusers"
acl sait_restrict dstdomain src "/etc/squid3/restrictsait"
# Deny inet users
acl deny_inet src "/etc/squid3/denyusers"

#Запрет на домены
acl deny_domain dstdomain "/etc/squid3/denydomain"
#Запрет вход в домены содержащие в домене след-е слова
acl adult dstdom_regex sex porno love
#Запрет заход на домены
acl regexdomain dstdom_regex \.net$ \.tv$
#Files for deny: video and sound
acl media urlpath_regex -i .mp3$ .acf$ .wma$ .avi$ .mpeg$ .mpeg4$ .wmv$ .flv$ .asf$

acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports

#Allow Inet for admin grups
http_access allow admin_users

# deny domain
http_access deny inet_users deny_domain
http_access deny inet_users adult
http_access deny inet_users regexdomain
http_access deny inet_users media
http_access allow inet_users

#Deny inet users
http_access deny deny_inet

#reeption
http_access allow inet_restrict sait_restrict
http_access deny inet_restrict

#http_access deny adult
#http_access deny regexdomain
#http_access deny deny_domain
#http_access allow office

http_access allow localhost
http_access deny all
icp_access deny all
htcp_access deny all
http_port 3128 transparent
hierarchy_stoplist cgi-bin ?
access_log /var/log/squid3/access.log squid
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
icp_port 3130
coredump_dir /var/spool/squid3

Создаем файлы командой touch
adminusers, denyusers и другие, в них через интер вводим нужные ip

Создаем denydomain
и вносим домены, куда доступ запрещен
.fishki.net
.odnoklasniki.ru
.vkontakte.ru
.youtube.ru
.youtube.com
.depositfiles.com
.vip-file.com

Создаем restrictsait
.yandex.ru
.rambler.ru
.rbc.ru

Все остальные настройки делаем по аналогии.

Сервер готов к работе!