Итак, нужно настроить прокси сервер. Я выбрал 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 *:*
Ну вот, как видно все работает. Пользуемся :)
Обсуждение статьи
пн, 16/04/2012 - 03:21
пн, 16/04/2012 - 15:31
Кстати, данная тулза ставится вместе с Apache,ем.
сб, 23/06/2012 - 14:39
Здравствуйте есть сервер на нем настроен прокси сервер всё работает замечательно но надо чтобы один компьютер не был привязан к прокси и выходил в интернет без него ( IP у компа статический )
вс, 24/06/2012 - 12:14
Для этого компьютера настроить NAT через фаервол и естественно убрать на том компе настройки прокси.
Если проксирование прозрачное, то в фаере правила NAT для этого компа поместить раньше правила, заворачивающего траффик на проксю.
вт, 10/09/2013 - 01:20
А какое правило в IPFW заворачивает весь траффик на проксю? И кстати если сквид будет работать прозрачно не поимеем ли мы гемора с HTTPS ?
вт, 10/09/2013 - 18:50
Примерно такое:
ipfw add 1234 fwd PROXY_IP,PROXY_PORT tcp from 192.168.0.0./24 to any 80 out via EXT_IF
и сквид надо собирать из портов с поддержкой IPFW.
Не поимеем, поскольку правило в IPFW можно создать конкретно для HTTP (пример выше). Хотя я слышал/читал где-то, что можно и HTTPS завернуть прозрачно, но я это не проверял.
Добавить комментарий