Home FreeBSD
FreeBSD

SARG - анализатор логов SQUID

E-mail Печать PDF

SARG - анализатор логов SQUID

Автор:lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/programms/sarg/


SARG (Squid Analysis Report Generator - анализатор логов SQUID и генератор отчётов по ним) - малюсенькая программа (чуть больше 300кб) которая анализирует логи прокси сервера SQUID и выдаёт отчёт - кто, куда лазил, сколько соединений, сколько мегов скачано. Строит достаточно красивые графики - по часам суток, дням месяца и другие. Также выдаёт и побочную инфу - процент попадания в кэш (т.е. сколько squid отдал из своего локального кэша, а не из инета). Программа простая до безобразия, но очень функциональная. Траффик ей особо не посчитаешь - т.к. даже если у вас только инет через squid всё равно SARG считает вместе с инфой отданной из кэша - т.е. всегда будет врать в большую сторону. Статистику выдаёт в html-виде, т.е. для человеческого просмотра нужен установленный WWW-сервер на машине (можно просто вытаскивать её к себе на комп, но это тоже не для слабонервных занятие - несколько тысяч мелких файлов, мегов под 300 размером).
Собираем как обычно - из портов:/root/>cd /usr/ports/
/usr/ports/>make search name='sarg'

Port: sarg-2.0.9
Path: /usr/ports/www/sarg
Info: Squid log analyzer and HTML report generator
Maint: Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
B-deps: freetype2-2.1.10_1 gd-2.0.33_1,1 jpeg-6b_3 pkgconfig-0.17.2 png-1.2.8_2
R-deps: freetype2-2.1.10_1 gd-2.0.33_1,1 jpeg-6b_3 pkgconfig-0.17.2 png-1.2.8_2
WWW: http://sarg.sourceforge.net/


После сборки (подразумевается что апач у Вас уже стоит - т.к. настройки я привожу для отчётов в html и выкладываемых на локальной машине) радактируем его конфиг до такого состояния: /usr/local/etc/sarg/sarg.conflanguage Russian_koi8
graphs yes
title "Squid User Access Reports"
temporary_dir /tmp
output_dir /usr/local/www/data/statistic/http_stat
max_elapsed 28800000
charset Koi8-r


- конечно же никто Вам не запрещает поизгаляться над стилем отображения всего этого хозяйства - конфиг снабжён очень подробными комментариями. Запускаем командой /usr/local/bin/sarg -l /путь_к_логам_сквида/squid.log


