Немного размытый документ, но работает. При чем выполняю обе ветки, какая из верная я не фиксировал, главное, что работает. SAMS – очень неплохой веб-интерфейс к сквиду хранит логи в MySql, ограничивает пользователей, показывает статистику – одним словом все что нужно для спокойного администрирования прокси. Установку будем выполнять на CentOS 6 (подойдет ли данный документ для CentOS 7 не могу сказать, не проверял). Версия SAMS будет 1.0.5-91.1.x86_64, так как она наиболее стабильная
Устанавливаем необходимые пакеты
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
yum install samba-winbind krb5-workstation cd /usr/src/ wget <a class="external" href="http://www.nixdev.net/release/sams/packages/CentOS_5/x86_64/sams-1.0.5-91.1.x86_64.rpm">http://www.nixdev.net/release/sams/packages/CentOS_5/x86_64/sams-1.0.5-91.1.x86_64.rpm</a> yum install mysql-server php php-gd php-ldap php-mysql squid ntp rpm -Uvh <a class="external" href="http://repo.webtatic.com/yum/centos/5/latest.rpm">http://repo.webtatic.com/yum/centos/5/latest.rpm</a> yum install libmysqlclient15 --enablerepo=webtatic rpm -ivh <a class="external" href="http://repo.webtatic.com/yum/el5/latest.rpm">http://repo.webtatic.com/yum/el5/latest.rpm</a> yum install libmysqlclient15 --enablerepo=webtatic-el5 rpm -ivh sams-1.0.5-91.1.x86_64.rpm |
Добавим все в автозагрузку
1 2 3 4 5 6 7 |
chkconfig squid on chkconfig mysqld on chkconfig httpd on chkconfig sams on chkconfig ntp on |
Настроим ntp для забора времени с контроллера домена. Очень важно, что бы время совпадало
Для этого исправим /etc/ntp.conf и впишем IP адрес или имя контроллера домена
1 2 3 |
server dc.local iburst |
Запустим WEB сервер и базу данных
1 2 3 4 |
/etc/init.d/httpd restart /etc/init.d/mysqld restart |
Инициализируем БД MySQL
1 2 3 4 5 6 7 8 9 10 11 12 |
mysql_secure_installation Enter current password for root (enter for none): # Нажимаем Enter Set root password? [Y/n] Y New password: # Вводим новый пароль Re-enter new password: # Повторяем ввод пароля Remove anonymous users? [Y/n] Y # Удаляем анонимных пользователей Disallow root login remotely? [Y/n] Y # Запрещаем удаленные подключения Remove test database and access to it? [Y/n] # Удаляем тестовую базу данных Reload privilege tables now? [Y/n] # Перезапускаем привилегии Mysql |
Настройка kerberos
Открываем для правки файл /etc/krb5.conf
1 2 3 4 5 6 7 8 9 10 11 12 |
[libdefaults] default_realm = DOMAIN.LOCAL # Имя вашего домена [realms] DOMAIN.LOCAL = { # Имя вашего домена kdc = 192.168.0.254 # Адрес или DNS контроллера домена admin_server = 192.168.0.254 # Адрес или DNS контроллера домена } [domain_realm] .domain.local = DOMAIN.LOCAL domain.local = DOMAIN.LOCAL |
Получаем тикет
1 2 3 4 |
kinit --p administrator Password for <a class="email" href="mailto:administrator@DOMAIN.LOCAL">administrator@DOMAIN.LOCAL</a>: # Вводим пароль администратора домена |
Просматриваем полученный тикет:
1 2 3 4 5 6 7 8 |
klist Ticket cache: FILE:/tmp/krb5cc_0 Default principal: <a class="email" href="mailto:administrator@DOMAIN.LOCAL">administrator@DOMAIN.LOCAL</a> Valid starting Expires Service principal 06/28/10 16:16:20 06/29/10 02:16:37 krbtgt/<a class="email" href="mailto:DOMAIN.LOCAL@DOMAIN.LOCAL">DOMAIN.LOCAL@DOMAIN.LOCAL</a> renew until 06/29/10 16:16:20 |
Настройка winbind
Открываем для редактирования файл /etc/samba/smb.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[global] workgroup = DOMAIN # Имя рабочей группы server string = My Server # Название сервера security = ads password server = 192.168.0.254 # Адрес или DNS контроллера домена realm = DOMAIN.LOCAL # Имя домена dns proxy = no display charset = koi8-r unix charset = koi8-r dos charset = cp866 winbind separator = + winbind use default domain = yes winbind uid = 10000-15000 winbind gid = 10000-15000 winbind enum users = yes winbind enum groups = yes |
Проверяем правильность конфига самбы
1 2 3 4 5 6 7 8 |
testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. 'winbind separator = +' might cause problems with group membership. Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions |
Вводим машину в домен
1 2 3 4 5 6 |
net ads join --U administrator Enter lev's password: # Вводим пароль доменного администратора Using short domain name -- DOMAIN Joined 'SAMS' to realm 'domain.local' |
Зпускаем winbind
1 2 3 4 5 |
chkconfig winbind on service winbind start Starting Winbind services: [ OK ] |
Проверяем работоспособность:
1 2 3 4 5 6 7 |
wbinfo -p Ping to winbindd succeeded wbinfo -t checking the trust secret via RPC calls succeeded |
Настройка Squid
1 2 3 |
yum install squid |
Начиная с 3.0 версии в fedora конфигурационный файл поставляемый вместе с установкой содержит минимум необходимый для работы, а что особенно важно не содержит тагов по которым ориентируется SAMS. Открываем для редактирования файл /etc/squid/squid.conf
Задаем имя которое будет отображаться в отчетах об ошибках. Совершенно бесполезная вещь, но без нее squid не хочет запускаться
1 2 3 |
visual_hostname = squid.domain.com |
Параметры ntlm для аутентификации через браузер
1 2 3 4 5 |
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 50 auth_param ntlm keep_alive on |
Параметры используемые для аутентификации программ не поддерживающих ntlm, например icq или mail-агент. Я предпочитаю не использовать basic, потому что в большинстве организаций пароли пользователей меняются с периодичностью раз в 2 недели, а каждый раз бегать и менять пароль в mail-агентах дело не из легких. На мой взгляд лучше выделить например 3127 порт для свободного доступа.
1 2 3 4 5 |
# http_port 3127 # acl Port_NoNTLM myportname 3127 # http_access allow Port_NoNTLM |
Главный минус такого подхода — SAMS не будет считать и разбивать по пользователям трафик проходящий через порт 3127
1 2 3 4 5 6 |
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic auth_param basic children 5 auth_param basic credentialsttl 2 hours auth_param basic casesensitive off |
. . .
Настраиваем директорию с кешем
По умолчанию она комментирована и имеет следующие параметры
1 2 3 |
cache_dir ufs /var/spoll/squid 100 16 256 |
ufs — тип файловой системы оставляем без изменений
/var/spool/squid — директория кеша
100 — размер кеша в мегабайтах, делать размер слишком большим не рекомендуется
так это увеличит нагрузку при поиске по кешу.
16 — Количество директорий 1-ого уровня
256 — Количество директорий 2-ого уровня
1 2 3 |
cache_dir ufs /var/spool/squid 2048 16 256 |
. . .
Если сделать это неправильно, SAMS не сможет управлять сквидом. В тексте конфига находим фразу «http_access deny all» и выше добавляем два тега полностью сохраняя написание и пробелы.
Даем разрешение на чтение информации из пайпа winbind группе squid
1 2 3 |
chown root:squid /var/lib/samba/winbindd_privileged |
Создаем директории кеша
1 2 3 4 5 6 7 8 9 |
squid -z 2010/06/29 16:59:03| Creating Swap Directories 2010/06/29 16:59:03| Making directories in /var/spool/squid/00 2010/06/29 16:59:03| Making directories in /var/spool/squid/01 . . . . . 2010/06/29 16:59:04| Making directories in /var/spool/squid/0E 2010/06/29 16:59:04| Making directories in /var/spool/squid/0F |
Запускаем сервис
chkconfig squid on
service squid start
Starting squid: [OK]
Настройка SAMS
Редактируем файл /etc/sams.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[client] SQUID_DB=squidlog # Имя базы логов SAMS_DB=squidctrl # Имя базы установок MYSQLHOSTNAME=localhost # Адрес нашего MySql MYSQLUSER=sams # Пользователь БД, по умолчанию sams MYSQLPASSWORD=password # Пароль пользователя БД MYSQLVERSION=5.1 # Версия Mysql-сервера SQUIDCACHEFILE=access.log SQUIDROOTDIR=/etc/squid # Директория с конфигами сквида SQUIDLOGDIR=/var/log/squid # Директория с логами сквида SQUIDCACHEDIR=/var/spool/squid SAMSPATH=/usr/local SQUIDPATH=/usr/sbin #SQUIDGUARDLOGPATH=/var/log #SQUIDGUARDDBPATH=/var/db/squidguard RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout #LDAPSERVER=servername_or_ipadress #LDAPBASEDN=your.domain #LDAPUSER=DomainAdministrator #LDAPUSERPASSWD=passwd #LDAPUSERSGROUP=Users #REJIKPATH=/usr/local/rejik SHUTDOWNCOMMAND=shutdown -h now CACHENUM=0 |
Добавляем sams в автозагрузку, включаем и запускаем сервис:
1 2 3 4 5 |
chkconfig sams on service sams start Starting samsd: [ OK ] |
Переходим по адресу http://адрес.нашего.сревера/sams
Нажимаем на кнопку “Run SAMS database installation script
Вводим:
MySQL password – пароль пользователя root, который мы задавали при установке MysqlServer
SAMS MySQL user password – точно такой же как указан в файле /etc/sams.conf в строке MYSQLPASSWORD
Нажимаем Create Database, если все прошло нормально – увидим следующее окошко.
Прежде чем переходить Веб-админку Самса, нужно исправить ошибку с отсутствующим треем (общая ошибка для Fedora, Red Hat, CentOS), открываем файл /usr/local/share/sams/src/configtray.php, находим и комментируем следующую функцию:
1 2 3 4 5 6 7 8 |
function GetHostName() { if(!($value=getenv('SERVER_NAME'))) { $value="N.A."; } return($value); } |
Перезапускаем apache: По окончанию всех действий необходимо подправить 2 пункта, которых так часто не хватает почти во всех мануалах что находил в поисковиках:
Изменение файлов ./sams/src/webconfigtray.php и ./sams/src/configtray.php, а именно комментирвоание строк
1 2 3 4 5 6 7 8 9 |
/* function GetHostName() { if (!($value=getenv(‘SERVER_NAME’))) { $value=»N.A.»; } return($value); } / |
Проблема с отчетом логов –выводит только максимальный год в морде sams 2009, исправляем:
Открываем файлик mysqltools.php и вот эти номера строки в 484 560 594 676 709 меняем
1 2 3 |
for($i=2001;$i<2010;$i++) |
на
1 2 3 |
for($i=$year-10;$i<=$year+1;$i++) |
Все наш сервер готов к работе.
Вторая часть, которая. мне кажется, наиболее адекватная
Создание файла авторизации на контроллере домена
1. Добавим пользователя squid
2. CMD и ktpass.exe /princ HTTP/squid.domain.ru@DOMAIN.RU /mapuser squid@DOMAIN.RU /crypto ALL /ptype KRB5_NT_PRINCIPAL /pass PASSWORD /out C:\squid.keytab
3. Дадим ему права на просмотр информации о пользователях
Настройка /etc/init.d/squid
Рабочая конфигурация во вложении
Вносим изменения в стартовы1й скрипт SQUID /etc/init.d/squid, а именно добавляем — KRB5_KTNAME=/etc/squid/squid.keytab export KRB5_KTNAME KRB5RCACHETYPE=none export KRB5RCACHETYPE. Выглядеть это будет следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
cat /etc/init.d/squid #!/bin/bash # chkconfig: - 90 25 # pidfile: /var/run/squid.pid # config: /etc/squid/squid.conf # ### BEGIN INIT INFO # Provides: squid # Short-Description: starting and stopping Squid Internet Object Cache # Description: Squid - Internet Object Cache. Internet object caching is \ # a way to store requested Internet objects (i.e., data available \ # via the HTTP, FTP, and gopher protocols) on a system closer to the \ # requesting site than to the source. Web browsers can then use the \ # local Squid cache as a proxy HTTP server, reducing access time as \ # well as bandwidth consumption. ### END INIT INFO PATH=/usr/bin:/sbin:/bin:/usr/sbin export PATH KRB5_KTNAME=/etc/squid/squid.keytab export KRB5_KTNAME KRB5RCACHETYPE=none export KRB5RCACHETYPE # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network if [ -f /etc/sysconfig/squid ]; then . /etc/sysconfig/squid fi # don't raise an error if the config file is incomplete # set defaults instead: SQUID_OPTS=${SQUID_OPTS:-""} SQUID_PIDFILE_TIMEOUT=${SQUID_PIDFILE_TIMEOUT:-20} SQUID_SHUTDOWN_TIMEOUT=${SQUID_SHUTDOWN_TIMEOUT:-100} SQUID_CONF=${SQUID_CONF:-"/etc/squid/squid.conf"} # determine the name of the squid binary [ -f /usr/sbin/squid ] && SQUID=squid prog="$SQUID" # determine which one is the cache_swap directory CACHE_SWAP=`sed -e 's/#.*//g' $SQUID_CONF | \ grep cache_dir | awk '{ print $3 }'` RETVAL=0 probe() { # Check that networking is up. [ ${NETWORKING} = "no" ] && exit 1 [ `id -u` -ne 0 ] && exit 4 # check if the squid conf file is present [ -f $SQUID_CONF ] || exit 6 } start() { probe parse=`$SQUID -k parse -f $SQUID_CONF 2>&1` RETVAL=$? if [ $RETVAL -ne 0 ]; then echo -n $"Starting $prog: " echo_failure echo echo "$parse" return 1 fi for adir in $CACHE_SWAP; do if [ ! -d $adir/00 ]; then echo -n "init_cache_dir $adir... " $SQUID -z -F -f $SQUID_CONF >> /var/log/squid/squid.out 2>&1 fi done echo -n $"Starting $prog: " $SQUID $SQUID_OPTS -f $SQUID_CONF >> /var/log/squid/squid.out 2>&1 RETVAL=$? if [ $RETVAL -eq 0 ]; then timeout=0; while : ; do [ ! -f /var/run/squid.pid ] || break if [ $timeout -ge $SQUID_PIDFILE_TIMEOUT ]; then RETVAL=1 break fi sleep 1 && echo -n "." timeout=$((timeout+1)) done fi [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$SQUID [ $RETVAL -eq 0 ] && echo_success [ $RETVAL -ne 0 ] && echo_failure echo return $RETVAL } stop() { echo -n $"Stopping $prog: " $SQUID -k check -f $SQUID_CONF >> /var/log/squid/squid.out 2>&1 RETVAL=$? if [ $RETVAL -eq 0 ] ; then $SQUID -k shutdown -f $SQUID_CONF & rm -f /var/lock/subsys/$SQUID timeout=0 while : ; do [ -f /var/run/squid.pid ] || break if [ $timeout -ge $SQUID_SHUTDOWN_TIMEOUT ]; then echo return 1 fi sleep 2 && echo -n "." timeout=$((timeout+2)) done echo_success echo else echo_failure if [ ! -e /var/lock/subsys/$SQUID ]; then RETVAL=0 fi echo fi return $RETVAL } reload() { $SQUID $SQUID_OPTS -k reconfigure -f $SQUID_CONF } restart() { stop start } condrestart() { [ -e /var/lock/subsys/squid ] && restart || : } rhstatus() { status $SQUID && $SQUID -k check -f $SQUID_CONF } case "$1" in start) start ;; stop) stop ;; reload|force-reload) reload ;; restart) restart ;; condrestart|try-restart) condrestart ;; status) rhstatus ;; probe) probe ;; *) echo $"Usage: $0 {start|stop|status|reload|force-reload|restart|try-restart|probe}" exit 2 esac exit $? |
Файл /etc/krb5
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
cat /etc/krb5.conf [logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = CORP.ECOIL.RU dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h renew_lifetime = 7d forwardable = true default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5 [realms] CORP.ECOIL.RU = { kdc = 192.168.1.2 admin_server = DC01.corp.ecoil.ru } [domain_realm] .example.com = CORP.ECOIL.RU example.com = CORP.ECOIL.RU |
Файл smb.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
cat /etc/samba/smb.conf [global] workgroup = CORP server string = Proxy Server security = ads password server = 192.168.1.2 realm = CORP.ECOIL.RU dns proxy = no display charset = koi8-r unix charset = koi8-r dos charset = cp866 winbind separator = @ winbind use default domain = yes winbind uid = 10000-15000 winbind gid = 10000-15000 winbind enum users = yes winbind enum groups = yes |
Файл /etc/squid/squid.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
cat /etc/squid/squid.conf # created by SAMS _sams_ 2014-9-15 10:45:27 # # Recommended minimum configuration: # acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 visible_hostname proxy.corp.ecoil.ru #auth_param negotiate program /usr/lib64/squid/squid_kerb_auth -d -s GSS_C_NO_NAME #auth_param negotiate children 20 #auth_param negotiate keep_alive on auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp auth_param ntlm children 50 auth_param ntlm keep_alive on # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network #acl localnet src fc00::/7 # RFC 4193 local private network range #acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines # TAG: acl acl _sams_541436d3b2374 src "/etc/squid/541436d3b2374.sams" acl _sams_541436d3b2374_time time MTWHFAS 00:00-23:59 acl _sams_default proxy_auth "/etc/squid/default.sams" acl _sams_default_time time MTWHFAS 00:00-23:00 acl _sams_disabled_id proxy_auth "/etc/squid/disabled_id.sams" # TAG: http_access http_access allow _sams_541436d3b2374 _sams_541436d3b2374_time http_access allow _sams_default _sams_default_time http_access deny _sams_disabled_id # And finally deny all other access to this proxy http_access deny all # TAG: delay_class delay_pools 2 delay_class 1 2 delay_class 2 2 delay_access 1 allow _sams_541436d3b2374 delay_access 1 deny all delay_parameters 1 64000/64000 64000/64000 delay_access 2 allow _sams_default delay_access 2 deny all delay_parameters 2 64000/64000 64000/64000 #acl DOMAIN_USERS proxy_auth REQUIRED #http_access allow DOMAIN_USERS #http_access deny all acl SSL_ports port 443 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 # # Recommended minimum Access Permission configuration: # # Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager # Deny requests to certain unsafe ports http_access deny !Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed #http_access allow localnet http_access allow localhost # Squid normally listens to port 3128 http_port 3128 http_port 82 transparent http_port 81 # We recommend you to use at least the following line. hierarchy_stoplist cgi-bin ? # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # Add any of your own refresh_pattern entries above these. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 Ссылки: <a class="external" href="http://www.k-max.name/linux/avtorizaciya-autentifikaciya-squid/#comments">http://www.k-max.name/linux/avtorizaciya-autentifikaciya-squid/#comments</a> <a class="external" href="http://www.k-max.name/category/linux/">http://www.k-max.name/category/linux/</a> <a class="external" href="http://xgu.ru/wiki/Squid,_Kerberos_и_LDAP">http://xgu.ru/wiki/Squid,_Kerberos_и_LDAP</a> |