Поступила задача установить кэширующий прокси
сервер(прозрачный) и кэширующий dns сервер.Решил для этой задачи использовать
сервер Debian lenny.В качестве прокси сервера squid - довольно простой в
настройке и функциональный.Для dns сервера выбрал самый простой - dnsmasq.Ну что
ж,как оно было далее.....
1.Для начала установим squid
apt-get install squid3
apt-get install squid3
2.Собственно сама
настройка squid-а заключается в
файле /etc/squid3/squid.conf
сам файл
конфигурации:
# описываем
сети
acl Net1 src 192.168.0.1
# а тут описываем привилегированных пользователей админов и начальство
acl Admins src 192.168.0.17 192.168.0.2 192.168.0.21 192.168.0.22 192.168.0.3 192.168.0.33 192.168.0.35
acl manager proto cache_object
# описываем локалхост
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
# описываем запрет к отвлекающим от работы сайтам
acl zapret dstdomain .vkontakte.ru .odnoklassniki.ru .my.mail.ru .blogs.mail.ru .horo.mail.ru .news.mail.ru .games.mail.ru .auto.mail.ru .map.mail.ru .rabota.mail.ru .travel.mail.ru .lady.mail.ru .deti.mail.ru .realty.mail.ru .video.mail.ru .cards.mail.ru .pogoda.mail.ru .afisha.mail.ru .mobile.mail.ru .soft.mail.ru .otvet.mail.ru .chat.mail.ru .sowbiz.mail.ru .torg.mail.ru .love.mail.ru .foto.mail.ru .content.mail.ru .odnoklasniki.ru .adobe.com .radio.tut.by .blog.tut.by .i.tut.by .update.icq.com
################# PORTS ##################
# Открываем нужные порты
acl SSL_ports port 443 563
#acl SSL_for_client_banks port 910 8443 4500
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 Jabber_ports port 5222 #jabber
acl Pop_ports port 110 #
acl Smtp_ports port 25 #
acl Icq_ports port 5190 #
acl Net1 src 192.168.0.1
# а тут описываем привилегированных пользователей админов и начальство
acl Admins src 192.168.0.17 192.168.0.2 192.168.0.21 192.168.0.22 192.168.0.3 192.168.0.33 192.168.0.35
acl manager proto cache_object
# описываем локалхост
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
# описываем запрет к отвлекающим от работы сайтам
acl zapret dstdomain .vkontakte.ru .odnoklassniki.ru .my.mail.ru .blogs.mail.ru .horo.mail.ru .news.mail.ru .games.mail.ru .auto.mail.ru .map.mail.ru .rabota.mail.ru .travel.mail.ru .lady.mail.ru .deti.mail.ru .realty.mail.ru .video.mail.ru .cards.mail.ru .pogoda.mail.ru .afisha.mail.ru .mobile.mail.ru .soft.mail.ru .otvet.mail.ru .chat.mail.ru .sowbiz.mail.ru .torg.mail.ru .love.mail.ru .foto.mail.ru .content.mail.ru .odnoklasniki.ru .adobe.com .radio.tut.by .blog.tut.by .i.tut.by .update.icq.com
################# PORTS ##################
# Открываем нужные порты
acl SSL_ports port 443 563
#acl SSL_for_client_banks port 910 8443 4500
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 Jabber_ports port 5222 #jabber
acl Pop_ports port 110 #
acl Smtp_ports port 25 #
acl Icq_ports port 5190 #
# разрешаем
соединение типа CONNECT для нужных протоколов
acl CONNECT method CONNECT
#http_access allow CONNECT Jabber_ports
http_access allow CONNECT Icq_ports
http_access allow CONNECT Pop_ports
http_access allow CONNECT Smtp_ports
acl CONNECT method CONNECT
#http_access allow CONNECT Jabber_ports
http_access allow CONNECT Icq_ports
http_access allow CONNECT Pop_ports
http_access allow CONNECT Smtp_ports
###############
ACCESS CONTROLL############
# назначаем права доступа
# пропускаем sqstat
http_access allow manager localhost
http_access deny manager
# запрещаем доступ к сайтам
http_access deny zapret
# зарубаем все порты кроме safe_ports
http_access deny !Safe_ports
# зарубаем коннект кроме как к SSL
http_access deny CONNECT !SSL_ports
# блокируем IP адреса не имеющие доступа в интернет
http_access deny bn1
# разрешаем инет сетям
http_access allow Net1
icp_access deny all
htcp_access deny all
# админам выделяем всю ширину канала
# выделяем на все подсети максимальный канал (-1), каждому пользователю даем
# скорость максимум в 5 Кб\сек после того, как он скачает на максимальной
# скорости первые 300 Кб файла
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
delay_access 1 allow Admins
delay_access 1 deny all
delay_class 2 2
delay_parameters 2 -1/-1 5000/300000
delay_access 2 allow Net1
delay_access 2 deny all
http_access allow all
############### NETWORK OPTIONS #############
# настройка порта для прокси
http_port 3128 transparent
# назначаем права доступа
# пропускаем sqstat
http_access allow manager localhost
http_access deny manager
# запрещаем доступ к сайтам
http_access deny zapret
# зарубаем все порты кроме safe_ports
http_access deny !Safe_ports
# зарубаем коннект кроме как к SSL
http_access deny CONNECT !SSL_ports
# блокируем IP адреса не имеющие доступа в интернет
http_access deny bn1
# разрешаем инет сетям
http_access allow Net1
icp_access deny all
htcp_access deny all
# админам выделяем всю ширину канала
# выделяем на все подсети максимальный канал (-1), каждому пользователю даем
# скорость максимум в 5 Кб\сек после того, как он скачает на максимальной
# скорости первые 300 Кб файла
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
delay_access 1 allow Admins
delay_access 1 deny all
delay_class 2 2
delay_parameters 2 -1/-1 5000/300000
delay_access 2 allow Net1
delay_access 2 deny all
http_access allow all
############### NETWORK OPTIONS #############
# настройка порта для прокси
http_port 3128 transparent
##### OPTIONS WHICH
AFFECT THE NEIGHBOR SELECTION ALGORITHM #####
# pfghtoftv r'ibhjdfnm CGI-скрипты
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
# pfghtoftv r'ibhjdfnm CGI-скрипты
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
########### MEMORY
CACHE OPTIONS ###########
# размер ОЗУ под кэш (по default 8 Мв)
cache_mem 32 MB
# размер ОЗУ под кэш (по default 8 Мв)
cache_mem 32 MB
# ############ DISK
CACHE OPTIONS ###############
# Max размер объекта записываемого в кэш
maximum_object_size 16384 KB
# Место кэша и размер 50 Гб 16 директорий 1-го уровня 256 2-го
cache_dir ufs /var/spool/squid3/cache 50000 16 256
# Адрес пользователя ответственного за очистку переполненого кэша
#cache_mgr root@test.ru
# Пользователь от имени какого работает Squid
cache_effective_user proxy
# Разрешаем управлять кэшем с помощью cachemgr.cgi с паролем "passwd"
#cachemgr_passwd passwd all
# Max размер объекта записываемого в кэш
maximum_object_size 16384 KB
# Место кэша и размер 50 Гб 16 директорий 1-го уровня 256 2-го
cache_dir ufs /var/spool/squid3/cache 50000 16 256
# Адрес пользователя ответственного за очистку переполненого кэша
#cache_mgr root@test.ru
# Пользователь от имени какого работает Squid
cache_effective_user proxy
# Разрешаем управлять кэшем с помощью cachemgr.cgi с паролем "passwd"
#cachemgr_passwd passwd all
################
LOGFILE OPTIONS ####################
# Лог доступа к кэшу
cache_access_log /var/logs/squid3/access.log
# Лог работы кэша
cache_log /var/logs/squid3/cache.log
# Лог работы менеджера кэша
cache_store_log none
# Ротация логов
logfile_rotate 10
# Лог доступа к кэшу
cache_access_log /var/logs/squid3/access.log
# Лог работы кэша
cache_log /var/logs/squid3/cache.log
# Лог работы менеджера кэша
cache_store_log none
# Ротация логов
logfile_rotate 10
#mime_table
/etc/squid3/mime.conf
#pid_filename /var/run/squid3.pid
#pid_filename /var/run/squid3.pid
########## OPTIONS
FOR FTP GATEWAYING ##############
# Под этим юзером ходим в Ftp
#ftp_user vasa@pupkin.ru
# Разрешаем пассивный режим работы FTP
ftp_passive on
# Под этим юзером ходим в Ftp
#ftp_user vasa@pupkin.ru
# Разрешаем пассивный режим работы FTP
ftp_passive on
ftp_sanitycheck
on
ftp_list_width 32
ftp_list_width 32
########## OPTIONS
FOR URL REWRITING ##################
# Путь до редиректора
#redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
# Кол-во одновременных запусков редиректов
#redirect_children 5
# Путь до редиректора
#redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
# Кол-во одновременных запусков редиректов
#redirect_children 5
########### OPTIONS
FOR TUNING THE CACHE ##############
# Оставляем как есть
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
# Оставляем как есть
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
############ ERROR
PAGE OPTIONS ###############
# Отсюда берем файлы стандартных сообщений об ошибках
error_directory /usr/share/squid3/errors/Russian-koi8-r
# Если Squid уже скачал 60% файла, а пользователь отказался его забирать, то все равно продолжить скачивание
quick_abort_pct 60
# Время жизни запросов завершившихся ошибкой "connection refused" "404 Not Found"
# Отсюда берем файлы стандартных сообщений об ошибках
error_directory /usr/share/squid3/errors/Russian-koi8-r
# Если Squid уже скачал 60% файла, а пользователь отказался его забирать, то все равно продолжить скачивание
quick_abort_pct 60
# Время жизни запросов завершившихся ошибкой "connection refused" "404 Not Found"
negative_ttl 1
minutes
# Включить отправку сообщений об ошибках
#email_err_data on
# кому писать
#<А hrеf="mаilto:%w%W" mcе_hrеf="mаilto:%w%W">%w
# Включить отправку сообщений об ошибках
#email_err_data on
# кому писать
#<А hrеf="mаilto:%w%W" mcе_hrеf="mаilto:%w%W">%w
#################
DNS OPTIONS ###################
dns_testnames server.ex
# Путь к файлу hosts
hosts_file /etc/hosts
# Время жизни успешного DNS запроса.
positive_dns_ttl 6 hours
# Время жизни DNS запроса с ошибкой
negative_dns_ttl 5 minutes
dns_testnames server.ex
# Путь к файлу hosts
hosts_file /etc/hosts
# Время жизни успешного DNS запроса.
positive_dns_ttl 6 hours
# Время жизни DNS запроса с ошибкой
negative_dns_ttl 5 minutes
##############
MISCELLANEOUS ######################
# Место откуда берутся страницы с ошибками, сюда же кладем и свои
coredump_dir /var/spool/squid3
# Поддержка нестандартных Http запросов
half_closed_clients on
# Включать ли IP адрес клиента в заголовок Http запроса
forwarded_for on
# Вкл. сбор статистики по каждому клиенту
client_db on
# Место откуда берутся страницы с ошибками, сюда же кладем и свои
coredump_dir /var/spool/squid3
# Поддержка нестандартных Http запросов
half_closed_clients on
# Включать ли IP адрес клиента в заголовок Http запроса
forwarded_for on
# Вкл. сбор статистики по каждому клиенту
client_db on
3.Далее нам нужно
создать соответствующие директории
mkdir
/var/spool/squid3/cache – тут у меня будет лежать кэш
mkdir /var/log/squid3 — тут у меня будут лежать логи
mkdir /var/log/squid3 — тут у меня будут лежать логи
4.В
директории /var/log/squid3 создаем иерархию директорий для
хранения кэша –/usr/sbin/squid3 -z
5. Запускаем
Squid — /etc/init.d/squid3 start и проверяем лог
—/var/log/squid3/cache.log
6. Создаем правило в
iptables для перенаправления локального трафика с 80 порта на порт Squid'а —
3128:
sudo iptables -t nat
-A PREROUTING -i eth0 -d ! 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j
DNAT --to 192.168.0.1:3128
sudo
-s
iptables-save > /etc/iptables.rules
iptables-save > /etc/iptables.rules
nano
/etc/network/interfaces
добавим
запись
pre-up
iptables-restore < /etc/iptables.rules
Если вы
пользуетесь network-manager и у вас нет описания сетевой карты
в/etc/network/interfaces, то редактируем
файл /etc/rc.local
#nano
/etc/rc.local
и перед строкой exit
0, вставляем строку
iptables-restore
< /etc/iptables.rules
Теперь приступим к
настройке DNS сервера
1.для начала
установим
sudo apt-get install
dnsmasq
2.все настройки лежат в
одном файле /etc/dnsmasq.conf
примерная
конфигурация:
# на каких
интерфейсах будет dns
interface=lo
bind-interfaces
# локальный домен для автоматической подстановки в случае неполного доменного имени
domain=example.net
# сервера локальной сети для домена example.net
server=/example.net/192.168.0.1
server=/0.168.192.in-addr.arpa/192.168.0.1
# логируем запросы в файл /var/log/dnsmasq.log
log-queries
log-facility=/var/log/dnsmasq.log
interface=lo
bind-interfaces
# локальный домен для автоматической подстановки в случае неполного доменного имени
domain=example.net
# сервера локальной сети для домена example.net
server=/example.net/192.168.0.1
server=/0.168.192.in-addr.arpa/192.168.0.1
# логируем запросы в файл /var/log/dnsmasq.log
log-queries
log-facility=/var/log/dnsmasq.log
3.Т.к. dnsmasq
берет адреса из resolv.conf то если dns адреса есть у провайдера то вписываем их
в /etc/resolv.conf
nameserver
8.8.8.8
nameserver
8.8.4.4
4.Запускаем dnsmasq
/etc/init.d/dnsmasq start|stop|restart
(если какие то проблемы
или сбои то смотрим логи /var/log/dnsmasq.log)
Вот в общем то и все.На
этом настройка закончена.Удачного использования.