Настройка squid

Итак, нужно настроить прокси сервер. Я выбрал squid. Задача - доступ в интернет по паре логин/пароль, запретить доступ к порно сайтам, запретить рекламу и остальную ерунду мешающую работать в интернете.

Обновляем порты и ставим squid

# cd /usr/ports/www/squid
# make install clean

В окне выбора опций компиляции я оставил следующие галочки:

  • SQUID_CARP - включить протокол squid CARP
  • SQUID_SSL - разрешить защищенные соединения через squid
  • SQUID_WCCP - включить протокол WCCP
  • SQUID_IDENT - разрешить запросы ident (RFC 931)
  • SQUID_ARP_ACL - разрешить использовать в ACL MAC адреса
  • SQUID_PF - разрешить прозрачное проксирование через PF
  • SQUID_AUFS - включить хранилище aufs
  • SQUID_KQUEUE - использовать системный вызов kqueue для работы с сокетами
  • SQUID_LARGEFILE - поддержка больших размеров лог файлов

На счет хранилища aufs - похоже на ufs, только не блокируется главный процесс при работе с дисками, что ускоряет работу.

После установки правим конфигурационный файл /usr/local/etc/squid/squid.conf. У меня получился такой:

# Настраиваем авторизацию пользователей
# Информация о пользователях для авторизации будет браться из файла
auth_param basic program /usr/local/libexec/squid/ncsa_auth /usr/local/etc/squid/squid.passwd
# Количество процессов авторизации
auth_param basic children 1
# Приглашение выводимое в браузере
auth_param basic realm Proxy-caching web server on srv-home
# Как долго сохранять результат удачной попытки авторизации
auth_param basic credentialsttl 2 hours
# Учитывать регистр вводимых данных
auth_param basic casesensitive off

# Настройка acl

acl manager proto cache_object
acl QUERY urlpath_regex cgi-bin \?
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8

acl all src all
#acl localnet src 10.0.0.0/8              # RFC1918
#acl localnet src 172.16.0.0/12         # RFC1918
#acl localnet src 192.168.0.0/16         # RFC1918
acl all_net src 192.168.7.0/24
#acl localnet src 192.168.7.71-192.168.7.100
acl mac_komp arp 00:1E:8C:E3:B7:36
acl mac_asus_wifi arp 00:15:AF:A4:F5:2E
acl mac_asus_eth arp 00:1F:C6:E9:13:9E

# Локальные ресурсы
acl local_domain dstdomain .home.ru
acl no_cache_dlink dst 192.168.7.252
acl no_cache_acorp dst 192.168.1.1

# Порты, к которым можно обращаться через squid
acl SSL_ports port 443 5190 5222 5999
acl Safe_ports port 80          # http
acl Safe_ports port 8080        # 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 3128        # squid
#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 5190        # icq
acl Safe_ports port 5222        # xmpp
acl Safe_ports port 5999        # cvs
acl Safe_ports port 7777        # fora
acl CONNECT method CONNECT

acl users proxy_auth REQUIRED

# Сайты, к которым запрещен доступ
# Формат файлов очень прост, каждый домен должен быть в новой строке,
# точка в начале имени домена означает - включая все поддомены.
acl porn_sites dstdomain "/usr/local/squid/blacklist/porn"
acl adv_sites dstdomain "/usr/local/squid/blacklist/adv"

# Собственно правила доступа. Проход останавливается
# на первом совпавшем правиле.
http_access allow manager localhost
http_access deny manager
http_access deny porn_sites
http_access deny adv_sites
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny to_localhost
http_access allow all_net local_domain
http_access allow mac_komp
http_access allow mac_asus_wifi
http_access allow mac_asus_eth
#http_access allow localnet
http_access allow users
http_access deny all

# Запрещаем кэширование локальных ресурсов
cache deny local_domain
cache deny no_cache_dlink
cache deny no_cache_acorp
cache deny QUERY

# Вешаем сквид на порт 3128 и определенный ip.
# И указываем ему, что он так же будет работать прозрачно.
http_port 192.168.7.250:3128 transparent

# Не кэшировать результаты работы скриптов
hierarchy_stoplist cgi-bin ?

# Говорит сквиду, сколько ему можно слопать памяти для внутренних объектов
cache_mem 256 MB
# Максимальный размер объекта в памяти
maximum_object_size_in_memory 512 KB

# Параметры директории, где будет храниться кэш
cache_dir aufs /varl/squid/cache 5120 16 256

# Пути к лог файлам
access_log /var/squid/logs/access.log squid
cache_log /var/squid/logs/cache.log
cache_store_log /var/squid/logs/store.log

# Параметры кеширования
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern (cgi-bin|\?)    0       0%      0
refresh_pattern .               0       20%     4320

# Время кеширования удачных и неудачных ответов от DNS сервера
positive_dns_ttl 2 minute
negative_dns_ttl 30 second

# ICP порт. 0 - вырубить протокол icp
icp_port 0

# Не обновлять запросы HTTP к ShoutCast до актуальной версии
# протокола HTTP.
acl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]
upgrade_http0.9 deny shoutcast

# Модули Apache - mod_gzip и mod_deflate иногда могут генерить кривые заголовки,
# поэтому не стоит доверять апачу, а именно что заголовок ETag выставлен
# правильно.
# P.S. взято из конфига-примера, оттуда же объяснение.
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache

# Отображаемое имя хоста на страницах об ошибках
#visible_hostname "srv-home.local"
# Адрес админа, так же отображаетя на страницах об ошибках
cache_mgr admin@srv-home.local
# Шаблоны страниц ошибок
error_directory /usr/local/etc/squid/errors/Russian-1251
# Группа и пользователь, под которыми работает squid
cache_effective_user squid
cache_effective_group squid
# Разрешить сквиду оставлять себе память (если сейчас она не нужна)
# для дальнейшего использования. Выключите, если памяти на вашей
# машине мало и она может понадобится для других целей.
memory_pools on
# Максимальный размер удерживаемого пула. Пулы, превышающие
# указанный здесь размер будут освобождены.
memory_pools_limit 1 MB

Теперь, когда конфиг готов нужно инициализировать кэш:

# squid -z

Ставим squid в автозагрузку и запускаем:

# echo 'squid_enable="YES"' >> /etc/rc.conf
# /usr/local/etc/rc.d/squid start

Проверяем работу процесса:

# sockstat | grep squid

Должно вывести примерно следующее:

squid    ncsa_auth  68011 0  stream -> ??
squid    ncsa_auth  68011 1  stream -> ??
squid    squid      50223 3  dgram  -> /var/run/log
squid    squid      50223 8  udp4   *:55454               *:*
squid    squid      50223 10 stream -> ??
squid    squid      50223 14 tcp4   192.168.7.250:3128    *:*
squid    squid      50223 16 udp4   *:3130                *:*

Ну вот, как видно все работает. Пользуемся :)

ttys
создать файл пароля можно так:
htpasswd -c /usr/local/etc/squid/squid.passwd user1
а добавление юзеров происходит с флагом "-b"
htpasswd -b /usr/local/etc/squid/squid.passwd user2 123456 (пароль мона вводить сразу)

nekit

создать файл пароля можно так:

htpasswd -c /usr/local/etc/squid/squid.passwd user1

а добавление юзеров происходит с флагом "-b"

htpasswd -b /usr/local/etc/squid/squid.passwd user2 123456 (пароль мона вводить сразу)

Кстати, данная тулза ставится вместе с Apache,ем.

Гость (не проверено)

Здравствуйте есть сервер на нем настроен прокси сервер всё работает замечательно но надо чтобы один компьютер не был привязан к прокси и выходил в интернет без него ( IP  у компа статический )

nekit

Для этого компьютера настроить NAT через фаервол и естественно убрать на том компе настройки прокси.
Если проксирование прозрачное, то в фаере правила NAT для этого компа поместить раньше правила, заворачивающего траффик на проксю.

JUNKMAN

А какое правило в IPFW заворачивает весь траффик на проксю? И кстати если сквид будет работать прозрачно не поимеем ли мы гемора с HTTPS ?

nekit

какое правило в IPFW заворачивает весь траффик на проксю?

Примерно такое:
ipfw add 1234 fwd PROXY_IP,PROXY_PORT tcp from 192.168.0.0./24 to any 80 out via EXT_IF
и сквид надо собирать из портов с поддержкой IPFW.

И кстати если сквид будет работать прозрачно не поимеем ли мы гемора с HTTPS?

Не поимеем, поскольку правило в IPFW можно создать конкретно для HTTP (пример выше). Хотя я слышал/читал где-то, что можно и HTTPS завернуть прозрачно, но я это не проверял.

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
Яндекс.Метрика