У меня логи cron`ом убираются в отдельные файлы - по месяцам, поэтому при запуске этой команды из скрипта путь подставляется автоматом. На слабых машинах работать будет относительно долго (минуты 4 лохматит месячные логи на 300 мегабайт, машина - P-IV 2GHz, причём много времени уходит на запись самих логов - генерится очень много мелких файлов)
Вот и всё :) Пользуйтесь.

Обновлено 28.05.2010 13:50
 

Установка MySQL

E-mail Печать PDF

Установка MySQL

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/programms/mysql/


Опять статья навеянная многочислеными просьбами трудящихся :) Заодно не придётся во всех новых статьях описывать установку MySQL :) Так что, в любом случае пригодится. Вообще, с MySQL вроде всё просто, но почему-то народ активно морозится баз данных, используя системных юзеров в почте, да всякие файлы текстовые, под почту да хранение трафика. Хотя с БД оно всё на порядок удобней получается.
Итак, рассматривать будем установку и небольшую настройку двух версий MySQL - 5.0 и 3.23 под FreeBSD6.0. Почему именно они? На данный момент, 5.1 вроде всё ещё бета, потому используется на рабочих серверах только отъявленными маньяками, или теми у кого есть необходимость. А вот 3.23 нужна в случаях, когда на какой-нить старенькой машинке нужна "записная книжка" для почтовых юзеров, да БД куда складывать статистику по траффику инета, например. Подымать для этого 5.0 или 4.1 - расточительство оперативки и ресурсов слабенькой машинки. У меня и на некоторых, очень хороших машинах, стоит 3.23 - ибо его хватает.
Итак, ставим 5.0/usr/home/lissyara/>cd /usr/ports/databases/mysql50-server/
/usr/ports/databases/mysql50-server/>make
===> Vulnerability check disabled, database not found

You may use the following build options:

WITH_CHARSET=charset Define the primary built-in charset (latin1).
WITH_XCHARSET=list Define other built-in charsets (may be 'all').
WITH_COLLATION=collate Define default collation (latin1_swedish_ci).
WITH_OPENSSL=yes Enable secure connections.
WITH_LINUXTHREADS=yes Use the linuxthreads pthread library.
WITH_PROC_SCOPE_PTH=yes Use process scope threads
(try it if you use libpthread).
BUILD_OPTIMIZED=yes Enable compiler optimizations
(use it if you need speed).
BUILD_STATIC=yes Build a static version of mysqld.
(use it if you need even more speed).
WITHOUT_INNODB=yes Disable support for InnoDB table handler.
WITH_ARCHIVE=yes Enable support for Archive Storage Engine.
WITH_FEDERATED=yes Enable support for Federated Storage Engine.
WITH_NDB=yes Enable support for NDB Cluster.

===> Extracting for mysql-server-5.0.22
^C
/usr/ports/databases/mysql50-server/>


Прервал. Доступна куча опций, потому с ними и поиграемся, для чего в файл /etc/make.conf надо внести такие строки:# Для некоторых, особо тупых приложений, лучше указать версию MySQL,
# что используется, тут. Но - для совсем тупых не поможет и это.
DEFAULT_MYSQL_VER=50

# Директория где лежат порты
PORTSDIR?= /usr/ports

# для сервера
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-server
# Дефолтовая кодировка. Вообще, этим пунктом увлекаться не стоит -
# могут возникнуть проблемы при переносе на другой сервер. На самом
# деле и не проблемы вовсе - просто дамп перекодировать да поменять
# кодировку-коллэйшен у таблиц в дампе, перед заливкой, но первый
# раз столкнувшись, вызывает кучу проблем...
WITH_CHARSET=cp1251
# Другие вкомпиленные кодировки. Можно задать 'all' - все.
#WITH_XCHARSET=all
# Дефолтовая кодировка сравнения (другого слова подобрать не могу...)
WITH_COLLATION=cp1251_bin
# Поддержка OpenSSL - для шифрования передаваемых данных.
# Шифрование - это конечно хорошо, но - повышается нагрузка на
# машину сервера и на машину клиента (если и тот и другой на одной
# машине - вообще не вижу смысла в этом пункте.)
#WITH_OPENSSL=yes
# Интересная опция - позволяет работать в несколько "нитей",
# обрабатывая несколько запросов одновременно - в результате
# повышается производительность.
WITH_LINUXTHREADS=yes
# Программные треды FreeBSD (если я верно всё понял). Тестов на скорость,
# в сравнении с линуксовыми не нашлось - потому не знаю, кто быстрей.
# Кстати, видел рекомендацию - включать и те и другие треды одновременно.
# Смысла, особого в этом не вижу, но и не утверждаю ничего.
#WITH_PROC_SCOPE_PTH=yes
# Собирать с флагами оптимизации (-O2), сам не мерял, но по слухам,
# несколько процентов производительности можно выиграть. Будет
# полезным на старых машинах, или высоконагруженных.
BUILD_OPTIMIZED=yes
# Собрать статическую версию mysqld (cо вкомпиленными либами, чтоль)
# Также, как и предыдущая опция, позволит выиграть несколько процентов
# производительности (по слухам - до 10% - но чё-то слабо верится...)
BUILD_STATIC=yes
# Отключить тип таблиц InnoDB (если не используете - будет поменьше
# коду, и, соответственно, быстрей работать будет)
WITHOUT_INNODB=yes
# Специальный тип хранения данных (не всех, тока тех, что без индексов),
# позволяет хранить их в виде архива, тем самым экономится дисковое
# пространство (в ущерб производительности, я думаю... Так что смысл
# есть, лишь если надо хранить кучу неиндексированных данных -
# те же данные по траффику, к примеру, там всё равно перебором почти всё :))
#WITH_ARCHIVE=yes
# Фенька, позволяющая работать с удалёнными (находящимися на другом хосте)
# таблицами данных, как будто они находятся на локальной машине
# (NFS, чтоль, уже отменили? :)) Хотя, если выборки будут идти на другом
# хосте - то нагрузка на сеть будет меньшe, чем с NFS. Короче - не пробовал,
# ничё не утверждаю... Пару строк в документации прочёл.)
#WITH_FEDERATED=yes
# Опция, нужная лишь в случае, если будете собирать кластер MySQL-серверов
#WITH_NDB=yes
.endif
# для клиента
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql50-client
# Многие из опция сервера, применяются и в клиенте. Вобщем-то, какие не
# применяются, интуитивно понятно - то, что касается всяких фенек, типа
# кластеров, архивных таблиц и прочего. Ставить их тут можно, но они не
# произведут никакого действия. Также, хочу заметить, что кодировка,
# 'по-умолчанию' бывает не тока у сервера, но и у клиента. Частенько,
# именно на этом прокалываются. (И вовсе не обязательно она должна быть
# такая же как у сервера.)
# Также хочу заметить, что клиента не надо собирать с какими бы то ни
# было тредами - линуксовыми, или родными - я прокололся на линуксовых,
# вроде всё пашет, с консоли, а вот апач падает... Методом исключения
# выяснил виновника - клиент с тредами - падает mysql-модуль PHP,
# валит апача...
WITH_CHARSET=cp1251
WITH_COLLATION=cp1251_bin
BUILD_OPTIMIZED=yes
.endif


Итак, собираем MySQL:/usr/home/lissyara/>cd /usr/ports/databases/mysql50-server/
/usr/ports/databases/mysql50-server/>make && make install && make clean


После инсталляции клиента сборка прекращается с ошибкой - не может найти библиотеку.===> Installing ldconfig configuration file
===> Compressing manual pages for mysql-client-5.0.22
===> Registering installation for mysql-client-5.0.22
===> Returning to build of mysql-server-5.0.22
Error: shared library "mysqlclient.15" does not exist
*** Error code 1

Stop in /usr/ports/databases/mysql50-server.
/usr/ports/databases/mysql50-server/>


Я перезагрузился, помогло, но можно и иначе, дать команду:/usr/home/lissyara/>/sbin/ldconfig -m /usr/local/lib/mysql
/usr/home/lissyara/>


Должно помочь и без перезагрузки. Вообще, раньше, вместе с клиентом, инсталлся такой скрипт:
/usr/local/etc/rc.d/000.mysql-client.sh#!/bin/sh

case "$1" in
start)
/sbin/ldconfig -m /usr/local/lib/mysql
;;
stop)
;;
*)
echo ""
echo "Usage: `basename $0` { start | stop }"
echo ""
exit 64
;;
esac


Нынче он не инсталлится. Если ошибки будут продолжаться, при сборке других приложений из портов, то можно его добавить в автозагрузку, или, что грамотней, добавить путь в /etc/rc.conf (подробности можно найти здесь, поиск в странице, по ключевому слову ldconfig_paths).
После чего продолжаем инсталляцию:/usr/ports/databases/mysql50-server/>make install && make clean


По окончании инсталляции, стругаем конфиг для mysql - /usr/local/etc/my.cnf# Этот конфигурационный файл сделан на основе файла для маленьких
# систем - /usr/local/share/mysql/my-small.cnf. Большую часть его
# делал не я, а один знакомый. Имени, к сожалению, не помню...
# Но всё же предупреждаю - копирайт на настройки конфига не мой :))
#
# Вообще, конфигурационный файл можно положить в несколько мест:
# /etc/my.cnf
# /var/db/mysql/my.cnf
# /usr/local/etc/my.cnf
# В любом из них mysqld его найдёт, и достанет из него настройки.
# Самое корректное место, если судить по стартовому скрипту, это
# директория где лежат базы данных - /var/db/mysql/my.cnf.


# Опции для всех клиентов MySQL
[client]
# Пароль для подключения к БД
#password = your_password
# Порт на котором висит MySQL
port = 3306
# Сокет MySQL
socket = /tmp/mysql.sock


# Опции MySQL-сервера
[mysqld]
# Порт
port = 3306
# Адрес, который будем слушать (если вам не нужно подключаться к
# MySQL с других машин, то оставьте здесь 127.0.0.1)
bind-address = 127.0.0.1
# Где лежит сокет
socket = /tmp/mysql.sock
# Не использовать средства системных блокировок.
skip-locking
# Вообще, в новых версиях, (после 3.21) этот пункт правильно называется
# key_buffer_size, но можно использовать и старое имя. Значение этого
# пункта - размер буфера, используемого для блоков индексов. Чтобы
# улучшить обработку индексов (для всех операций чтения и записи нескольких
# элементов), необходимо увеличить это значение настолько, насколько возможно.
# Рекомендуется, 1/4 от объёма оперативки, но не более 1/2 - иначе система
# может начать сохранять временные файлы на диске, что значительно
# снизит производительность.
key_buffer = 16K
# Максимальный размер одного пакета. Изначально размер буфера сообщений
# устанавливается в net_buffer_length байтов, но при необходимости может
# возрасти до max_allowed_packet байтов. Это значение по умолчанию не
# настолько велико, чтобы отсеивать большие (возможно ошибочные) пакеты.
# Если используются большие столбцы BLOB, его необходимо увеличить.
# Значение должно быть не меньше самого большого BLOB, который будет
# использоваться. Ограничение протокола для max_allowed_packet
# составляет 16 Мб в MySQL 3.23 и 1Гб в MySQL 4.0.
max_allowed_packet = 1M
# Количество открытых таблиц для всех потоков. С увеличением этого
# значения увеличивается количество дескрипторов файлов, необходимых
# для mysqld. Чтобы узнать, необходимо ли изменять значение кэша таблиц,
# следует проверить значение переменной Opened_tables.
# Если у этой переменной большое значение, а команда FLUSH TABLES
# (которая закрывает все таблицы, а потом открывает их повторно)
# используется не часто, то необходимо увеличить ее значение.
table_cache = 4
# Каждый поток, которому необходимо произвести сортировку, выделяет
# буфер данного размера. Увеличение данного значения позволит ускорить
# выполнение операторов ORDER BY или GROUP BY.
sort_buffer_size = 64K
# Каждый поток, осуществляющий последовательное сканирование, выделяет
# буфер указанного размера для каждой сканируемой таблицы. Если
# проводится много последовательных сканирований, это значение
# можно увеличить.
read_buffer_size = 256K
# При считывании строк, после проведения сортировки, в отсортированном
# порядке строки считываются через буфер, чтобы избежать операций поиска
# по диску. Это может улучшить выполнение ORDER BY весьма и весьма,
# если параметр установлен в большое значение. Т.к. эта переменная
# имеет отношение к потоку, то не устанавливайте слишком большое
# значение глобально, но просто меняйте его при выполнении некоторых
# больших запросов.
read_rnd_buffer_size = 256K
# В данное значение устанавливается, в промежутках между запросами,
# буфер соединения. Обычно это значение не изменяется, но если у вас
# очень мало памяти, можно установить его по размеру ожидаемого
# запроса (т.е. равным предполагаемой длине операторов SQL, отправляемых
# клиентами; если оператор превысит указанную длину, буфер будет
# автоматически увеличен как максимум до max_allowed_packet байтов).
net_buffer_length = 2K
# Размер стека для каждого потока. От данного значения зависит большое
# количество ограничений, обнаруживаемых при помощи теста crash-me.
# По умолчанию этот размер достаточен для нормальной работы.
thread_stack = 64K

# Вообще не слушать порты TCP/IP. Это может применяться для большей
# безопасности, если все процессы, соединяющиеся с MySQL висят на томже
# хосте, что и mysqld. Все взаимодействия с mysqld будут осуществляться
# через Unix-сокеты, или именованые каналы.
# Заметтьте, что использование этой опции под форточками, без включчения
# именованных каналов (используйте опцию "enable-named-pipe") сделает
# работу MySQL бесполезной - ибо с mysqld никто не сможет соединиться :)
skip-networking
# Если Вы используете InnoDB, то закомментируйте эту опцию
skip-innodb
# С этой опцией MySQL не будет инициализировать библиотеку Berkeley DB,
# что позволит сэкономить большое количество памяти.
skip-bdb
# Hекоторое уникальное число между 2 и 2^32-1. Значения server-id должны
# быть различными на каждом сервере, участвующем в репликации. Если
# значение server-id не определено, оно будет установлено в 1, если
# также не определено значение master-host, оно будет установлено в 2.
# Обратите внимание, что если значение server-id опущено, то головной
# сервер будет отказывать в соединении всем подчиненным серверам, а
# подчиненный сервер - отказывать в соединении головному серверу.
# Таким образом, опускать установку значения server-id можно лишь в
# случае резервного копирования с использованием двоичного журнала.
server-id = 1
# Раскомментируйте эту опцию, для включения логгирования всех запросов
# Заметтьте - тока на время отладки! Потом надо закомментить и
# рестартануть MySQL!
# Файл должен существовать, с соответствующими правами на него:
# touch /var/log/mysql.log
# chown mysql:wheel /var/log/mysql.log
# chmod 640 /var/log/mysql.log
log = /var/log/mysql.log

# Указывает местоположение двоичного журнала обновлений,
# в котором будут вестись записи.
#log-bin=mysql-bin

[mysqldump]
# Если задан этот параметр, то обработчик таблицы при выполнении
# удаления не будет объединять индексы - в некоторых случаях это
# может ускорить данную операцию
quick
# Максимальная величина пакета, посылаемого/принимаемого с сервера
max_allowed_packet = 16M

[mysql]
# Отключает автоматическое рехеширование. rehash следует использовать
# для получения хеша таблиц и полей. Это обеспечивает более
# быстрый старт mysql.
no-auto-rehash
# Опция, которую рекомендуется раскомментить начинающим :)
# Разрешает выполнять только операции UPDATE и DELETE, используя ключи.
#safe-updates

[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
# Допускать простой длительностью interactive_timeout секунд (вместо
# wait_timeout секунд) перед закрытием данного соединения.
interactive-timeout

# P.S. Большинство текста - это из мануала по MySQL 4.0, за который
# мы не так давно воевали на www.mysql.com (его убирали на некоторое
# время, типа он по старой версии, потому не актуален...
# но - отвоевали, вернули :))))


C таким конфиг-файлом mysqld занимает в 6 раз меньше памяти, чем без него. Итак, запускаем:/usr/home/lissyara/>echo 'mysql_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>/usr/local/etc/rc.d/mysql-server.sh start
Starting mysql.
/usr/home/lissyara/>
/usr/home/lissyara/>ps -axj | grep mysqld
mysql 44512 1 44510 504 0 S p0 0:00,08 /bin/sh /usr/local/bin
mysql 44530 44512 44510 504 0 SN p0 0:00,15 /usr/local/libexec/mys
mysql 44531 44530 44510 504 0 SN p0 0:00,00 /usr/local/libexec/mys
mysql 44532 44531 44510 504 0 SN p0 0:00,00 /usr/local/libexec/mys
mysql 44533 44531 44510 504 0 SN p0 0:00,00 /usr/local/libexec/mys
root 44548 507 44547 504 2 S+ p0 0:00,02 grep mysqld
/usr/home/lissyara/>


Так много процессов - потому как с тредами (на самом деле он один...).

С 5-кой разобрались. Теперь пример установки, для самой старой версии mysql, что есть в портах - 3.23./usr/home/lissyara/>cd /usr/ports/databases/mysql323-server/
/usr/ports/databases/mysql323-server/>make && make install && make clean
===> Vulnerability check disabled, database not found

You may use the following build options:

WITH_CHARSET=charset Define the primary built-in charset (latin1).
WITH_XCHARSET=list Define other built-in charsets (may be 'all').
WITH_OPENSSL=yes Enable secure connections.
WITH_LINUXTHREADS=yes Use the linuxthreads pthread library.
WITH_PROC_SCOPE_PTH=yes Use process scope threads
(try it if you use libpthread).
BUILD_OPTIMIZED=yes Enable compiler optimizations
(use it if you need speed).
BUILD_STATIC=yes Build a static version of mysqld.
(use it if you need even more speed).
WITHOUT_INNODB=yes Disable support for InnoDB table handler.

===> Extracting for mysql-server-3.23.59.n.20050301_3
^C
/usr/ports/databases/mysql323-server/>


Чтож, опции, в большинстве своём, точно такие же, как и у 5.0. Соответсвенно правим файл /etc/make.conf (приведено без комментов, ибо нового ничё нет - смотрите предыдущий листинг)# Для некоторых, особо тупых приложений, лучше указать версию MySQL,
# что используется, тут. Но - для совсем тупых не поможет и это.
DEFAULT_MYSQL_VER=323

# Директория где лежат порты
PORTSDIR?= /usr/ports

# для сервера
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql323-server
BUILD_OPTIMIZED=yes
BUILD_STATIC=yes
# Единственный пункт, по которому нужны, наверно, пояснения.
# Просто без него у меня не заводилось...
#WITHOUT_INNODB=yes
.endif
# для клиента
.if ${.CURDIR} == ${PORTSDIR}/databases/mysql323-client
.endif


После рихтовки /etc/make.conf снова запускаем компиляцию:/usr/ports/databases/mysql323-server/>make && make install && make clean


Которая по окочании установки клиента вываливается с ошибкой, похожей на ту, что и у mysql 5.0:===> Installing ldconfig configuration file
===> Compressing manual pages for mysql-client-3.23.59.n.20050301_2
===> Registering installation for mysql-client-3.23.59.n.20050301_2
===> Returning to build of mysql-server-3.23.59.n.20050301_3
Error: shared library "mysqlclient.10" does not exist
*** Error code 1

Stop in /usr/ports/databases/mysql323-server.
/usr/ports/databases/mysql323-server/>


Лечение тоже самое - перезагрузка, или/usr/home/lissyara/>/sbin/ldconfig -m /usr/local/lib/mysql
/usr/home/lissyara/>


После чего всё нормально доинсталлируеся. Можно создавать конфиг /usr/local/etc/my.cnf# Этот конфигурационный файл сделан на основе файла для маленьких
# систем - /usr/local/share/mysql/my-small.cnf.
#
# Вообще, конфигурационный файл можно положить в несколько мест:
# /etc/my.cnf
# /var/db/mysql/my.cnf
# /usr/local/etc/my.cnf
# В любом из них mysqld его найдёт, и достанет из него настройки.
# Самое корректное место, если судить по стартовому скрипту, это
# директория где лежат базы данных - /var/db/mysql/my.cnf.


# Опции для всех клиентов MySQL
[client]
# Пароль для подключения к БД
#password = your_password
# Порт на котором висит MySQL
port = 3306
# Сокет MySQL
socket = /tmp/mysql.sock


# Опции MySQL-сервера
[mysqld]
# Порт
port = 3306
# Адрес, который будем слушать (если вам не нужно подключаться к
# MySQL с других машин, то оставьте здесь 127.0.0.1)
bind-address = 127.0.0.1
# Где лежит сокет
socket = /tmp/mysql.sock
# Не использовать средства системных блокировок.
skip-locking

# Вообще не слушать порты TCP/IP. Это может применяться для большей
# безопасности, если все процессы, соединяющиеся с MySQL висят на томже
# хосте, что и mysqld. Все взаимодействия с mysqld будут осуществляться
# через Unix-сокеты, или именованые каналы.
# Заметтьте, что использование этой опции под форточками, без включчения
# именованных каналов (используйте опцию "enable-named-pipe") сделает
# работу MySQL бесполезной - ибо с mysqld никто не сможет соединиться :)
skip-networking
# Если Вы используете InnoDB, то закомментируйте эту опцию
skip-innodb
# С этой опцией MySQL не будет инициализировать библиотеку Berkeley DB,
# что позволит сэкономить большое количество памяти.
skip-bdb
# Hекоторое уникальное число между 2 и 2^32-1. Значения server-id должны
# быть различными на каждом сервере, участвующем в репликации. Если
# значение server-id не определено, оно будет установлено в 1, если
# также не определено значение master-host, оно будет установлено в 2.
# Обратите внимание, что если значение server-id опущено, то головной
# сервер будет отказывать в соединении всем подчиненным серверам, а
# подчиненный сервер - отказывать в соединении головному серверу.
# Таким образом, опускать установку значения server-id можно лишь в
# случае резервного копирования с использованием двоичного журнала.
server-id = 1
# Раскомментируйте эту опцию, для включения логгирования всех запросов
# Заметтьте - тока на время отладки! Потом надо закомментить и
# рестартануть MySQL!
# Файл должен существовать, с соответствующими правами на него:
# touch /var/log/mysql.log
# chown mysql:wheel /var/log/mysql.log
# chmod 640 /var/log/mysql.log
log = /var/log/mysql.log

# Указывает местоположение двоичного журнала обновлений,
# в котором будут вестись записи.
#log-bin=mysql-bin

[mysqldump]
# Если задан этот параметр, то обработчик таблицы при выполнении
# удаления не будет объединять индексы - в некоторых случаях это
# может ускорить данную операцию
quick

[mysql]
# Отключает автоматическое рехеширование. rehash следует использовать
# для получения хеша таблиц и полей. Это обеспечивает более
# быстрый старт mysql.
no-auto-rehash
# Опция, которую рекомендуется раскомментить начинающим :)
# Разрешает выполнять только операции UPDATE и DELETE, используя ключи.
#safe-updates

[isamchk]
key_buffer = 8M
sort_buffer_size = 8M

[myisamchk]
key_buffer = 8M
sort_buffer_size = 8M

[mysqlhotcopy]
# Допускать простой длительностью interactive_timeout секунд (вместо
# wait_timeout секунд) перед закрытием данного соединения.
interactive-timeout


Можно заметить, что отличия от 5.0 минимальны - отсутствуют опции буферов, да и всё, пожалуй. Запускаем:/usr/home/lissyara/>echo 'mysql_enable="YES"' >> /etc/rc.conf
/usr/home/lissyara/>/usr/local/etc/rc.d/mysql-server.sh start
Starting mysql.
/usr/home/lissyara/>ps -axj | grep mysql
mysql 8848 1 8846 504 0 S p0 0:00,07 /bin/sh /usr/local/bi
mysql 8868 8848 8846 504 0 S p0 0:00,06 /usr/local/libexec/my
root 8870 507 8869 504 2 L+ p0 0:00,01 grep mysql
root 8754 5368 8754 5344 1 S+ p1 0:00,02 tail -f /var/db/mysql
/usr/home/lissyara/>


Всё пашет.

Теперь общие вопросы. По дефолту, в MySQL заведено несколько пользователей, типа гостей, и прочих. Я их обычно удаляю - нефига гостям по БД шляться..../usr/home/lissyara/>mysql --database=mysql --execute="SELECT COUNT(*) FROM user"
+----------+
| COUNT(*) |
+----------+
| 4 |
+----------+
/usr/home/lissyara/>mysql --database=mysql --execute="DELETE FROM user \
? WHERE User=''"
/usr/home/lissyara/>mysql --database=mysql --execute="SELECT COUNT(*) FROM user"
+----------+
| COUNT(*) |
+----------+
| 2 |
+----------+
/usr/home/lissyara/>mysql --database=mysql --execute="DELETE FROM user \
? WHERE Host != 'localhost'"
/usr/home/lissyara/>mysql --database=mysql --execute="SELECT COUNT(*) FROM user"
+----------+
| COUNT(*) |
+----------+
| 1 |
+----------+
/usr/home/lissyara/>
/usr/home/lissyara/>mysql --database=mysql --execute="UPDATE user SET \
? Password = PASSWORD('тут ввести пароль рута')"
/usr/home/lissyara/>mysql --database=mysql --execute="FLUSH privileges"
/usr/home/lissyara/>mysql --database=mysql --execute="SELECT * FROM user"
ERROR 1045: Access denied for user: 'root@localhost' (Using password: NO)
/usr/home/lissyara/>


Всё. Без пароля к БД не добраться. Вообще, общая рекомендация - если плохо знаете MySQL - либо займитесь изучением, либо поставьте графический интерфейс, типа phpMyAdmin. Я вначале пошёл по второму пути, щас пытаюсь свернуть на первый :))) Единственное - не забывайте его запаролить.

P.S. При проблемах (не запускается), смотрим лог ошибок:/usr/home/lissyara/>tail -f /var/db/mysql/`uname -a | awk '

