пятница, 7 марта 2008 г.

Роутер на Debian + SQUID + STC (учет трафика, управление интернет аккаунтами)

На кануне восьмого марта и в ожидании всеобщей пьянки на работе - решил что б скоротать время описать процес установки и конфигурирования сабж. Приступим.
1. Ставим базовую систему Debian 4.0r3 c DVD диска. Установка стандартная.
2. После установки и настройки сетевых интерфейсов обновлеям систему и устанвливаем ssh-sever, вернее open-ssh:
#apt-get update
#apt-get upgrade
#apt-get dist-upgrade
#apt-get install ssh (не знаю почему его не включают в базовый состав установки).

А также squidguard, sarg, libpcap (apache я думаю у вас уже установлен)
#apt-get install squidguard sarg libpcap-dev

Модули для apache

Apache-Htpasswd-1.5.5 -> #apt-get install libapache-htpasswd-perl
NetPacket качаем с cpan.org
Net-PcapUtils -> #apt-get install libnet-pcap-perl
Net-RawIP -> #apt-get install libnet-rawip-perl
Hijack_stc (см. stc-2.*/_modules/hijack_stc/

Собираем NetPacket
#perl Makefile.PL && make && make test && make install (Если при сборке каких-то модулей не хватает качаем с cpan.org и доставляем)
Качаем stc c http://stc.nixdev.org/
Собираем Hijack_stc (см. stc-2.*/_modules/hijack_stc/)
#perl Makefile.PL && make && make install

Далее редактируем squid.conf
По официальной документации должны быть строки:
logfile_rotate 5
emulate_httpd_log off
auth_param basic program /usr/local/libexec/ncsa_auth $stc_path/password
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
redirect_program /usr/local/bin/squidGuard
redirect_children 5
redirector_bypass on
acl trusted_users src "$stc_path/trusted_users"
acl all_users proxy_auth REQUIRED
http_access allow trusted_users
http_access allow all_users
http_access deny all

У меня рабочий конфиг для squid 2.6.x

http_port 3128
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
access_log /var/log/squid/access.log squid
emulate_httpd_log off
hosts_file /etc/hosts
url_rewrite_program /usr/bin/squidGuard
url_rewrite_children 5
auth_param basic program /usr/lib/squid/ncsa_auth /usr/local/stc/etc/password
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 # https
acl SSL_ports port 563 # snews
acl SSL_ports port 873 # rsync
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 Safe_ports port 631 # cups
acl Safe_ports port 873 # rsync
acl Safe_ports port 901 # SWAT
acl trusted_users src "/usr/local/stc/etc/trusted_users"
acl all_users proxy_auth REQUIRED
acl purge method PURGE
acl CONNECT method CONNECT
acl squid_block_badlang url_regex -i "/etc/squid/squidblock/badlang.block.txt"
acl squid_unblock_badlang url_regex -i "/etc/squid/squidblock/badlang.unblock.txt"
acl squid_block_entertain url_regex -i "/etc/squid/squidblock/entertain.block.txt"
acl squid_unblock_entertain url_regex -i "/etc/squid/squidblock/entertain.unblock.txt"
acl squid_block_games url_regex -i "/etc/squid/squidblock/games.block.txt"
acl squid_unblock_games url_regex -i "/etc/squid/squidblock/games.unblock.txt"
acl squid_block_pirate url_regex -i "/etc/squid/squidblock/pirate.block.txt"
acl squid_block_mp3 url_regex -i "/etc/squid/squidblock/mp3.block.txt"
acl squid_unblock_pirate url_regex -i "/etc/squid/squidblock/pirate.unblock.txt"
acl squid_block_porn url_regex -i "/etc/squid/squidblock/porn.block.txt"
acl squid_unblock_porn url_regex -i "/etc/squid/squidblock/porn.unblock.txt"
acl user_b src 192.168.6.0/24
acl mail_b url_regex -i mail.ru
http_access deny squid_block_badlang !squid_unblock_badlang
http_access deny squid_block_entertain !squid_unblock_entertain
http_access deny squid_block_games !squid_unblock_games
http_access deny squid_block_pirate !squid_unblock_pirate
http_access deny squid_block_mp3
http_access deny squid_block_porn !squid_unblock_porn
http_access allow trusted_users
http_access allow all_users
http_access deny all
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access allow all
cache_effective_group proxy
visible_hostname gw-deb.resta-m.ru
logfile_rotate 5
coredump_dir /var/spool/squid
redirector_bypass on

Далее конфигурируем squidguard
В файле $stc_path/squidGuard.conf должны быть следующие строки:
ВНИМАНИЕ: этот конфиг генерируется автоматически скриптом install, вам лишь необходимо убедится в правельности путей и существовании у вас необходимых баз данных (blacklist)
src trusted_users {
iplist @stc_path@/trusted_users
}

src good_users {
userlist @stc_path@/allow.users
}

src bad_users {
userlist @stc_path@/deny.users
}

src blocked_users {
userlist /usr/local/etc/squid/blocked.users
}

dest local_site {
urllist @stc_path@/local.urls
}

acl {
trusted_users {
pass any
}

good_users {
pass !porn !proxy any
redirect http://@site_ip@/stat/messages/deny.cgi
}

bad_users {
pass local_site none
redirect http://@site_ip@/stat/messages/limit.cgi
}

blocked_users {
pass none
redirect http://172.16.191.1/stat/messages/blocked.cgi
}

default {
pass local_site none
redirect http://@site_ip@/stat/messages/unknown.cgi
}
}


Конфигурация apache2.x
/etc/apache2/conf.d/stc.conf

Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Allow from all


ScriptAlias /stat/cgi/ "/var/www/stat/statist/"

AllowOverride None
Options ExecCGI
AuthType Basic
AuthName "Statistic"
AuthUserFile /usr/local/stc/etc/password
Require valid-user
Order allow,deny
Allow from all

ScriptAlias /stat/messages/ "/var/www/stat/messages/"

AllowOverride None
Options ExecCGI
Order allow,deny
Allow from all


Не забываем добавить пользователя и группу stc
Редактируем под свои нужды stc_src/install.conf
и запускаем:
./install

Перезапускаем апач\сквид и если у вас везде правильно указаны пользоатели и права:
http://your_host/stat

Все должно работать! Пользователь dummy, пароль dummypass

2 комментария:

Анонимный комментирует...

aptitude install dh-make-perl
dh-make-perl --build --cpan NetPacket

Unknown комментирует...

dh_gencontrol
dpkg-gencontrol: предупреждение: неизвестная подстановочная переменная ${misc:Depends}
dh_md5sums
dh_builddeb
dpkg-deb: сборка пакета libnetpacket-perl в файл ../libnetpacket-perl_0.41.1-1_all.deb.
make: Leaving directory `/etc/squid/NetPacket-0.41.1'
Done
stc:/etc/squid#