Добрый день, уважаемые Хабрапользователи, в связи со сложившейся тенденцией к изучению всем известного прокси сервера SQUID, я бы хотел предложить вариант некой типовой настройки небольшой связки, которая будет полезная для начинающих системных администраторов небольших контор, ну или просто для тех, кому лень разбираться. Данная статья ни в коем случае не претендует на глобальный мануал на все случаи жизни — как я уже и сказал это всего лишь обобщенный частный случай.
Ну, давайте обсудим с чего мы начинаем, у нас есть сервер в моем случае это свежеустановленная Ubuntu Server с выбранными параметрами LAMP и SSH (специально с целью написания статьи):
Вот с такими вот параметрами, заведомо я подготовил 2 сетевых интерфейса, не удивляйтесь что у обоих интерфейсы из локальных диапазонов, просто машинка установлена внутри xen.
Здесь интернет будет идти от eth1, локальная сеть, т.е. я буду находится со стороны eth0.
Естественно рекомендуется, провести:
Следующим шагом мы должны поставить дополнительные пакеты для нашего прокси сервера, как наверное Вы догадались мы будем использовать связку SQUID+SAMS, но настраивать будем типичный случай, авторизация по IP, и для облегчения себе жизни заворот всех пользователей на порт прокси сервера. Эту связку потом можно будет с легкостью настроить на авторизацию по логин/паролю, и даже связать с AD.
Необходимыми пакетами для нашего случая мы установим так:
Если вдруг будет мало доустановим еще. Следующим шагом будет скачивание и установка самого SAMS, скачиваем стабильную версию 1.0.5, есть еще SAMS 2.0, но как-то попробовал, еще слишком много багов было.
Далее, распаковываем и устанавливаем его:
После этого в принципе не должно получится ошибок, и можно смело продолжать, если есть какие-то ошибки, значит следует вчитаться, и доустановить то чего не хватает.
Далее копируем скрипт запуска sams, к нам на сервер
Далее чуть-чуть настроим MySQL. Нужно загрузить таблицы, и организовать доступ к ним:
Далее чуть-чуть правим файл, /etc/sams.conf:
MYSQLPASSWORD=maxim
Надеюсь все догадались, что это пароль который мы вставляли в команды Mysql.
Наконец, дошла очередь и до настройки самого SQUIDа, но не думайте, что это будет очень сложно, приготовьтесь, что всю грязную работу в будущем за вас будет делать SAMS.
Открываем файл настройки, и изменим там несколько строк:
Теперь настраиваем обработку лога 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
Проверяем:
Если картина идентична, то значит все запустилось хорошо.
Далее идем настраивать наш 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
Следующий шаг, настройка веб-интерфейса, выставляем следующие параметры:
Окно администрирование SAMS не влезло в ширину экрана, поэтому опишу текстом, авторизацию устанавливаем IP, файл перенаправления запроса 192.168.0.237/sams/icon/classic/blank.gif, путь к каталогу, где лежат файлы запрета запроса 192.168.0.237/sams/messages, редиректор встроенный SAMS, и последнее сохранять данные о трафике в базе за последние 12 месяцев.
Далее переходим к настройке шаблонов, удаляем все, чтобы нам ничего не мешало и создаем новый.
Далее добавляем пользователя и связываем его c нашим шаблоном
Далее запускаем демон 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 порта, и на это тоже есть свое решение, которое очень хорошо впишется в общую картину.
Если буду формироваться вопросы, милости прошу, обсудим, все остальные тонкости настройки
Ну, давайте обсудим с чего мы начинаем, у нас есть сервер в моем случае это свежеустановленная 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
Следующий шаг, настройка веб-интерфейса, выставляем следующие параметры:
Окно администрирование SAMS не влезло в ширину экрана, поэтому опишу текстом, авторизацию устанавливаем IP, файл перенаправления запроса 192.168.0.237/sams/icon/classic/blank.gif, путь к каталогу, где лежат файлы запрета запроса 192.168.0.237/sams/messages, редиректор встроенный SAMS, и последнее сохранять данные о трафике в базе за последние 12 месяцев.
Далее переходим к настройке шаблонов, удаляем все, чтобы нам ничего не мешало и создаем новый.
Далее добавляем пользователя и связываем его c нашим шаблоном
Далее запускаем демон 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 порта, и на это тоже есть свое решение, которое очень хорошо впишется в общую картину.
Если буду формироваться вопросы, милости прошу, обсудим, все остальные тонкости настройки