Обновлено 28.05.2010 13:49
 

NeTAMS - продолжение (login, bandwith, quota)

E-mail Печать PDF

N

 

NeTAMS - продолжение (login, bandwith, quota)

Автор: schizoid.
Оригинал: http://www.lissyara.su/articles/freebsd/traffic_count/netams_bad_3/

Итак, продолжим про НеТАМС.
1. Ограничение скорости в НеТАМС.
При установки нетамса, появляется примерно такое окошко#make install
Options for netams 3.4.0.r2
[ ] DEBUG Build with debug symbols
[ ] BW Build with bandwidth limitation functionality
[ ] HASH Build with HASH support


Здесь ставим галочку на против строки BW Build with bandwidth limitation functionality .
Если честно, то я так не пробовал. Когда я ставил на сервак, этой опции еще не было, а пересборка производилась таким путем:make distclean && FLAGS=-DHAVE_BW make


Но думаю, что с включенной опцией оно уже умеет делать правильно.
Итак нетамс собрался. (Более подробно по начальной настройке нетамса читайте в предыдущей статье).

Из всего конфига нас интересует сервис processor.
!!! Строки взятые в квадратные скобки [...] - нужно писать в одну строку !!!service processor
lookup-delay 30
flow-lifetime 180
policy oid 0B4940 name ip target proto ip
restrict all drop local pass
[unit net oid 022222 name stah_all ip 10.0.0.0 mask 255.255.255.0 description
"net 10.0.0.0" password 123 no-local-pass acct-policy ip]
unit host oid 033333 name server ip 193.16.хх.хх
[unit host oid 000001 name eugene ip 10.0.0.1 description "ip 192.168.10.20"
email Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript password 123 bw 256.000K acct-policy ip]
[unit host oid 000002 name agent ip 10.0.0.2 description "ip 192.168.10.141"
password 123 bw 256.000K acct-policy ip]
[unit host oid 000003 name chetkiller ip 10.0.0.3 description "ip 192.168.10.21"
password 123 bw 256.000K acct-policy ip]
[unit host oid 000004 name sirius ip 10.0.0.4 description "ip 192.168.10.2"
password 123 bw 256.000K acct-policy ip]
[unit host oid 000005 name TEAC ip 10.0.0.5 description "ip 192.168.10.18"
password 123 bw 256.000K acct-policy ip]


