SQUID для ленивых. Облегчаем себе жизнь

    Добрый день, уважаемые Хабрапользователи, в связи со сложившейся тенденцией к изучению всем известного прокси сервера SQUID, я бы хотел предложить вариант некой типовой настройки небольшой связки, которая будет полезная для начинающих системных администраторов небольших контор, ну или просто для тех, кому лень разбираться. Данная статья ни в коем случае не претендует на глобальный мануал на все случаи жизни — как я уже и сказал это всего лишь обобщенный частный случай.

    Ну, давайте обсудим с чего мы начинаем, у нас есть сервер в моем случае это свежеустановленная Ubuntu Server с выбранными параметрами LAMP и SSH (специально с целью написания статьи):

    root@testgateway:~# uname -a
    Linux testgateway 2.6.32-33-generic-pae #70-Ubuntu SMP Thu Jul 7 22:51:12 UTC 2011 i686 GNU/Linux
    
    root@testgateway:~# lsb_release -a
    Distributor ID:	Ubuntu
    Description:	Ubuntu 10.04.3 LTS
    Release:	10.04
    Codename:	lucid
    
    root@testgateway:~# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sda6             5.5G  723M  4.6G  14% /
    none                  190M  172K  189M   1% /dev
    none                  194M     0  194M   0% /dev/shm
    none                  194M   44K  194M   1% /var/run
    none                  194M     0  194M   0% /var/lock
    none                  194M     0  194M   0% /lib/init/rw
    /dev/sda7             7.3G  189M  6.7G   3% /var
    /dev/sda1              92M   21M   66M  25% /boot
    

    Вот с такими вот параметрами, заведомо я подготовил 2 сетевых интерфейса, не удивляйтесь что у обоих интерфейсы из локальных диапазонов, просто машинка установлена внутри xen.

    root@testgateway:~# ifconfig
    eth0      Link encap:Ethernet  HWaddr 00:16:36:73:84:48  
              inet addr:192.168.0.237  Bcast:192.168.0.255  Mask:255.255.255.0
              inet6 addr: fe80::216:36ff:fe73:8448/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:1361 errors:0 dropped:0 overruns:0 frame:0
              TX packets:720 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:111090 (111.0 KB)  TX bytes:107285 (107.2 KB)
              Interrupt:32 Base address:0xa000 
    
    eth1      Link encap:Ethernet  HWaddr 00:16:36:64:1c:bd  
              inet addr:192.168.122.51  Bcast:192.168.122.255  Mask:255.255.255.0
              inet6 addr: fe80::216:36ff:fe64:1cbd/64 Scope:Link
              UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
              RX packets:68 errors:0 dropped:0 overruns:0 frame:0
              TX packets:82 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:1000 
              RX bytes:8170 (8.1 KB)  TX bytes:10923 (10.9 KB)
              Interrupt:36 Base address:0xe100 
    
    lo        Link encap:Local Loopback  
              inet addr:127.0.0.1  Mask:255.0.0.0
              inet6 addr: ::1/128 Scope:Host
              UP LOOPBACK RUNNING  MTU:16436  Metric:1
              RX packets:0 errors:0 dropped:0 overruns:0 frame:0
              TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
              collisions:0 txqueuelen:0 
              RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
    

    Здесь интернет будет идти от eth1, локальная сеть, т.е. я буду находится со стороны eth0.
    Естественно рекомендуется, провести:
    root@testgateway:~# apt-get update
    root@testgateway:~# apt-get upgrade
    

    Следующим шагом мы должны поставить дополнительные пакеты для нашего прокси сервера, как наверное Вы догадались мы будем использовать связку SQUID+SAMS, но настраивать будем типичный случай, авторизация по IP, и для облегчения себе жизни заворот всех пользователей на порт прокси сервера. Эту связку потом можно будет с легкостью настроить на авторизацию по логин/паролю, и даже связать с AD.
    Необходимыми пакетами для нашего случая мы установим так:

    root@testgateway:~# apt-get install libpcre3 libpcre3-dev libmysqlclient15-dev php5-ldap php-fpdf squid squidguard gcc make php5-gd
    

    Если вдруг будет мало доустановим еще. Следующим шагом будет скачивание и установка самого SAMS, скачиваем стабильную версию 1.0.5, есть еще SAMS 2.0, но как-то попробовал, еще слишком много багов было.
    root@testgateway:~# wget http://sams.perm.ru/download/sams-1.0.5.tar.bz2
    

    Далее, распаковываем и устанавливаем его:
    root@testgateway:~# bunzip2 sams-1.0.5.tar.bz2 && tar -xpf sams-1.0.5.tar && rm sams-1.0.5.tar
    root@testgateway:~# cd sams-1.0.5/
    root@testgateway:~# ./configure – -with-httpd-locations=/var/www
    root@testgateway:~# make
    root@testgateway:~# make install
    

    После этого в принципе не должно получится ошибок, и можно смело продолжать, если есть какие-то ошибки, значит следует вчитаться, и доустановить то чего не хватает.
    Далее копируем скрипт запуска sams, к нам на сервер

    root@testgateway:~/sams-1.0.5# cp ./etc/sams.debian /etc/init.d/samsd
    root@testgateway:~/sams-1.0.5# update-rc.d samsd defaults
     Adding system startup for /etc/init.d/samsd ...
       /etc/rc0.d/K20samsd -> ../init.d/samsd
       /etc/rc1.d/K20samsd -> ../init.d/samsd
       /etc/rc6.d/K20samsd -> ../init.d/samsd
       /etc/rc2.d/S20samsd -> ../init.d/samsd
       /etc/rc3.d/S20samsd -> ../init.d/samsd
       /etc/rc4.d/S20samsd -> ../init.d/samsd
       /etc/rc5.d/S20samsd -> ../init.d/samsd
    

    Далее чуть-чуть настроим MySQL. Нужно загрузить таблицы, и организовать доступ к ним:

    root@testgateway:~/sams-1.0.5# mysql -u root -p
    Enter password: 
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 39
    Server version: 5.1.41-3ubuntu12.10 (Ubuntu)
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> GRANT ALL ON squidctrl.* TO sams@localhost IDENTIFIED BY "maxim";
    Query OK, 0 rows affected (0.02 sec)
    
    mysql> GRANT ALL ON squidlog.* TO sams@localhost IDENTIFIED BY "maxim";
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> flush privileges;
    mysql> exit
    
    root@testgateway:~/sams-1.0.5# cd ./mysql
    root@testgateway:~/sams-1.0.5/mysql# mysql -u root -p < sams_db.sql 
    root@testgateway:~/sams-1.0.5/mysql# mysql -u root -p < squid_db.sql 
    

    Далее чуть-чуть правим файл, /etc/sams.conf:
    MYSQLPASSWORD=maxim

    Надеюсь все догадались, что это пароль который мы вставляли в команды Mysql.
    Наконец, дошла очередь и до настройки самого SQUIDа, но не думайте, что это будет очень сложно, приготовьтесь, что всю грязную работу в будущем за вас будет делать SAMS.
    Открываем файл настройки, и изменим там несколько строк:
    # Squid normally listens to port 3128
    http_port 192.168.0.237:3128 transparent
    
    maximum_object_size_in_memory 50 MB
    
    cache_dir ufs /var/spool/squid 3000 32 512
    Параметры кэша подбираются индивидуально под каждый случай.
    
    maximum_object_size 50 MB
    
    url_rewrite_program /usr/local/bin/samsredir
    

    Теперь настраиваем обработку лога access.log
    Открываем crontab, лучше это делать с помощью crontab -e, и добавляем туда следующую строчку:
    */1 * * * * /usr/local/bin/sams

    Далее создадим директории для кэша сквида:
    root@testgateway:~/sams-1.0.5/mysql# squid -z
    2011/10/13 12:40:12| Creating Swap Directories

    и стартуем squid.
    root@testgateway:~/sams-1.0.5/mysql# /etc/init.d/squid start

    Проверяем:
    root@testgateway:~/sams-1.0.5/mysql# ps aux | grep proxy
    proxy    19158  0.2  1.2   7696  4876 ?        Ss   12:40   0:00 /usr/sbin/squid -N -D
    proxy    19159  0.0  0.4   5080  1636 ?        Ss   12:40   0:00 (samsredir)
    proxy    19160  0.0  0.4   5080  1640 ?        Ss   12:40   0:00 (samsredir)
    proxy    19161  0.0  0.4   5080  1636 ?        Ss   12:40   0:00 (samsredir)
    proxy    19162  0.0  0.4   5080  1636 ?        Ss   12:40   0:00 (samsredir)
    proxy    19163  0.0  0.4   5080  1640 ?        Ss   12:40   0:00 (samsredir)
    proxy    19164  0.0  0.0   1616   316 ?        Ss   12:40   0:00 (unlinkd)
    

    Если картина идентична, то значит все запустилось хорошо.
    Далее идем настраивать наш SAMS, это уже делается через веб-интерфейс, вбиваем в браузере адрес нашего прокси, у нас он был 192.168.0.237/sams, и видим страницу приглашения ввод и пользователя и пароля.
    Но прежде чем мы это сделаем мы должны исправить небольшой баг этой системы, а именно в связи с выходом PHP5.3, немного некорректно отображаются страницы настройки, вернее совсем не отображаются. Но это операция не сложная, просто правим два файла:
    /usr/local/share/sams/src/configtray.php
    /usr/local/share/sams/src/webconfigtray.php
    переименовываем GetHostName в GetHostNameSams и все заработало.
    Дальше я буду на примере маленьких скриншотов показывать, что и где нужно править, чтобы все работало, как нам надо. Приглашение, по умолчанию логин: Admin, пароль: qwerty

    image

    Следующий шаг, настройка веб-интерфейса, выставляем следующие параметры:

    image

    Окно администрирование SAMS не влезло в ширину экрана, поэтому опишу текстом, авторизацию устанавливаем IP, файл перенаправления запроса 192.168.0.237/sams/icon/classic/blank.gif, путь к каталогу, где лежат файлы запрета запроса 192.168.0.237/sams/messages, редиректор встроенный SAMS, и последнее сохранять данные о трафике в базе за последние 12 месяцев.
    Далее переходим к настройке шаблонов, удаляем все, чтобы нам ничего не мешало и создаем новый.

    image

    Далее добавляем пользователя и связываем его c нашим шаблоном

    image

    Далее запускаем демон samsd: /etc/init.d/samsd start. И реконфигурируем SQUID.
    После этого, если пользователю прописать прокси в браузере все начинает отлично работать, но так как нам это не удобно будет делать на всех пользователях, так что применим классическую админскую хитрость, заворот HTTP трафика на порт прокси сервера.

    iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 3128

    Вот так вот у нас получился прокси, с удобным веб-интерфейсом, возможно кто-то меня обвинит в плагиате, мол уже 100 раз это все было, но сразу хочется отметить, что как я и сказал в самом начале статьи, этот вариант настройки прокси для ленивых, т.к. практически все вкусности SQUID, такие как ограничения по трафику, создание списков доступа, разрешенных доменов, запрет на скачивание, можно получить из веб-настройки. А также мы легко получаем систему просмотра статистики, которой может воспользоваться любой пользователь Вашей организации, зайдя на страничку под своим логином. Конечно остается сложность с учетом трафика торрентов, почты и другого не 80 порта, и на это тоже есть свое решение, которое очень хорошо впишется в общую картину.
    Если буду формироваться вопросы, милости прошу, обсудим, все остальные тонкости настройки
    Поделиться публикацией
    Похожие публикации
    Ой, у вас баннер убежал!

    Ну. И что?
    Реклама
    Комментарии 34
    • +2
      Спасибо. Полезная статься.
      P.S. Жду продолжения на ipcad 8)
      • +1
        Считал не весь трафик, падал с «Ошибка сегментирования»
        Решение: В «Администрирование SAMS» снимите галочку у «Преобразовывать DNS имена». Статистику будет показывать нормально без голых IP
      • +2
        А как же настройка squidguard?
        • 0
          ну здесь, я использовал встроенный редиректор, но SAMS поддерживает и squidguard, и rejik, так что это остается усмотрение пользователя. В принципе можно и это дописать, у каждого ведь свои предпочтения.
          • 0
            простите, опечатался, «на усмотрение» конечно же.
            • +2
              Я спросил из-за того, что пакет squidguard'а установили, а не настроили ))
              • 0
                Согласен, делал из своих записей, просто не обратил внимание. Есть типовой набор пакетов требуемых для той или иной настройки SAMS+SQUID.
          • 0
            Вместо SAMS использовал раньше STC. Не знаю, развивается сейчас проект или нет.
            • 0
              На счет STC тоже ничего не могу сказать, но к сожалению SAMS тоже перестали разрабатывать, и версия 2.0 скорее всего уже не выйдет.
              • +2
                Да ладно. У меня стоит 2 версия, релиз кандидат — все очень хорошо работает. Даже ошибки присланные мной иногда исправляют.
                • +3
                  Вот эта ссылка заставила меня так думать. Дай бог, чтобы я ошибался.
                  • 0
                    Тоже сходил по ссылке. «Данный проект находится в замороженном статусе» и «Activity High» — это плохо согласуется между собой.

                    З.Ы. может быть хабраэффект сказывается…
              • 0
                Судя по новостям на сайте проект живет. От себя говорю Спасибо энтузиастам STC, ваша система мне очень помогла.
              • +1
                На мой взгляд, это для совсем-совсем ленивых, Squid и так не сильно сложный в настройке. Один раз разобрался с ACL, наваял правила, настроил squidGuard — и все. Потом можно еще lightsquid или FreeSA прикрутить. Зато можно собрать сквид с delay pools, и резать пользователям скорость как угодно. И мускуль не нужен, и система очень простая и прозрачная. Когда я последний раз смотрел в сторону SAMS, он резать скорость не умел никак, и делал с конфигами сквида что-то страшное. Так что лень сегодня может обернуться головной болью завтра. Простую и прозрачную систему админить завсегда приятнее.
                • +1
                  Возможно и так, но сейчас могу Вас заверить SAMS очень хорошо справляется со скоростными ограничениями, и опять же настраивается при помощи веб-интерфейса, начинающему админу сложно понять delay pools, а SAMS добавит правила в них сам. Могу Вас заверить, за все время, я установил около 15 таких вот проксей, и на большинстве из них за распределение трафика отвечает офис-менеджер(добавить пользователя, выключить пользователя), ее не заставишь ведь лазить в конфиг.
                  • 0
                    Можно только порадоваться, что SAMS уже умеет резать скорость, и, конечно, если менеджер добавляет пользователей, без веб-морды не обойтись. Но в моей практике добавление пользователей это очень редкое явление — я изначально делаю 4 категории с разными правилами в squidGuard и нужными корзинами delay pools, в простых файликах описываю групы ip-адресов под каждую из категорий, а все, кого в категориях нет — ходят как простые пользователи с дефолтными (для организации) правилами и ограничениями. Соответственно, ничего править в процессе работы нужды нет — знай себе выдавай по dhcp генералитету адреса из vip-категории, начальству из почти-vip, ну а штрафникам из bad-users. Но, конечно, начинающему SAMS будет удобнее. Вот только и не научится он толком ничему…
                    • 0
                      Согласен, что процесс обучения немного затормозит, но сколько свободного времени появится у админа, когда он решит для себя эту проблему, спокойно освоит потихоньку все что ему нужно, и далее запустит коллектор трафика, будет парсить файлы дампов и заниматься выборками. А первые шаги можно сделать и с помощью SAMS. По крайней мере отвадить от мысли ставить Microsoft ISA за деньги…
                      • 0
                        прошу прощения, не туда ответил. Это конечно же, было адресовано Blackover
                • НЛО прилетело и опубликовало эту надпись здесь
                  • 0
                    Спасибо большое, исправил, теперь это одно предложение.

                    Поясните пожалуйста, что значит пробросить порт для ip шника, sams к фаерволу не имеет никакого отношения, это «мордочка» для squid.
                    В плане статистики есть возможность просмотра по доменам второго уровня, сделать выборку за практически любое количество дней, по трафику, посмотреть графики в статистике.
                    • НЛО прилетело и опубликовало эту надпись здесь
                      • 0
                        Как вебморду с графиками можете попробовать nfsen, присоединив его к какому-нибудь коллектору трафика, несколько раз делал такое, но мне не очень понравилось. nfsen использует rrdtool. В итоге у Вас получится нечто похожее на MRTG. Графики и возможность выборки присутствует.
                      • НЛО прилетело и опубликовало эту надпись здесь
                    • 0
                      Можете ругать меня, но из поста я вобще ничего не понял, слишком много дейстив, и скрины с моим зрением приходится расматривать в бинокль. Обычно все делается быстрее парой тройкой строчек в конфиге.
                      • 0
                        Я чуть выше описал, что это решение подходит не для админа, которому проще залезть в консоль, а для человека мало знакомого со сквидом, который с помощью самс сможет понять суть его. Периодически заглядывая в конфиг и видя как меняется delay pool, как добавляются юзеры. Плюс статистика, которая будет распечатываться даже в pdf.
                      • 0
                        А в SAMS можно (планируется) возможность установки веб-админки на отличный от шлюза комп?

                        В версиях 1.X.X по-моему нельзя, а было бы здорово, ибо у меня в локалке есть отдельный веб-сервер (а лишний демон на шлюзе это не есть хорошо).
                        • –1
                          А Webmin чем не угодил?
                          • +1
                            Webmin, «чуть-чуть» другая штуковина. Который не применима для данного решения.
                          • +3
                            Перед тем, как
                            mysql> exit
                            забыли
                            mysql> flush privileges;
                            =)
                            • 0
                              Признаю, не внимательность моя.
                            • +2
                              root@testgateway:~# make install
                              >
                              Ну когда ж в подобных инструкциях начнут писать хотя бы checkinstall. Я уж не заикаюсь про dh_make и dpkg-buildpackage. Ну зачем так усложнять себе жизнь?

                              зы. И, кстати, в дебианах начиная со стейбла, самс что-то не очень работает: сегфолтится демон пересчета статистики. И если с 1.0.5 ситуацию уже не исправить (они прекратили поддержку этой версии, да и он тупо не поставится из-за зависимостей: ему libmysqlclient15 подавай, который только в ленни и остался), то с 2.0 есть хотья какая-то надежда. Однако в багтрекере уже довольно давно висит баг, но что-то она никак не исправится.
                              • 0
                                Спасибо.
                                Полезно. Кратко. Доступно.
                                • +1
                                  Жаль, что картинки Вы заливали на Imagehack, вполне предсказуемо, что они давно умерли… Надо бы на Habrastorage их все.
                                  • 0
                                    «Молодо… зелено» — ну ничего не поделать уже, восстановлению я думаю это не подлежит уже, если только откорректировать статью

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое