Содержание |
В этом примере, сервер имеет адреса 11.22.33.10...11.22.33.14. Юзеры user00...user04 должны "выходить в инет" каждый со своего адреса. Требуется авторизация пользователей. Используется OS FreeBSD 6.x
Устанавливается squid версии 2.7, опции годятся по дефолту. Впрочем, лишнее можно отключить, а нужное включить.
squid.conf
######################################################## # Настройка авторизации юзеров auth_param basic program /usr/local/libexec/squid/basic_ncsa_auth /usr/local/etc/squid/passwd auth_param basic children 2 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 2 hours auth_param basic casesensitive off ######################################################## # Порт, который будет слушать squid http_port 3128 # Не палить клиента forwarded_for off ######################################################## # Стандартные настройки 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 563 5190 2083 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 ################################################# # Соответствие юзеров и айпишников acl user00acl proxy_auth user00 acl user01acl proxy_auth user01 acl user02acl proxy_auth user02 acl user03acl proxy_auth user03 acl user04acl proxy_auth user04 tcp_outgoing_address 11.22.33.11 user01acl tcp_outgoing_address 11.22.33.12 user02acl tcp_outgoing_address 11.22.33.13 user03acl tcp_outgoing_address 11.22.33.14 user04acl # дефолтовый адрес, user00acl и все кто не перечислены выше идут сюда tcp_outgoing_address 11.22.33.10 ################################################# # Разрешающие правила acl allusers proxy_auth REQUIRED http_access allow allusers ################################################# # EOF
Здесь:
Для создания паролей используется команда htpasswd (или htpasswd2 - что есть под руками).
На скорую руку набросал скриптик. Ничего особенного, да и сложность паролей не слишком высока.
#!/bin/bash # # Рисует комплектик файлов для конфигов squid # и сетевого интерфейса # На входе файл со списком айпи-адресов # http://wiki.lblss.ru/%D0%9F%D1%80%D0%BE%D0%BA%D1%81%D0%B8_%D1%81_%D0%BF%D1%80%D0%B8%D0%B2%D1%8F%D0%B7%D0%BA%D0%BE%D0%B9_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_%D0%B8_%D0%B0%D0%B4%D1%80%D0%B5%D1%81%D0%B0 # Префикс имени юзера userpref="user" # Начальное значение суффикса имени юзера usernum=2 # Имя файла с паролями для авторизации passwd="passwd" # Имя файла для конфига squid conf="squid.conf.ins" # Имя файла со списком юзеров и паролей user_pass="user_pass.txt" # Имя файла для вставки в /etc/network/interfaces (Linux) interfaces_linux="interfaces.linux.ins" # Имя файла для вставки в /etc/rc.conf (FreeBSD) interfaces_freebsd="interfaces.freebsd.ins" # Имя файла со списком айпишников iplist="infoboxip" # Шлюз gateway="22.222.222.1" # Маска сети netmask="255.255.255.248" # Имя сетевого адаптера (интерфейса) netiface="eth0" # Начальный номер алиаса адаптера numalias=4 ############################################## rm -f ${conf} ${user_pass} ${passwd} ${interfaces_linux} ${interfaces_freebsd} sleep 1 touch ${conf} touch ${user_pass} touch ${passwd} touch ${interfaces_linux} touch ${interfaces_freebsd} firstloop="1" cat ${iplist} | while read ip do # Формирование реквизитов пользователей user=${userpref}${usernum} pass=`echo "${cuser}${ip}\`date\`" | md5sum | head -c 12` echo ${ip}:${user}:${pass} >>${user_pass} htpasswd2 -b ${passwd} ${user} ${pass} echo "acl ${user}acl proxy_auth ${user}" >>${conf} echo "tcp_outgoing_address ${ip} ${user}acl" >>${conf} ((usernum++)) # Формирование вставки в конфиг /etc/network/interfaces echo "auto ${netiface}:${numalias}" >>${interfaces_linux} echo "iface ${netiface}:${numalias} inet static" >>${interfaces_linux} echo " address ${ip}" >>${interfaces_linux} echo " netmask ${netmask}" >>${interfaces_linux} if test "1" -eq ${firstloop} then echo "# gateway ${gateway}" >>${interfaces_linux} firstloop="0" fi echo >>${interfaces_linux} # Формирование вставки в конфиг /etc/rc.conf echo "ifconfig_${netiface}_alias${numalias}=\"inet ${ip} netmask ${netmask}\"" >>${interfaces_freebsd} ((numalias++)) done