понедельник, 20 августа 2012 г.

Установка SQUID

Предисловие.

В данной статье рассматривается установка прокси-сервера в расчете на 50 пользователей. Прокси-сервер будет развернут на обычном компьютере Core 2 Duo CPU, 2G RAM, 80G HDD. В качестве прокси-сервера выбран SQUID с авторизацией доменных пользователей. Для статистики и управления будем использовать SAMS. Для проверки трафика - антивирус Kaspersky Proxy Server.

Установка операционной системы.

В качестве операционной системы будем использовать FreeBSD 9.0 (последний релиз на время написания статьи). Установка описана в статье "Инсталляция FreeBSD 9.0".
Рекомендации при ручном создании разделов:

  • swap - 2G (равный объему RAM); 
  • раздел "/" - 1G;
  • раздел "/tmp" - 1G;
  • раздел  "/usr" - 6G;
  • раздел  "/var/log" - 2G;
  • раздел  "/var" - остальное (базы данных mysql и kaspersky находятся в этом разделе).



Начальные установки FreeBSD 9.0.


Начальные установки FreeBSD 9.0 описаны в статье "Начальные установки FreeBSD 9.0"


Начальная настройка сетевого экрана.

Проводим перекомпиляцию ядра с целью включения поддержки сетевого экрана IPFW и производим начальную настройку. Это описано в статье "Настройка IPFW".

Начальные установки FreeBSD 9.0 описаны в статье "Начальные установки FreeBSD 9.0"


Установка MySQL.

Установка MySQL описана в статье "Установка MySQL 5.5".

Установка WEB-сервера.

Установка WEB-сервера "Apache" c поддержкой MySQL и PHP5 описана в статье "Установка web-сервера Apache с поддержкой MySQL, PHP5". При использования в дальнейшем SAMS, необходимо при инсталляции пакета "php53-extentions" включить поддержку GB (используется для рисования графиков), LDAP, MYSQL, OPENSSL, PDF.
Настройка безопасного подключения к WEB-серверу, описана в статье "Настройка Apache с поддержкой SSL".
Настройка подключения к WEB-серверу с использованием авторизации (имя пользователя/пароль) описана в статье "Подключение к web-серверу Apache с авторизацией".

Установка SAMBA.

Инсталляция SAMBA.
          cd /usr/ports/net/samba36
          make config


          make install clean
          rehash

Некоторые настройки описаны здесь.

          mcedit /usr/local/etc/smb.conf
                    workgroup = NET
                    server string = PROXY Server
                    security = ADS
                    load printer = no
                    password server = pdc.net.domain
                    realm = NET.DOMAIN
                    display charset = koi8-r
                    unix charset = koi8-r
                    dos charset = cp866
                    winbind separator = +
                    winbind use default domain = yes
                    idmap uid = 10000-20000
                    idmap gid = 10000-20000
                    winbind enum users = yes
                    winbind enum groups = yes
                    encrypt passwords = yes


Делаем резервную копию конфигурационного файла.
          cp /usr/src/crypto/heimdal/krb5.conf /usr/src/crypto/heimdal/krb5.conf.sample

Настраиваем конфигурационный файл Kerberos.
          mcedit /usr/src/crypto/heimdal/krb5.conf


где 172.20.40.10 - наш контроллер домена.

Настраиваем конфигурационный файл коммутатора службы имен.
          mcedit /etc/nsswitch.conf
                    group: files winbind
                    passwd: files winbind

На контроллере домена создаем пользователя squiduser с правами администратора домена (пароль - "SQUIDUSERpassword2".

Получаем билет.
          kinit -p squiduser
Вводим пароль пользователя squid -  "SQUIDUSERpassword2".

Проверяем наличие билета.
          klist

Подключаемся к домену.
          net ads join -U squiduser
Вводим пароль пользователя squiduser -  "SQUIDUSERpassword2".
Проверяем наличия нашего сервера в домене.

          mcedit /etc/rc.conf
                    samba_enable="YES"
                    winbindd_enable="YES"
*Примечание. Всегда указывал только winbindd_enable="YES", однако при данной установке winbind не хотел запускаться при перезагрузке, выходом стало указание samba_enable="YES" перед winbind.

          /usr/local/etc/rc.d/samba onestart

Проверяем в процессах.
          ps aux | grep smb

Проверяем.
          wbinfo -p
Ping to winbindd succeeded

          wbinfo -t
checking the trust secret for domain NET via RPC calls succeeded

          wbinfo -u
Выводит всех пользователей домена.

Установка SQUID.

Инсталляция прокси-сервера.
          cd /usr/ports/www/squid31
          make config



          make install clean
          rehash

Настройка конфигурационного файла.
          mcedit /usr/local/etc/squid/squid.conf
Настройка авторизации.
                    auth_param ntlm program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of="NET+d-internet-squid"
                    auth_param ntlm children 30
                    auth_param ntlm keep_alive off
                    auth_param basic program /usr/local/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of="NET+d-internet-squid"
                    auth_param basic children 5
                    auth_param basic realm Squid proxy-caching web server
                    auth_param basic credentialsttl 2 hours

                    http_access allow localhost
                    acl NET proxy_auth REQUIRED
                    http_access allow NET

                    http_access deny all


Здесь "NET" - название нашего домена, "d-internet-squid" - группа, присутствие в которой дает право пользоваться прокси-сервером (данная группа создана на контроллере домена). На что следует обратить внимание - в значении параметра -require-membership-of задана запись "NET+d-internet-squid". В этой записи знак "+" - это значение параметра "winbind separator" из конфигурационного файла SAMBA (smb.conf) и задан следующим образом: "winbind separator = +".

Меняем права.
          chown root|squid /var/db/samba/winbindd_privileged

Создаем кэш-директории.
          squid -z

Добавляем в загрузку.
          mcedit /etc/rc.conf
                    squid_enable="YES"

Запускаем.
          /usr/local/etc/rc.d/squid start

Проверяем запущенные процессы.
          ps aux


Установка SAMS.

Инсталляция SAMS.
          cd /usr/ports/www/sams
          make config
Включаем поддержку NTLM.


          make install clean
Во всех зависимых пакетах устанавливаем поддержку NTLM, убираем поддержку IPv6.
rehash

Настраиваем конфигурационный файл SAMS.
          cp /usr/local/etc/sams.conf.sample /usr/local/etc/sams.conf
          mcedit /usr/local/etc/sams.conf
                    MYSQLPASSWORD=SAMSpassword1
                    MYSQLVERSION=5.5
                    SQUIDLOGDIR=/var/log/squid
                    LDAPSERVER=172.20.40.10
                    LDAPBASEDN=net.domain
                    LDAPUSER=squiduser
                    LDAPUSERPASSWD=SQUIDUSERpassword2
                    LDAPUSERSGROUP=Users

Другие настройки будем делать через web-браузер. Для этого настроим web-сервер.
          mcedit /usr/local/etc/apache22/httpd.conf
                    Alias /sams "/usr/local/share/sams/"
                    <Directory "/usr/local/share/sams/">
                    AllowOverride AuthConfig
                    Options Indexes MultiViews
                    Order allow,deny
                    Allow from all
                    </Directory>

Настройка PHP.
          cd /usr/local/etc
Если нет файла php.ini, создаем его.
          cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
          mcedit /usr/local/etc/php.ini
                    safe_mode = On
                    safe_mode_exec_dir = "/usr/local/share/sams/bin"

Проверяем конфигурационный файл Apache.
          apachectl configtest
Если - "Syntax OK", перегружаем Apache.
          apachectl graceful

Для создания баз данных в MySQL 5.5 необходимо произвести замены для инсталляции баз данных. Если не поменять, будут ошибки при создании баз данных MySQL при запуске инсталляции через браузер.

          mcedit /usr/local/share/sams/data/sams_db.sql
Меняем значения "TYPE=MyISAM" на значение "ENGINE=MyISAM".

          mcedit /usr/local/share/sams/data/squid_db.sql
Меняем значения "TYPE=MyISAM" на значение "ENGINE=MyISAM".


Запускаем в браузере - http://squid.net.domain/sams
Нажимаем на "Run SAMS databases installation script".


Вводим пароли root (создавали при инсталляции MySQL) и пароль sams (в файле sams.conf).


Базы успешно созданы.


Добавляем в загрузку
          mcedit /etc/rc.conf
                    sams_enable="YES"

Запускаем.
          /usr/local/etc/rc.d/sams start

Проверяем процессы.
          ps aux | grep sams

Запускаем в браузере - http://squid.net.domain/sams


Нажимаем значок "User" внизу экрана и вводим логин/пароль, по умолчанию - Admin/qwerty.


При нажатии на "WEB interfice setting" ничего не происходит. Подкорректируем некоторые файлы.

          mcedit /usr/local/share/sams/src/configtray.php
и
          mcedit /usr/local/share/sams/src/webconfigtray.php
Закомментируем строки.

                    /*
                    *function GetHostName()
                    *{
                    *  if(!($value=getenv('SERVER_NAME')))
                    *     {  $value="N.A."; }
                    *  return($value);
                    *}
                    */

Нажимаем на "WEB interfice setting".


Не отображается использование памяти и свопа.

В файлах "freemem" и "freeswap" меняем команды "free" на "top".

          mcedit /usr/local/share/sams/bin/freemem
                    #!/bin/sh
                    STR=`top | grep Mem:`
                    echo $STR

          mcedit /usr/local/share/sams/bin/freeswap
                    #!/bin/sh
                    STR=`top | grep Swap:`
                    echo $STR

Обновляем страницу в браузере.



          mcedit /usr/local/share/sams/src/configtray.php

Вместо

$a=explode(" ",$value);
for($i=1;$i<4;$i++)
{
$mem[$i-1]=$a[$i];
}
$a=explode(" ",$swapvalue);
for($i=1;$i<4;$i++)
{
$swap[$i-1]=$a[$i];
}

Вставляем

                    $a=explode(" ",$value);
                    for($i=1;$i<4;$i++)
                    {
                    $mem[0]=$a[1]+$a[3]+$a[5]+$a[11]; //total mem
                    $mem[1]=$a[1]; //Used mem
                    $mem[2]=$a[11]; //Free mem
                    }
                    $a=explode(" ",$swapvalue);
                    for($i=1;$i<4;$i++)
                    {
                    $swap[0]=$a[1]; //total swap
                    $swap[1]=$a[3]; //used swap
                    $swap[2]=$a[5]; //free swap
                    }



Настройка WEB интерфейса. После всех изменений нажимаем "Сохранить изменения".



Администрирование SAMS. Вкладка "SAMS"-"Администрирование SAMS" - нажимаем "настройки SAMS".

Параметры подсчета трафика пользователей.


Настройка авторизации пользователей.


Настройка "samsdaemon". По умолчанию путь к "wbinfo" указан как /usr/bin, необходимо поменять на - /usr/local/bin.



Если все нормально, то во вкладке "Пользователи" нажать "Загрузить всех пользователей домена" и в окне "Найдены пользователи домена:" должны отобразиться все наши пользователи.

Далее под свой лад настраиваем пользователей.

Установка Syslog-NG.

Для Webmin установим syslog-ng. Установка syslog-ng описана в статье "Установка Syslog-NG".

Установка WEBMIN.

Установка Webmin описана в статье "Установка WEBMIN".

Установка антивируса.

Установка антивируса Касперского Proxy Server описана в статье "Установка антивируса на прокси-сервер".

Настройка обработки лог сообщений.

Обработка лог сообщение описана в статье "Настройка Logwatch".

Настройка сетевого экрана.

Базовые настройки сетевого экрана IPFW описаны  в статье "Настройка IPFW". Пример правил IPFW для сервера, на котором установлен прокси-сервер, представлен ниже.

          mcedit /etc/ipfw.rules
                    #!/bin/sh
                    cmd="ipfw -q"
                    $cmd -f flush
                    $cmd add 101 pass all from any to any via lo0
                    $cmd add 201 deny all from any to 127.0.0.0/8
                    $cmd add 301 deny ip from 127.0.0.0/8 to any
                    $cmd add 500 check-state
                    $cmd add 600 deny all from any to any frag
                    $cmd add 610 deny tcp from any to any established
                    $cmd add 620 pass tcp from any to any out setup keep-state
                    $cmd add 630 pass udp from any to any out keep-state
                    $cmd add 640 pass icmp from any to any
                    $cmd add 1000 pass tcp from 172.19.3.0/24 to any 3128 in setup keep-state
                    $cmd add 1010 pass tcp from 172.19.4.0/24 to any 3128 in setup keep-state
                    $cmd add 1020 pass tcp from 172.19.4.0/24 to any 22,443,10000 in setup keep-state
                    $cmd add 65000 deny log all from any to any

правила 1000-1010 описывают сети, которые подключаются к Интернет через прокси-сервер. Правило 1020 описывает сеть, которая имеет доступ к администраторским интерфейсам (SSH, HTTPS (SAMS), Webmin). Правило 65000 запрещает все соединения с логированием.


Проверка.

На компьютере в сети 172.19.4.0/24 в браузере открываем ссылку - https://squid.net.domain/sams, проходим процедуру авторизации и попадаем интерфейс SAMS.




6 комментариев:

  1. добрый день!
    а для чего в данном случае используется SAMS?
    в такой конфигурации нет управления с помощью САМС на сколько я вижу по конфигурации SQUID

    ОтветитьУдалить
  2. Добрый день!

    У меня при установке sams c php5.4 выдает такую ошибку:

    ===> sams-1.0.5_5,1 cannot install: doesn't work with PHP version : 5 (Doesn't support PHP 5).
    *** [install] Error code 1

    Что делать?

    ОтветитьУдалить
    Ответы
    1. Если в FreeBSD ты новичок, то самое главное не мудри. Делай все так, как описал автор. Потом научишься понимать что лишнее, а что нет и пересоберешь сервак так, как тебе нужно. Но на данном этапе просто внимательно читай и повторяй все, что тут описано. Работает на ура практически все. Выставляй правильно все что касается зависимых пакетов. Не ошибайся и будет тебе счастье. Данная статья очень подробная, хотя тут на мой взгляд много лишнего, но все это работает. Проверено на FreeBSD 9.1 amd64. Обязательно обнови порты. Тут есть кое что, что не позволяет нормально аутентифицироваться в домене (возможно это проблема исключительно 9.1), но это мелочи, когда столкнешься, на "лисяре" быстро найдешь решение. Эту тему я поднимал.

      Удалить
  3. Большое упущение автора, что он не написал, что керберос не будет работать, если ты изменишь файл krb5.conf, там где описано в статье, а именно в:
    /usr/src/crypto/heimdal/krb5.conf
    соответственно билет он точно не получит, так как файл конфига должен лежать в /etc/krb5.conf
    поэтому делать нужно следующим образом.. сначала копировать в нужную директорию
    cp /usr/src/crypto/heimdal/krb5.conf /etc/krb5.conf
    затем редактировать так, как описано в статье
    mcedit /etc/krb5.conf
    вот так

    ОтветитьУдалить
  4. ну и samba36 у меня из портов не собралась на 9.1, зато без проблем собралась samba34

    ОтветитьУдалить
    Ответы
    1. У меня тоже не собиралась "Can't fetch". Решил переходом с CVSup/csup на portsnap.
      http://www.freebsd.org/doc/en_US.ISO8859-1/books/handbook/ports-using.html
      # mv /usr/ports /usr/ports.old
      # portsnap fetch extract
      # mv /usr/ports.old/distfiles /usr/ports
      # mv /usr/ports.old/packages /usr/ports
      # rm -rf /usr/ports.old

      Удалить