Как видим, ограничение скорости включается весьма просто, простым добавлением bw 256.000K. Так же есть возможность организации асинхронного канала ([bw { speed in speed out | speed } ]). Например:
!!! Строки взятые в квадратные скобки [...] - нужно писать в одну строку !!![unit host oid 000001 name eugene ip 10.0.0.1 description "ip 192.168.10.20"
email Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript password 123 bw 256.000K in 128.000K out acct-policy ip]


Вот собственно и все.

2. Сервис квота в НеТАМС.Основные свойства:
1. Хранение информации о квотах клиентов в базе SQL. В настоящий момент
поддерживается MySQL и Postgres.
2. Возможность задания политики учета (контроля), параметров оповещения по умолчанию.
3. Возможность задания всех параметров квот по трафику индивидуально для
каждого юнита. Это величины входящего, выходящего и суммарного трафика начиная
с момента начала часа, дня, недели и месяца.
4. Возможность задания порога "мягкого срабатывания" в процентах от "жесткой" квоты
индивидуально для каждого юнита.
5. Возможность гибкого управления параметрами оповещения при срабатывании и
возвращении квоты.


Сервис квота в конфиге включается строчками:service quota
policy ip
notify soft {owner}
notify hard {owner} username
notify return {owner}


Опишем опции.
policy ip - Задает политику учета (acct-policy), которая будет использоваться при проверке квот. Это политика по умолчанию для всех, существует возможность переопределить ее для конкретного юнита. Если не указано, используется первая политика из определенных policy XXX сервиса processor.
Секции notify задают кому будет слаться оповещение о превышении квоты (soft - мягкая квота, hard - жестакая квота,return - восстановление работы, когда период действия квоты закончился). Нужно что бы в описании юнита присутствовал его e-mail (опция email Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript ). Здесь {owner} - владелец юнита, username - имя или OID пользователя (администратора).
Далее, задаем квоту:netamsctl "service quota && set name eugene policy ip day 5M sum && exit"


Здесь мы задали юниту eugene суммарную дневную квоту в 5Мб при полиси ip.
Здесь я не все опции показал, многие из них установлены по-умолчанию:soft_treshold 80 - порог мягкой квоты
delay 10 - Интервал времени между периодическими проверками всех юнитов на
наступление момента рабатывания квоты. Задается в секундах.
notify_soft 1 - сообщение шлется владельцу юнита
notify_hard 1 - сообщение шлется владельцу юнита
notify_return 1 - сообщение шлется владельцу юнита


Также можно указать и другие временные интервалы ([hour ... ], [day ...], [week ...], [month ...]), amount - значение квоты (в байтах, но можно использовать модификаторы K, M, G), {in|out} - направление квотируемого трафика, {sum} - суммарный трафик (в обоих направлениях).

Просмотреть установленную квоту можно либо на страничке статистики (только для админа), либо командой netamsctl "show quota".

Отменить установленную квоту можно так:netamsctl "service quota && set name eugene poliсy ip day 0 sum && exit"


Вот и все.

3. Сервис login.
В кратце - это веб-морда для пользователя, с помощью которой он может заблокировать/разблокировать свой аккаунт.
Настраивается так:service login
storage 1
set no name eugene password 123456 inact 3000 abs 0
relogin yes


При рестарте нетамса, создастся еще одна таблица в базе netams.
Здесь опции:
unit_oid - Идентификатор (OID) юнита, является уникальным ключом к базе данных
password - Пароль пользователя. Никогда не пытайтесь поменять его извне программы путем прямой записи в SQL.
inact - Величина таймаута неактивности для данного пользователя
abs - Величина абсолютного таймаута для данного пользователя
last_changed - Время (в формате UNIXTIME) последнего изменения записи
last_opened_time - Время (в формате UNIXTIME), когда был в последний раз предоставлен доступ юниту
last_opened_ip - IP-адрес, с которого был предоставлен доступ юниту
last_opened_mac - MAC-адрес, с которого был предоставлен доступ юниту
def_state - Режим доступа этого юнита по умолчанию (например, сразу после старта программы). 0 означает отсутствие доступа, 1 означает разрешения доступа.
curr_state - Текущий режим доступа этого юнита. 0 означает отсутствие доступа, 1 означает разрешения доступа. К сожалению, по наступлении таймаута не сбрасывается (баг).

Теперь настраиваем апач для понимания cgi скриптов:LoadModule cgi_module libexec/apache2/mod_cgi.so
...
ScriptAlias /cgi-bin/ "/usr/local/www/cgi-bin/"
<Directory "/usr/local/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
...
AddHandler cgi-script .cgi
AddHandler cgi-script .pl


Перегружаем апач.
Далее идем в /usr/ports/net-mgmt/netams/work/netams-х.х.х/cgi-bin (правда если не делали clean при установке, иначе нуно будет залезть внуть пакета). Тут нам понадобятся 3 файла:-rwxr-xr-x 1 root wheel 479 16 фев 02:13 config.cgi
-rwxr-xr-x 1 root wheel 3707 16 фев 02:30 login.cgi
-rwxr-xr-x 1 root wheel 3267 21 июн 2005 netams_api.pl


Копируем все это счастье в /usr/local/www/cgi-bin-dist, и подправляем под свою конфигурацию. А именно:#
#-----------------------------------------------------------------------------
# $Id: config.cgi,v 1.5 2005/04/06 16:21:49 anton Exp $

# Data required to do a script login, change this
# login to netams
$sc_host="localhost"; $sc_port=20001; $sc_user="LOGIN"; $sc_passwd="PASSWORD";

#login to database
$mysql_host="localhost"; $mysql_login="netams"; $mysql_password="PASSWORD";
$mysql_dbname="netams";

#log events
$log_to_events="yes";

#URL to statistic
$statistic_url="/stat";


Ну в прнципе и все. Еще в login.cgi есть описание картинки, которая отображается в веб-морде. Там можно изменить путь к любой своей картинке, подходящей по размеру ;). Я заменил на свою:<tr align=center><td width=100%><img src="/stat/images/logo_sm.jpg" width="376"
height="60" alt="" border="0" align=left>


Ну вот вроде и все, пробуем заходить по адресу http://my.domen.ru/cgi-bin/login.cgi с логином/паролем, что указаны в set no name eugene password 123456 inact 3000 abs 0. Т.е. логин admin, пароль 123456.

Должно все получиться, иначе смотрим логи апача :)

P.s.: есть мысль сделать доступ к веб-морде по протоколу https, но пока не доходят руки. Когда дойдут - опишу ;)

P.p.s: выяснилось, что веб-мордие от версии 3.4.0 не работоспособно, берите или от версии 3.3.5 или 3.4.1.
P.p.p.s: Синтаксис выше приведенных команд касается NeTAMS версии 3.3.5. Для 3.4.х он немного отличается.

Обновлено 28.05.2010 18:18
 

Прокси-сервер SQUID

E-mail Печать PDF

Автор: lissyara.
Оригинал: http://www.lissyara.su/archive/squid_old/



Прокси-сервер - это программа которая выполняет роль "прокладки" между браузером пользователя и WWW сервером. Через него проходят все запросы пользователя по протоколу http и ответы серверов пользователю. Он может фильтровать проходящий траффик по тем или иным признакам, а так же разграничивать доступ к интернету по протоколу http (в случае если используется непрозрачный прокси-сервер).
SQUID - пожалуй, самый лучший прокси под UNIX платформу. Есть сборки и для win32, но, на мой взгляд, это уже совсем не то :) Очень богатая функциональность:
— Поддержка протоколов HTTP, FTP, SSL, HTCP, CAPR
— Каскадирование серверов
— возможность прозраного проксирования
— поддержка протокола SNMP
— кэширование DNS-запросов
Собираем, операционка - FreeBSD4.11. Обновляем дерево портов и приступаем:/root/>cd /usr/ports/www/squid
/usr/ports/www/squid/>make && make install && make clean


Появляется синенькое окошко с кучей опций. Я выбрал:
SQUID_UNDERSCORES - разрешил запрещённый символ подчёркивания(_) в именах - мало ли идиотов в интернете...
SQUID_CHECK_HOSTNAMES - пусть проверяет имена.
SQUID_RCNG - стартовый скрипт squid
Он качает много-много патчей и собирается (впрочем, если выпустят новую версию - то патчей первое время не будет :)). После чего топаем в /usr/local/etc/squid и редактируем squid.conf до такого состояния (все настройки даны для прозрачного прокси-сервера, у "непрозрачного" будут отсутствовать пункты httpd_accel_*):http_port 3128
icp_port 0
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_mem 128 MB
maximum_object_size 8092 KB
maximum_object_size_in_memory 512 KB
cache_dir ufs /usr/local/squid/cache 2048 64 256
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
cache_mgr admin@my_domain.ru
visible_hostname mail.my_domain.ru
tcp_outgoing_address 222.222.222.222
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
redirect_program /usr/local/etc/squid/redirector.pl
redirect_children 10

acl all src 0.0.0.0/0.0.0.0
acl allowed_sites dstdomain \
"/usr/local/my_doc_smb/squid/allowed_sites.conf"
acl limited_IP src \
"/usr/local/my_doc_smb/squid/limited_IP.conf"
acl localhost src 127.0.0.0/8
acl our_networks src 192.168.0.0/24
#acl denied_sites dstdomain \
#"/usr/local/my_doc_smb/squid/denied_ext.conf"
#http_access deny denied_sites
http_access allow allowed_sites
http_access deny limited_IP
http_access allow our_networks
http_access allow localhost
http_access deny all

httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_uses_host_header on

coredump_dir /usr/local/squid/cache
pid_filename /usr/local/squid/logs/squid.pid


Это - самый минимум конфигурации, для прозрачного проксирования, и списков людей, которым можно посещать лишь малое количество сайтов (сайты описаны в файле allowed_sites.conf, а ip компов в файле limited_IP.conf), и списка сайтов на которые ходить нельзя никому (denied_ext.conf). Файлы выглядят примерно так:/usr/local/my_doc_smb/squid/allowed_sites.confwww.yandex.ru
mail.yandex.ru
www.ya.ru
www.mail.ru


/usr/local/my_doc_smb/squid/limited_IP.conf192.168.0.8
192.168.0.56
192.168.0.89


/usr/local/my_doc_smb/squid/denied_ext.confwww.sex.com
www.tetki.ru
www.soska.ru
www.porewo.com


По остальным цифирькам:
cache_mem - сколько памяти под кэш потратит (реально в 2.5 раза больше зажрёт. Любит он оперативку. У меня в точно такой конфигурации занимает 297 мегов памяти, примерно через день - когда наберёт объектов в память)
maximum_object_size - максимальный размер объекта сохраняемый на диск (частенько неслушается и сохраняет обекты раза в 2-3 большие)
maximum_object_size_in_memory - максимальный размер объекта хранимого в оперативке
cache_dir - директория для кэша. Должна существовать и юзер от которого работает сквид должен иметь право писать в неё. Там же - ufs - тип файловой системы на которой расположена папка кэша, 2048 - максимальный размер кэша, 64 - число директорий первого уровня
256 - число директорий второго уровня (на директориях экономить не советую, сам столкнулся - кончились папки, но лимит по размеру кэша ещё не был достигнут, инет в итоге работает, но жутко тормозит. Как на модеме хреновеньком.... На 10-ти мегабитной-то линии....)
cache_access_log - местоположение файла логов доступа пользователей к инету - кто, куда, сколько.
cache_log - лог собственно сквида - результаты запусков-остановок, результаты работы с кэшем.
cache_store_log - лог что сохранено в кэше на диске
cache_mgr - е-майл администратора, выводится при ошибках или если доступ к странице запрещён.
visible_hostname - видимое снаружи имя хоста
tcp_outgoing_address - внешний адрес сервера
redirect_program - программа редиректор (занимается анализом запрашиваемых URL и может производить с ними какие-то действия, у меня раньше, таким макаром был прикручен антивирус на проверку входящего http-траффика, а щас висит скрипт срезающий порнуху, от антивиря пришлось отказаться - примерно 30-40% лишнего траффика было, т.к. сайты нынче в основном динамические...)
redirect_children - число процессов программы-редиректора
Затем идут ACL-ы, разрешающие или запрещающие пользование http и поддержка прозрачного проксирования. ACL denied_sites закомментирован, можно пользоваться им самим, но я предпочитаю натравить на него внешнюю программу-редиректор, тогда можно будет вносить в него не сайты целиком, а ключевые слова по которым будет резаться URL - типа sex, deffki, porewo.... Если в запросе будет такое слово (неважно, в середине пути, в имени сервера, или названии файла) то не такой адрес пользователя не пустят. Можно таким макаром зарезать всю графику, например, написать jpg, jpeg, png, gif и всё - графики больше нет :) Можно резать флэши, файлы с нежелательными расширениями, да что угодно....
Учтите, строки типа acl allowed_sites dstdomain "/usr/local/my_doc_smb/squid/allowed_sites.conf" - это одна строка, просто у меня в листинге конфига не влезло и я её так перенёс.
coredump_dir - директория куда будет писаться дамп программы в случае критической ошибки и последующего "выпадания в корку"
pid_filename - имя файла где хранится идентификатор запущенного squid`a
Файлы с запретами и разрешениями (/usr/local/my_doc_smb/squid/allowed_sites.conf,
/usr/local/my_doc_smb/squid/limited_IP.conf,
/usr/local/my_doc_smb/squid/denied_ext.conf) так странно лежат по причине, что из локалки у меня к ним открыт доступ по самбе, просто мне их так удобней редактировать :)
Создаём файлы, папки и запускаем squid:/usr/local/etc/squid/>mkdir -p my_doc_smb/squid
/usr/local/etc/squid/>mkdir -p mkdir /var/log/squid
/usr/local/etc/squid/>touch /usr/local/my_doc_smb/squid/allowed_sites.conf
/usr/local/etc/squid/>touch /usr/local/my_doc_smb/squid/limited_IP.conf
/usr/local/etc/squid/>touch /usr/local/my_doc_smb/squid/denied_ext.conf
/usr/local/etc/squid/>touch /usr/local/etc/squid/redirector.pl
/usr/local/etc/squid/>chmod +x redirector.pl
/usr/local/etc/squid/>chown -R squid:wheel /var/log/squid/
/usr/local/etc/squid/>echo 'squid_enable="YES"' >> /etc/rc.conf
/usr/local/etc/squid/>squid -z
2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl
2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl
2005/09/20 14:51:04| aclParseAclLine: WARNING: empty ACL: acl
2005/09/20 14:51:04| Creating Swap Directories


Всё нормально, не считая ругани на пустые файлы ACL. На это можно не обращать внимания, или забить туда какие-ньть адреса. Тогда он ругаться перестанет.
Вот содержимое файла /usr/local/etc/squid/redirector.pl#!/usr/bin/perl

$0 = 'redirect' ;
$| = 1 ;

open (IN_FILE, "/usr/local/my_doc_smb/squid/denied_ext.conf") || die $!;
my @tmp_data = <IN_FILE>;
chomp @tmp_data;
push @banners, map { qr /\Q$_\E/ } grep { ! /^\s*$/ } @tmp_data;
close IN_FILE;

while (<>) {
($url, $who, $ident, $method) = /^(\S+) (\S+) (\S+) (\S+)$/ ;
$url = 'http://mail.my_domain.ru/zaglushka.jpg'
if grep ($url=~/$_/i, @banners) ;
print "$url $who $ident $method\n" ;
}


Это простенький перловый скрипт, перебирающий переданный ему URL на соответствие шаблонам лежащим в файле denied_ext.conf, и если они подходят, то вместо этого УРЛа он отдаёт другой - http://mail.my_domain.ru/zaglushka.jpg по которому лежит мелкий рисунок серого цвета (белый неудобно - у меня до кучи он баннеры режет и белые дыры на страницах не смотрятся вообще...)
Ну, а теперь пристегните ремни, сейчас мы попробуем взлететь со всем этим хозяйством (копирайт из старого-старого анекдота):/usr/local/etc/squid/>../rc.d/squid.sh start
Starting squid.
2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl allowed_sites
2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl limited_IP
2005/09/20 15:28:35| aclParseAclLine: WARNING: empty ACL: acl denied_sites
/usr/local/etc/squid/>ps -ax | grep squid
73072 ?? Ss 0:00.00 /usr/local/sbin/squid -D
73074 ?? D 0:04.75 (squid) -D (squid)
73087 p0 D+ 0:00.00 grep squid
/usr/local/etc/squid/>ps -ax | grep perl
73075 ?? Is 0:00.03 redirect (perl)
73076 ?? Is 0:00.03 redirect (perl)
73077 ?? Is 0:00.03 redirect (perl)
73078 ?? Is 0:00.03 redirect (perl)
/usr/local/etc/squid/>sockstat | grep perl
squid squid 73074 14 tcp4 127.0.0.1:3248 127.0.0.1:4480
squid squid 73074 15 tcp4 127.0.0.1:3922 127.0.0.1:2536
squid squid 73074 16 tcp4 127.0.0.1:2393 127.0.0.1:3906
squid squid 73074 21 tcp4 *:3128 *:*
squid squid 73074 22 udp4 *:3401 *:*
squid squid 73072 4 dgram syslogd[83]:3
squid perl 73076 0 tcp4 127.0.0.1:4371 127.0.0.1:1506
squid perl 73076 1 tcp4 127.0.0.1:4371 127.0.0.1:1506
squid perl 73075 0 tcp4 127.0.0.1:1596 127.0.0.1:2215
squid perl 73075 1 tcp4 127.0.0.1:1596 127.0.0.1:2215


Всё нормально. Добавляем правило в файрволл (ipfw), до divert natd:fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80 via fxp0


Где fxp0 - внешний интерфейс, и всё, можно работать. Если на ходу возникает необходимость переконфигурить squid то перезапускать необязательно, можно дать команду/usr/local/etc/squid/>squid -k reconfigure


или/usr/local/etc/squid/>killall -1 squid


этого вполне достаточно.
Заполняйте файлы с разрешениями-запретами, и пользуйтесь. Клиентов настраивать не нужно - достаточно указать шлюзом по-умолчанию машину со squid - всё остальное сделает ipfw - перекинет пакеты на squid.

Обновлено 28.05.2010 13:51
 

Самба как контроллер домена без использования LDAP

E-mail Печать PDF

Самба как контроллер домена без использования LDAP

Автор: lissyara.
Оригинал: http://www.lissyara.su/articles/freebsd/programms/samba_as_pdc_without_ldap/


Это - обновление старой одноимённой статьи. Как и старая - эта полностью копи-пастная - всё работает "из коробки" =) Причина обновления - недоработки старой статьи, кривости в некоторых местах (дополнительные параметры пользователя не редактировались). Ну и столкнулся с практической реализаций решения - попросили сделать в одной конторе.
Задача - поднять домен с целью централизованного хранения учётных записей пользователей, выполнения каких-то скриптов при логине и т.п. Больше оно и не может - ибо уровень домена - NT4.

Система - FreeBSD 7.2-STABLE. Ставим самбу:server$ cd /usr/ports/net/samba3
server$ make install clean


В вылезшем окошке выбираем следующие опции:[X] WINBIND With WinBIND support
[X] ACL_SUPPORT With ACL support
[X] SYSLOG With Syslog support
[X] QUOTAS With Disk quota support
[X] UTMP With UTMP accounting support
[X] POPT With system-wide POPT library
[X] PCH With precompiled headers optimization


Рисуем конфиг /usr/local/etc/smb.conf:#
[global]
workgroup = SRO
netbios name = SERVER
server string = SAMBA Domain Controller For SRO


# Скрипт добавления пользователя
add user script = /usr/local/etc/samba/add_user_script.sh "%u"
# Скрипт удаления пользователя
delete user script = /usr/sbin/pw userdel "%u" -r
# Скрипт переименованя пользователя
# (следующие две строки - на самом деле одна. невлезает ..)
rename user script =
/usr/local/etc/samba/rename_user_script.sh "%uold" "%unew"
# Скрипт перезапуска самбы (Вообще, в man smb.conf, предлагается
# ребутить или класть всю машину. Перебор, по моему... Хотя -
# у меня это не работает. Такчто - пофиг.)
shutdown script = /usr/local/etc/samba/shutdown_script.sh
# Скрипт добавления новой группы
add group script = /usr/sbin/pw groupadd "%g"
# Скрипт удаления группы
delete group script = /usr/sbin/pw groupdel "%g"
# Скрипт добавления пользователя в группу
# (следующие две строки - это одна, в ширину сайта на вписывается)
add user to group script =
/usr/local/etc/samba/add_user_to_group_script.sh "%g" "%u"
# Скрипт установки первичной группы для пользователя
set primary group script = /usr/sbin/pw usermod "%u" -g "%g"
# Скрипт удаления пользователя из группы
# (следующие две строки - это одна, в ширину сайта на вписывается)
delete user from group script =
/usr/local/etc/samba/delete_user_from_group_script.sh "%g" "%u"
# Скрпит для добавления аккаунта компьютера
add machine script = /usr/local/etc/samba/add_machine_script.sh "%u"
# Скрипт проверки пароля (чтобы не пихали 12345 и прочее. Должен вернуть 0
# если пароль нормальный, и что-то другое - если нет. Пароль передаётся
# на стандартный ввод скрпита)
check password script = /path/to/password/check/script.sh
# Скрпит - чё елать при получении сообщений по winpopup (из man`a)
message command = /bin/mail -s 'message from %f on %m' root < %s; rm %s

# added by lissyara 2009-09-04 in 08:50
passdb backend = tdbsam:/usr/local/etc/samba/passdb.tdb
# added by lissyara 2009-09-04 in 09:36
display charset = koi8-r
unix charset = koi8-r
dos charset = koi8-r


# Где лежат скрпиты, выполняемые доменными компами при загрузке
#logon script = scripts\logon.bat
logon script = net_map.bat
domain logons = Yes
os level = 85
preferred master = Yes
domain master = Yes
idmap uid = 5000-9999
idmap gid = 5000-9999

# Кого не пускать
# в итоге она у меня раскомментирована, но настройку
# я делал с закомменченой.
# настоятельно рекомендую расккомментить, после настройки и введения
# самой машины в домен
#invalid users = root


#interfaces = 192.168.120.253/24
security = user
# Включаем поддержку WINS
wins support = yes
# Указываем виндовый WINS из другого домена - на время, пока он ещё жив
# wins server = 192.168.0.251
dns proxy = yes
time server = True

# Перемещаемые профили (если не указать эти пункты пустыми -
# профили у пользователей будут перемещаемые)
# logon path = \\lissyara\profiles\%U
logon path =
logon home =
template homedir =

# логгинг
# log level = 10 passdb:10 auth:10 winbind:10
# log level = 6
log file = /var/log/samba/log.%m

# added by lissyara 2009-09-04 in 16:22 MSK
admin users = "@SRO\Domain Admins"


[IPC$]
path = /tmp


[print$]
comment = Printer Drivers Share
path = /usr/home/samba/drivers

[netlogon]
path = /nethome/samba/netlogon
read only = no
browseable = yes

[profiles]
path = /nethome/samba/profiles
browseable = yes
create mask = 0600
directory mask = 0700
read only = no
guest ok = yes


Набор шар - опционален, обязательны лишь первые три. Далее - рисуем описанные в конфиге скрипты по управлению пользователями и группами, но, не забываем добавить в /etc/rc.conf такую строку:samba_enable="YES"


Скрипт добавления пользователя для компьютера добавляемого в домен - add_machine_script.sh:#!/bin/sh

# скрипт добавления машины
/usr/sbin/pw useradd "$1" -d /dev/null \
-s /sbin/nologin -L "russian" -m \
-g computers -c "computer_account"

# отладка
echo "added komp '$@' in `date +%Y-%m-%d` `date +%H:%M:%S`" \
>> /tmp/`basename $0`.log


Скрипт добавления пользователя - add_user_script.sh:#!/bin/sh

# скрипт добавления пользователей
#/usr/sbin/pw useradd "$1" -d /usr/home/samba/profiles/"$1" \
# -s /sbin/nologin -L "russian" -m -g ntusers -c "$1"
/usr/sbin/pw useradd "$1" -d /dev/null \
-s /sbin/nologin -L "russian" -m -g ntusers -c "$1"
# отладка
echo "added user '$@' in `date +%Y-%m-%d` `date +%H:%M:%S`" \
>> /tmp/`basename $0`.log


Добавление пользователя в группу - add_user_to_group_script.sh:#!/bin/sh

/usr/sbin/pw groupmod "$1" -m "$2"

# отладка
echo "added user '$2' to group '$1' ($@) in `date +%Y-%m-%d` \
`date +%H:%M:%S`" >> /tmp/`basename $0`.log


Скрипт для удаления пользователя из группы - delete_user_from_group_script.sh:#!/bin/sh

/usr/sbin/pw groupmod $1 -d $2


echo "deleted user '$2' from group '$1' ($@) in `date +%Y-%m-%d` \
`date +%H:%M:%S`" >> /tmp/`basename $0`.log


Скрипт переименовывания пользователя - rename_user_script.sh:#!/bin/sh

/usr/sbin/pw usermod $1 -l $2

echo "renamed user '$1' --> '$2' ($@) in `date +%Y-%m-%d` \
`date +%H:%M:%S`" >> /tmp/`basename $0`.log


Скрипт перезапуска сервиса - shutdown_script.sh:#!/bin/sh

# Перезапукаем самбу (в бакгроунде - обязательно!)
/usr/local/etc/rc.d/samba restart &


В принципе, все эти скрипты не обязательны. Все они состоят из одной строки, и прекрасно вставляются в конфиг самбы. Вот тока логгировать так проще, при отладке и т.п. Ну и потом по-быстрому глянуть - чё происходило на машине - тоже можно. Так что - ваш выбор - что хотите логгировать - через скрипты, что не хотите - пямо в конфиг команду вписывайте. На мой взгляд - как мимнимум - добавление/удаления пользователей, тоже самое для модификации групп пользователя.

Написанные скрипты делаем исполняемыми и запускаем самбу:server$ chmod +x /usr/local/etc/samba/*.sh
server$ /usr/local/etc/rc.d/samba restart


Заводим пользователя root в самбе (в принципе, опять же, не обязательно - можно дальше действовать от административного пользователя, котрый и будет позднее постоянно использоваться. Но - на этом этапе так будет прощще):server$ smbpasswd -a root
New SMB password:
Retype new SMB password:
Added user root.


Рисуем скрипт добавления нужных системных групп, и маппинга виндовых групп на системные:#!/bin/sh
#!/bin/bash
#### Keep this as a shell script for future re-use

pw groupadd ntadmins
pw groupadd ntusers
pw groupadd computers


net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d
net groupmap add ntgroup="Domain Users" unixgroup=ntusers rid=513 type=d
net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d
net groupmap add ntgroup="Domain Computers" unixgroup=computers type=d


Как вы его обзовёте и куда положите - ваше дело. Использоваться он будет лишь один раз. Запускаем:server$ sh samba_group.sh
Successfully added group Domain Admins to the mapping db as a domain group
Successfully added group Domain Users to the mapping db as a domain group
Successfully added group Domain Guests to the mapping db as a domain group
No rid or sid specified, choosing a RID
Got RID 3007
Successfully added group Domain Computers to the mapping db as a domain group


Добавляем в администраторов будущего домена нужных пользователей (они, разуммется должны уже быть в системе. Я добавляю рута и nik - человек который будет на том конце провода заниматься машинками с виндой):pw groupmod ntadmins -m root
pw groupmod ntadmins -m nik
server$ id nik
uid=1001(nik) gid=0(wheel) groups=0(wheel),1982(ntadmins)
server$


Зачем рута? Просто все кому делал первым делом пытались залезть на виндовые машины и порулить доменом именно им. (с учётом что я не описываю как заводил того же nik в самбе - так же как и рута - вполне наверно логично...)
Вводим контроллер домена в домен:server$ net join server
Password:
Joined domain SRO.
server$


Всё. Для верности можно рестартануть самбу и пытаться ввести в домен машины/залогиниться на них юзерами (опять же - если дословно по статье сделано - то только root получиться. ибо в самбе пока больше нет других пользователей).

Оговорки и примечания. В общем - повторяюсь то же что и к предыдущей статье - при удалении пользователя из самбы - грохается системная учётка. Делайте проверку, или юзайте отдельную учётку. При наличии в системе учётки совпадающей по логину с создаваемой - новйо не создаётся - используется существующая.
Сразу отвечаю на впорос - почему не самба 3.3 а 3.0. В 3.3 скрипты, по какой-то причине, выполняются от обычного пользователя, который в винде галки ставит - nik в данном случае. Естессно они не работают. Либо sudo мутить, и ловить остальные глюки, либо - использовать проверенное решение. Я предпочёл последнее.
Для администрирования качаем утилиты http://support.microsoft.com/kb/173673/sr-cs/




Обновлено 28.05.2010 13:52
 


Страница 6 из 6.

  • Вопросы по поводу написанных статей можно обсудить в нашем сообществе в Вконтакте / Questions about written articles can be discussed in our community in Vkontakte Вопросы по поводу написанных статей можно обсудить в нашем сообществе в  Вконтакте / Questions about written articles can be discussed in our community in Vkontakte
Яндекс.Метрика