понедельник, 14 сентября 2009 г.

Настройка системы учета трафика на основе netams-3.4.2c

Начальник захотел узанть статистику по пользователям сети, типа - кто чего, сколько и в какое время. Встал вопрос об установке и настройке системы учета трафика (биллинга). Ну вот собственно как я это делал.

Все команды задавал от прав пользователя root

1. Скачал netams-3.4.2c с официального сайта http://netams.com/files/netams-3.4.2c.tar.gz

Для установки потребуются:

- MySQL или (postgreSQL) - сервер БД для хранения статистики

- Apache - Web-сервер, чтобы пользователи и начальник могли смотреть статистику не вдаваясь в подробности.

Как настраивать эту связку я уже описывал в статье

2. Устанавил недостающие пакеты набрав команду:

'apt-get install libc6-dev libmysqlclient15-dev libapache2-mod-perl2 php5 php5-mysql binutils cpp gcc g++ make libssl-dev ibnet-telnet-perl libdbd-mysql-perl libdbi-perl libdate-calc-perl libgd-graph-perl'

3. Устанавил библиотеку libpcap

'apt-get install libpcap0.8-dev'

4. По умолчанию библиотека libipq.a не устанавливается. Поэтому пришлось поставить:

'apt-get install iptables-dev'

5. Поставил пакет который включает в себя файл lhash.h

'apt-get install libcurl3-openssl-dev'

Если какого-то пакета в стандартной поставке Debian не найдется, то придется воспользоваться репозиторием из Интернета http://www.debian.org/distrib/packages#search_packages. Только вот текущая стабильная версия уже Lenny, а если нужна платформа Etch, то берем пакеты OldStable.

Для сборки пакета со всеми его возможностями необходимо поставить ВСЕ вышеуказанные пакеты!

6. Расппаковал архив, в каталог /usr/src/netams-3.4.3c

'tar -zxvf netams-3.4.2c.tar.gz /usr/src'

7. Перешел в каталог usr/src/netams-3.4.2c

'cd /usr/src/netams-3.4.2c'

8. Сконфигурировал пакет

'./configure.sh'

Напишет что-то типа:

##########################################################

## Configuring NeTAMS for build targets... ##

Linux operating system...

Will have LIBIPQ support

Optional features: Use_cli_enable BW_limit Fast_FW_checks Layer7_filter Hash_database

Will have MYSQL support

[ /usr/lib /usr/include/mysql ]

Will have BILLING service

Will have DEBUG flag set

Will have RADIUS support

## Configuration file was built. ##

##########################################################

Обратил внимание на строчку Will have MYSQL support [ /usr/lib /usr/include/mysql]. Всё бы ничего, да вот при таком раскладе конфигурации скомпилированный модуль netams не увидел базу MySQL.

Я долго не мог понять в чем же дело и в конце концов просто сменил в файле Rules.Make

LIB+ = -lmysqlclient –L/usr/lib на LIB+ = -lmysqlclient –L/usr/lib/mysql

И так скомпилировал…

Замечу, что ежели смена конфигурации была уже после того, как однажды был скомпилирован модуль командой make, то после внесенных исправлений в файле Rules.Make необходимо очистить собранный ранее модуль модуль командой:

'make distclean && make'

После чего собственно и компилирую модуль

'make && make install'

9. Переименовал пример конфига собственно в конфиг:

'cp /etc/netams.conf.sample /etc/netams.conf'

Замечание: на многих сайтах, где описывают установку Netams файл конфигурации обзывают netams.cfg.example и netams.cfg. Так вот в версии 3.4.2с эти файлы называются netams.conf.sample и netams.conf соответственно (см. файл Rules.Make, опция CONFIG_FILE_NAME).

10. В FAQ официального сайта написано "Специально создавать базу данных не нужно (MySQL)." Но! Только в том случае если у пользователя root нет пароля. Тогда Netams все сделает сам. В моем же случае, устанавливая mysql, я закрыли пользователя root паролем, поэтому необходимо создать базу самостоятельно. Все это я делаю из консоли:

'mysql -u root -p '

mysql>connect netams;

mysql>grant select,insert,delete,update,create on netams.* to netams;

mysql>grant select,insert,delete,update,create on netams.* to netams@localhost;

mysql>set password for 'netams'@'localhost'=password('****');

mysql>set password for 'netams'@'%'=password('****');

mysql>flush privileges;

mysql>\q

11. Правлю netams.conf под свои нужды:

#NeTAMS version 3.4.1 (template config)

debug none

language ru

user name admin real-name Admin password 123 email admin@note.by permit all

#services configuration

service server 0

login local

listen 20001

max-conn 6

service processor 0

lookup-delay 60

flow-lifetime 300

policy oid 06521A name allip target proto ip

policy oid 06521B name www target proto tcp port 80 81 21 22 443

policy oid 06521C name mail target proto tcp port 25 110

policy oid 06521D name isq target proto tcp port 5190

policy oid 06521E name local-traffic target file /etc/local.txt

policy oid 06521F name perring target file /etc/perring.txt

restrict all pass local pass

unit group oid 09521A name HomeNet acct-policy %local-traffic %perring www mail isq allip

unit user oid 05E69A name devilja password 102 ip 192.168.1.2 description "Violentiy Dmitry app.206" parent HomeNet acct-policy %local-traffic %perring www mail isq allip

unit user oid 05E69B name tiran password 103 ip 192.168.1.3 description "Bykov Ruslan app.411a" parent HomeNet acct-policy %local-traffic %perring www mail isq allip

unit user oid 05E69C name demon password 104 ip 192.168.1.4 description "Rendov Dmitry app.212" parent HomeNet acct-policy %local-traffic %perring www mail isq allip

unit net oid 0E4B33 name LAN ip 192.168.1.0/24 acct-policy %local-traffic %perring www mail isq allip

storage 1 all

service storage 1

type mysql

user netams

password ********

host localhost

dbname netams

service data-source 1

type libpcap

source eth0

rule 11 "ip"

service quota 0

policy ip

notify soft {owner}

notify hard {owner} admin

notify return {owner}

storage 1

service alerter 0

report oid 06100 name rep1 type traffic period day detail simple

smtp-server localhost

service html 0

path /var/www/netams/stat

run 10min

htaccess yes

client-pages all

url http://192.168.1.1/netams/

language ru

service scheduler

oid 08FFFF time 10min action "html"

#end

В конфигурации я отметил важные места. Все остальное можно почерпнуть с официального сайта - http://netams.com/doc/doc_services.html

Для быстрой проверки работоспособности запустил netams

'netams –l'

Замечание: Ключ – l создает и дописывает сообщения о работе в лог-файл (по умолчанию это /var/log/netams.log)Проверяю список процессов

'ps aux | grep netams'

Вижу netams, знач все нормально.

12. Замечание: стартовый скрипт, который собирается и устанавливается в init.d с названием netams.init.d у меня напрочь отказался управлять Netams-ом. Поэтому я взял за основу файл стартового скрипта для Linux из /usr/src/netams/addon/netams-linux-stratup.sh:

'cp /usr/src/netams/addon/netams-linux-stratup.sh /etc/init.d/netams.sh'

И дописал его до удобоваримого вида:

#! /bin/sh

### BEGIN INIT INFO

# Provides: netams.sh

# Required-Start:

# Required-Stop:

# Default-Start: 3

# Default-Stop:

# Short-Description: Run /etc/init.d/netams.sh if it exist

### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

daemondir=/usr/local/sbin

path_to_etc=/etc

case "$1" in

start)

sleep 3;

/bin/mkdir -p /var/run/netams

if [ -x $daemondir/netams ]; then

if [ -f $path_to_etc/netams.conf ]; then

$daemondir/netams -lf $path_to_etc/netams.conf >/dev/null

echo ""

echo "NeTAMS 3.4.2 started..."

fi

fi

;;

restart|reload|force-reload)

echo "Error: argument '$1' not supported" >&2

exit 3

;;

stop)

killall netams

rmdir /var/run/netams

echo ""

echo "NeTAMS 3.4.2 stoped..."

;;

*)

echo "Usage: $0 start | stop"

;;

esac

Я не настраивал пока админку и NaWt. Но если кому то интересно – читайте форум http://netams.com/doc/doc_services.html

понедельник, 1 июня 2009 г.

Установка LAMP (Linux Apache+MySQL+PHP)

Все команды выполнялись от прав root'a.

Решил настроить LAMP под Debian'ом.

LAMP — акроним, обозначающий набор (комплекс) серверного программного обеспечения, широко используемый во Всемирной паутине. LAMP назван по первым буквам входящих в его состав компонентов:
* Linux — операционная система GNU/Linux;
* Apache – веб-сервер;
* MySQL — СУБД;
* PHP — язык программирования, используемый для создания веб-приложений.
Акроним LAMP может использоваться для обозначения:

1.Инфраструктуры веб-сервера
2.Парадигмы программирования
3.Пакета программ
Хотя изначально эти программные продукты не разрабатывались специально для работы друг с другом, такая связка стала весьма популярной, в первую очередь из-за своей низкой стоимости (все её составляющие являются открытыми и могут быть бесплатно загружены из Интернета). Набор LAMP входит в состав большинства дистрибутивов GNU/Linux и предоставляется многими хостинговыми компаниями. (Взято с http:/ /ru.wikipedia.org).

1. Устанавливаю apache и php - 'apt-get install apache2 php5 libapache2-mod-php5 php5-gd' если кто пожелает использовать php4, ставит командой - 'apt-get install apache2 php4 libapache2-mod-php4 php4-gd'.

Конфигурационные файлы Apache находятся по пути '/etc/apache2/apache2.conf', а папка веб-сайта по умолчанию - '/var/www'.

2. Проверяю корректность установленного php, для чего создаю файл test.php в папке /var/www - 'touch /var/www/test.php'. Затем радактирую созданный файл — 'nano /var/www/test.php' до следующего вида:

Просматриваю в браузере — 'http:\ \ip_setevoi_LAN\test.php' или http:\ \localhost\test.php', скрипт должен выдать подробную информацию о настройках php.

3. Настраиваю Apache,для чего редактирую файл — 'nano /etc/apache2/sites-enabled/000-default' В начале файла добавляю опции ServerAdmin и ServerName, а также нахожу опцию AllowOverride и измению её с значения None на All. Закомментировал RedirectMatch. Т.е. Получилось следующее:
NameVirtualHost *
ServerAdmin admin@server.ex
ServerName "www.server.ex"
DocumentRoot /var/www/
Options FollowSymLinks
AllowOverride None
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
# This directive allows us to have apache2's default start page
# in /apache2-default/, but still have / go to the right place
# RedirectMatch ^/$ /apache2-default/
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/

Далее исправляю кодировку по-умолчанию с UTF-8 на Windows-1251 — 'nano /etc/apache2/conf.d':
AddDefaultCharset Windows-1251.

4. А вот теперь довожу конфигурацию Apache «напильником» до ума, «обрезая» настройки по самое не хочу — 'nano /etc/apache2/apache2.conf':
KeepAlive on
KeepAliveTimeout 5
StartServers 2
MinSpareServers 2
MaxSpareServers 5
MaxClients 20
MaxRequestsPerChild 10000

Настройки достаточны для локальной сети из 30 машин исключительно для просмотра статистики. Если кому-то понадобятся другие настройки надеюсь приведенная ниже информация позволит лучше разобраться в настройках.

MaxClients

Директива MaxClients устанавливает максимальное количество параллельных запросов, которые будет поддерживать сервер. Apache не будет порождать больше процессов/потоков чем MaxClients. Значение MaxClient не долно быть слишком маленьким (иначе много клиентов останутся необслуженными), но и не стоит устанавливать слишком большое количество - лучше не обслужить часть клиентов чем исчерпать все ресурсы, залезть в своп и умереть под нагрузкой. Хорошим может быть значение MaxClients = количество памяти выделенное под веб-сервер / максимальный размер порожденного процесса или потока. Для статических файлов apache использует около 2-3 Мб на процесс, для динамики (php, cgi) - зависит от скрипта, но обычно около 16-32 Мб.Если сервер уже обслуживает MaxClients запросов, новые запросы попадут в очередь, размер которой устанавливается с помощью директивы ListenBacklog.

MinSpareServers, MaxSpareServers, и StartServers

Т.к. создание потока, и особенно процесса - дорогая операция, apache создает их заранее. Директивы MaxSpareServers и MinSpareServers устанавливают как много процессов/потоков должны ожидать в готовности принять запрос (максимум и минимум). Если значение MinSpareServers слишком маленькое и неожиданно приходит много запросов, apache вынужден будет создавать много новых процессов/потоков, что создаст дополнительную нагрузку в этой стрессовой ситуации. С другой стороны, если MaxSpareServers слишком велико, apache будет сильно нагружать систему этими процессами, даже если количество клиентов минимально.
Постарайтесь установить такие MinSpareServers и MaxSpareServers, чтобы apache не создавал более 4 процессов/потоков в секунду. Если он создаст более 4, в ErrorLog будет помещено сообщение об этом. Это - сигнал того что MinSpareServers слишком мало.

MaxRequestsPerChild

Директива MaxRequestsPerChild устанавливает сколько запросов может обработать один дочерний процесс/поток прежде чем он будет завершен. По умолчанию значение этой директивы установлено в 0, что означает что однажды созданный процесс/поток не будет завершен никогда (ну кроме случаев остановки сервера или краха этого процесса/потока). Рекомендую установить MaxRequestsPerChild равное какому-нибудь достаточно большому числу (несколько тысяч). Это не создаст излишней нагрузки, связаной с тем что apache будет вынужден создавать новые дочерние процессы, в то же время это поможет избавиться от проблем с утечкой памяти в дочерних процессах (что очень возможно например если вы используете нестабильную версию php).

KeepAlive и KeepAliveTimeout

KeepAlive позволяет делать несколько запросов в одном TCP-подключении. Это особенно полезно для html-страниц с большим количеством изображений. Если KeepAlive установлен в Off, то для самой страницы и для каждого изображения будет создано отдельное подключение (которое нужно будет обработать master-процессу), что плохо и для сервера и для клиента. Так что для подобных случаев рекомендуется устанавливать KeepAlive в On. Для других применений (например для download-сервера) KeepAlive может быть бесполезен и даже вреден, т.к. при включенном KeepAlive сервер закрывает соединение не сразу, а ждет KeepAliveTimeout секунд нового запроса. Для того чтобы процессы не висели слишком долго в бесполезном ожидании, устанавливайте KeepAliveTimeout достаточно малым, около 5-10 секунд обычно достаточно.

5. Перезапускаю Apache - '/etc/init.d/apache2 force-reload'

6. Устанавливаю MySQL - 'apt-get install mysql-server mysql-client php5-mysql' или 'apt-get install mysql-server mysql-client php4-mysql' для php4.

7. По умолчанию mysql создает пользователя root без пароля. Установил пароль для пользователя root.
server:/# mysql
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('пароль') WHERE user='root';
mysql> FLUSH PRIVILEGES;

8. Устанавливаю phpMyAdmin - 'apt-get install phpmyadmin', который ставится в папку - '/etc/phpmyadmin'.

phpMyAdmin — веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБД MySQL. phpMyAdmin позволяет через браузер осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Приложение пользуется большой популярностью у веб-разработчиков, так как позволяет управлять СУБД MySQL без непосредственного ввода SQL команд, предоставляя дружественный интерфейс. (Взято с http:/ /ru.wikipedia.org).

У меня в дистрибутиве Lenny phpMyAdmin сам подключился модулем к Apache. Возможно в дистрибутиве Etch придется подключить его руками, для чего надо редактировать файл 'nano /etc/apache2/apache2.conf', дописав в конце конфига:
Include /etc/phpmyadmin/apache.conf

9. Перезапускаю Apache - '/etc/init.d/apache2 restart'.
Доступ к настроенному phpMyAdmin можно осуществить набрав в браузере 'http:/ /localhost/phpmyadmin' с сервера.

PS. У меня на работе отсутствует статический IP для входа на сервер с Interneta, а пользователи выходят в интернет через Squid, т.е. Если кто-то из пользователей захочет войти в LAMP набрав IP сервера, его запрос будет отправлен по 80 портому в Squid который в свою очередь вернет ответ что хост не найден. Пришлось поправить настройки Apache, заставив его обрабатывать запросы по порту 8080, и создать виртуальный хост.

Отрадактировал файл 'nano /etc/apache2/httpd.conf' прописав в нем:
Listen 8080
т.е. указал чтоы Apache слушал порт 8080.

Я создал файл с настройками виртуального хоста 'touch /etc/apache2/sites-enabled/@statistica.conf' следующего содержания — 'nano /etc/apache2/sites-enabled/@statistica.conf':

DocumentRoot /var/www/
ServerName server.ex
AllowOverride All
Order allow,deny
allow from all
192.168.0.1 — адрес сетвой карты смотрящей в локальнуюсеть, и присваиваю ему имя — server.ex.

Далее включаю обработку виртуального хоста в Apache – 'nano /etc/apache2/apache2.conf' добавив:
Include /etc/apache2/sites-enabled/

Теперь чтобы из локальной сети попасть на созданный хост нужно набрать в браузере 'http:/ /192.168.0.1:8080' или 'http:/ /server.ex:8080'.

PSPS. Все манипуляции описанные в PS. производились в дистрибутиве Lenny.

среда, 13 мая 2009 г.

Настройка прозрачного прокси-сервера Squid

Все команды выполнялись от прав пользователя root.

Настроил на работе сервер для предоставления доступа пользователем 2-х локальных сетей в интернет. И естественно, получилось так, что пользователь который первым поставил файл\файлы на закачку, забирал всю «ширину» канала себе, следовательно Интернет для остальных представлял собой жалкое зрелище: страницы долго открываются, часто происходит обрыв сессий и т.д. Поэтому было решено установить прозрачный прокси-сервер – Squid3 с редиректом – SquidGuard для ограничения доступа к нерабочим ресурсам, обрезания рекламы и т.д. Операции по установке и настройке данной связки я тут и опишу:

1. Устанавливаем Squid — 'apt-get install squid3'. После установки останавливаем его, ибо нужно сконфигурировать его под наши нужды - '/etc/init.d/squid3 stop'.

2. Устанавливаем редирект SquidGuard – 'apt-get install squidguard'.

3. Собственно редактируем файл прокси-сервера — '/etc/squid3/squid.conf', должно получится примерно следующее:

# минимальная конфигурация
# у меня в фале 'deny_inet_hosts1' хранятся IP адреса не имеющие доступа в интернет
# как оказалось сквид всеравно пробрасывал их в интернет, пришлось прикрутить
# этот список к Squid'у
acl bn1 src "/etc/deny_inet_hosts1"
# описываем сети
acl Net1 src 192.168.0.1
# а тут описываем привилегированных пользователей админов и начальство
acl Admins src 192.168.0.17 192.168.0.2 192.168.0.21 192.168.0.22 192.168.0.3 192.168.0.33 192.168.0.35
acl manager proto cache_object
# описываем локалхост
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
# описываем запрет к отвлекающим от работы сайтам
acl zapret dstdomain .vkontakte.ru .odnoklassniki.ru .my.mail.ru .blogs.mail.ru .horo.mail.ru .news.mail.ru .games.mail.ru .auto.mail.ru .map.mail.ru .rabota.mail.ru .travel.mail.ru .lady.mail.ru .deti.mail.ru .realty.mail.ru .video.mail.ru .cards.mail.ru .pogoda.mail.ru .afisha.mail.ru .mobile.mail.ru .soft.mail.ru .otvet.mail.ru .chat.mail.ru .sowbiz.mail.ru .torg.mail.ru .love.mail.ru .foto.mail.ru .content.mail.ru .odnoklasniki.ru .adobe.com .radio.tut.by .blog.tut.by .i.tut.by .update.icq.com
################# PORTS ##################
# Открываем нужные порты
acl SSL_ports port 443 563
#acl SSL_for_client_banks port 910 8443 4500
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
#acl Safe_ports port 70 # gopher
#acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
#acl Safe_ports port 280 # http-mgmt
#acl Safe_ports port 488 # gss-http
#acl Safe_ports port 591 # filemaker
#acl Safe_ports port 777 # multiling http
#acl Jabber_ports port 5222 #jabber
acl Pop_ports port 110 #
acl Smtp_ports port 25 #
acl Icq_ports port 5190 #

# разрешаем соединение типа CONNECT для нужных протоколов
acl CONNECT method CONNECT
#http_access allow CONNECT Jabber_ports
http_access allow CONNECT Icq_ports
http_access allow CONNECT Pop_ports
http_access allow CONNECT Smtp_ports

############### ACCESS CONTROLL############
# назначаем права доступа
# пропускаем sqstat
http_access allow manager localhost
http_access deny manager
# запрещаем досуп к сайтам
http_access deny zapret
# зарубаем все порты кроме safe_ports
http_access deny !Safe_ports
# зарубаем конект кроме как к SSL
http_access deny CONNECT !SSL_ports
# блокирум IP адреса не имеющие доступа в интернет
http_access deny bn1
# разрешаем инет сетям
http_access allow Net1
icp_access deny all
htcp_access deny all
# админам выделяем всю ширину канала
# выделяем на все подсети максимальный канал (-1), каждому пользователю даем
# скорость максимум в 5 Кб\сек после того, как он скачает на максимальной
# скорости первые 300 Кб файла
delay_pools 2
delay_class 1 2
delay_parameters 1 -1/-1 -1/-1
delay_access 1 allow Admins
delay_access 1 deny all
delay_class 2 2
delay_parameters 2 -1/-1 5000/300000
delay_access 2 allow Net1
delay_access 2 deny all
http_access allow all
############### NETWORK OPTIONS #############
# настройка порта для прокси
http_port 3128 transparent

##### OPTIONS WHICH AFFECT THE NEIGHBOR SELECTION ALGORITHM #####
# pfghtoftv r'ibhjdfnm CGI-скрипты
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY

########### MEMORY CACHE OPTIONS ###########
# размер ОЗУ под кэш (по default 8 Мв)
cache_mem 32 MB

# ############ DISK CACHE OPTIONS ###############
# Max размер объекта записываемого в кэш
maximum_object_size 16384 KB
# Место кэша и размер 50 Гб 16 директорий 1-го уровня 256 2-го
cache_dir ufs /var/spool/squid3/cache 50000 16 256
# Адрес пользователя ответственного за очистку переполненого кэша
#cache_mgr root@test.ru
# Пользователь от имени какого работает Squid
cache_effective_user proxy
# Разрешаем управлять кэшем с помощью cachemgr.cgi с паролем "passwd"
#cachemgr_passwd passwd all

################ LOGFILE OPTIONS ####################
# Лог доступа к кэшу
cache_access_log /var/logs/squid3/access.log
# Лог работы кэша
cache_log /var/logs/squid3/cache.log
# Лог работы менеджера кэша
cache_store_log none
# Ротация логов
logfile_rotate 10

#mime_table /etc/squid3/mime.conf
#pid_filename /var/run/squid3.pid

########## OPTIONS FOR FTP GATEWAYING ##############
# Под этим юзером ходим в Ftp
#ftp_user vasa@pupkin.ru
# Разрешаем пассивный режим работы FTP
ftp_passive on

ftp_sanitycheck on
ftp_list_width 32

########## OPTIONS FOR URL REWRITING ##################
# Путь до редиректора
#redirect_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
# Кол-во одновременных запусков редиректов
#redirect_children 5

########### OPTIONS FOR TUNING THE CACHE ##############
# Оставляем как есть
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320

############ ERROR PAGE OPTIONS ###############
# Отсюда берем файлы стандартных сообщений об ошибках
error_directory /usr/share/squid3/errors/Russian-koi8-r
# Если Squid уже скачал 60% файла, а пользователь отказался его забирать, то всеравно продолжить скачивание
quick_abort_pct 60
# Время жизни запросов завершившихся ошибкой "connection refused" "404 Not Found"

negative_ttl 1 minutes
# Включить отправку сообщений об ошибках
#email_err_data on
# кому писать
#<А hrеf="mаilto:%w%W" mcе_hrеf="mаilto:%w%W">%w

################# DNS OPTIONS ###################
dns_testnames server.ex
# Путь к файлу hosts
hosts_file /etc/hosts
# Время жизни успешного DNS запроса.
positive_dns_ttl 6 hours
# Время жизни DNS запроса с ошибкой
negative_dns_ttl 5 minutes

############## MISCELLANEOUS ######################
# Место откуда берутся страницы с ошибками, сюда же ложим и свои
coredump_dir /var/spool/squid3
# Поддержка нестандартных Http запросов
half_closed_clients on
# Включать ли IP адрес клиента в заголовок Http запроса
forwarded_for on
# Вкл. сбор статистики по каждому клиенту
client_db on


4. Создаем необходимые директории и назначаем права доступа пользователям.

'mkdir /var/spool/squid3/cache' – тут у меня будет лежать кэш
'mkdir /var/log/squid3' — тут у меня будут лежать логи

Теперь необходимо обеспечить доступ пользователя от имени которого будут осуществлять доступ Squid к этим папкам. Узнать это можно командой 'cat /etc/squid3/squid.conf | grep cache_effectiv', должно выдать что-то похожее на это:

cache_effective_user proxy

т.е. получается что Squid работает от имени пользователя — proxy. Разрешаем этому пользователю доступ к созданным папкам ' chown -R proxy /var/spool/squid3/cache /var/log/squid3'.

5. В директории /var/log/squid3 создаем иерархию директорий для хранения кэша – '/usr/sbin/squid3 -z'.

6. Вот так у меня настроен squidguard

# путь к базе
dbhome /var/lib/squidguard/db
# путь к логам
logdir /var/log/squid
# рабочее время
time workhours {
weekly mtwhf 09:00 - 18:00
}
# создаем группы
src admin {
ip 192.168.0.3 192.168.0.33
# user root foo bar
within workhours
}
src lan {
ip 192.168.0.2 192.168.0.4-192.168.0.32 192.168.0.34-192.168.0.254 192.165.15.2-192.165.15.254
}


dest porno {
domainlist porn/domains
urllist porn/urls
log /var/log/squid/porno.log
}
dest warez {
domainlist warez/domains
urllist warez/urls
log /var/log/squid/warez.log
}
#dest ads {
#domainlist ads/domains
#urllist ads/urls
#}
dest spy {
domainlist spyware/domains
urllist spyware/urls
log /var/log/squid/spawere.log
}
dest hack {
domainlist hacking/domains
urllist hacking/urls
log /var/log/squid/hacking.log
}
dest drag {
domainlist drugs/domains
#urllist drugs/urls
log /var/log/squid/narkota.log
}
# указываем правила
acl {
admin {
pass any
}

lan within workhours {
pass !porno !warez !spy !hack !drag all
}
#else {
# pass any
# }

default {
pass none
}
}

7. Запускаем Squid — '/etc/init.d/squid3 start' и проверяем лог — /var/log/squid3/cache.log, если все нормально должны получить что-то вида:

8. Создаем правило в iptables для перенаправления локального трафика с 80 порта на порт Squid'а — 3128:

/sbin/iptables -t nat -A PREROUTING -i eth1 -s 192.168.0.0/24 -p tcp -d 0.0.0.0/0 --dport 80 -j REDIRECT --to-port 3128


понедельник, 6 апреля 2009 г.

Настройка кэширующего DNS

Все команды задавал от имени root.


Установка Bind в chroot окружении

Устанавил Bind 9.

server:/# apt-get install bind9

Все установилось без ошибок (проверить можно командой 'server:/# named -v' — должна отобразится версия bind) останавил его.

server:/# /etc/init.d/bind9 stop

Из соображений безопасности запускать буду Bind в chroot среде (“песочнице), а вот как я это делал:

1. Отредактировал файл '/etc/default/bind9', туда добавил строку о среде chroot, которая будет находится у меня в '/var/lib/dns', изменив строку OPTIONS=” -u bind на OPTIONS=”-u bind -t /var/lib/dnsт.е. должно получится что-то типа:

OPTIONS=”-u bind -t /var/lib/dns”
# Set RESOLVCONF=no to not run resolvconf
RESOLVCONF=yes

2. Теперь создал все необходимые для работы bind9 директории:

server:/# mkdir -p /var/lib/dns/etc
server:/# mkdir /var/lib/dns/dev
server:/# mkdir -p /var/lib/dns/var/cache/bind
server:/# mkdir -p /var/lib/dns/var/run/bind/run

3. Переместил директорию с конфигурацией bind9 из '/etc' в '/var/lib/dns/etc':

server:/# mv /etc/bind /var/lib/dns/etc

4. Создал символическую ссылку на новую директорию с файлами конфигурации bind на случай если в дальнейшем соберусь обновить пакет, это поможет избежать проблем.

server:/# ln -s /var/lib/dns/etc/bind /etc/bind

5. Создал необходимые устройства и устанавил права на каталоги

server:/# mknod /var/lib/dns/dev/null c 1 3
server:/# mknod /var/lib/dns/dev/random c 1 8
server:/# chmod 666 /var/lib/dns/dev/null /var/lib/dns/dev/random
server:/# chown -R bind:bind /var/lib/dns/var/*
server:/# chown -R bind:bind /var/lib/dns/etc/bind

    ***В дистрибутиве Etch надо изменить стартовый скрипт демона sysklogd для того что бы сообщения bind попадали в syslog для этого надо отредактировать файл '/etc/default/sysklogd' , изменив там строку SYSLOGD=”” на SYSLOGD=”-u syslog -a /var/lib/dns/dev/log”. Иногда sysklogd ругается на опцию «-u»,тогда надо SYSLOGD=”-a /var/lib/dns/dev/log. И перезапуск службы:

server:/# /etc/init.d/sysklogd restart

*** В дистрибутиве Lenny я не нашел стартовый скрипт демона sysklogd, однако сообщения bind попадали в syslog, возможно из-за символической ссылки.


Настройка Bind

1. Cоздал отдельный файл конфигураций для моих зон ( в данном случае у меня будет одна зона описывающая виртуальный домен .ex):

server:/# touch /var/lib/named/etc/bind/myzones.conf
server:/# chown bind:bind /var/lib/named/etc/bind/myzones.conf

2. Редактирую файл конфигурации моей зоны .ex (имя моего домена) он должен выглядеть примерно так:

zone "ex." {
type master;
file "/etc/bind/db.ex";
};

В данном случае я специально создал «несуществующую зону», т.к. настраивал Bind в роли кэширующего DNS с возможностью обработки локальных имен/адресов моих локальных сетей.

3. Создал файл и назначил права доступа прямой зоны для локальных сетей.

server:/# touch /var/lib/dns/etc/bind/db.ex
server:/# chown bind:bind /var/lib/dns/etc/bind/db.ex

Отредактировал файл:

$TTL 86400 ; 1 day
@ IN SOA server root.server (
2009032601 ; serial
10800 ; refresh (3 hours)
900 ; retry (15 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
@ IN NS server

server A 192.168.0.1 ; адрес сервера для 1-й сети
server A 192.165.15.1 ; адрес сервера для 2-й сети

Внимание: в конце файла обязательно должна быть пустая строка!!!

4. Создал файл и назначил права доступа обратной зоны для локальных сетей.

server:/# touch /var/lib/dns/etc/bind/local.rev
server:/# chown bind:bind /var/lib/dns/etc/bind/local.rev

Отредактировал файл:

$TTL 604800
@ IN SOA server.ex. root.server.ex. (
2009032601 ; serial
604800 ; refresh
86400 ; retry
2419200 ; expire
604800 ; negative cache TTL
)
@ IN NS server.ex.
1.0.168 IN PTR server.ex.
1.15.165 IN PTR server.ex.


Внимание: в конце файла обязательно должна быть пустая строка!!!

5. Отредактировал файл '/var/lib/dns/etc/named.conf.options' до такого вида:

options {
directory "/var/cache/bind";

version "SecurityDNS v.USSR";
allow-recursion { "net"; };
allow-query { any; };
//auth-nxdomain no; # conform to RFC1035
listen-on-v6 { none; };
# отключил поддержку IPv6
};

6. Отредактировал файл '/var/lib/named/etc/named.conf'.

В начале файла, до включения файла с опциями (named.conf.options), создал список acl для указания, что будет обслуживать мой сервер Bind, указав свои подсети, обратную петлю, адрес сетевой карты, смотрящей в интернет, и оба DNS провайдера:

acl "net" {
192.168.0.0/24;
192.165.15.0/24;
127.0.0.1;
212.98.185.103;
212.98.160.50;
212.98.160.65;
};

Для возможности работы и передачи зоны с подписью TSIG включил rndc.key и указал, кто сможет управлять моим сервером и по какому порту:

include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys {rndc-key;};
};

В конце файла добавил настройки обратной зоны для локальных сетей:

zone "192.in-addr.arpa" {
type master;
file "/etc/bind/local.rev";
};

Ну и последним (последняя команда) подключил прямые зоны:

include "/etc/bind/myzones.conf";

7. Подведя итоги пункта 6, получил файл named.conf следующего вида:

acl "net" {
192.168.0.0/24;
192.165.15.0/24;
127.0.0.1;
212.98.185.103;
212.98.160.50;
212.98.160.65;
};

include "/etc/bind/named.conf.options";

include "/etc/bind/rndc.key";
controls {
inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys {rndc-key;};
};

zone "." {
type hint;
file "/etc/bind/db.root";
};

zone "localhost" {
type master;
file "/etc/bind/db.local";
};

zone "127.in-addr.arpa" {
type master;
file "/etc/bind/db.127";
};

zone "0.in-addr.arpa" {
type master;
file "/etc/bind/db.0";
};

zone "255.in-addr.arpa" {
type master;
file "/etc/bind/db.255";
};

zone "192.in-addr.arpa" {
type master;
file "/etc/bind/local.rev";
};

include "/etc/bind/myzones.conf";

С учетом моих настроек у меня оказались не задействованы следующие файлы 'db.empty', 'zones.rfc1918' и 'named.conf.local' естественно я их удалил.

8. Поправил следующие файлы:

/etc/resolv.conf — добавил в начале файла следующие строки (вписал свой домен):

search server.ex
nameserver 127.0.0.1

/etc/hosts.conf добавил в начале файла следующую строку:

order hosts, bind

/etc/hosts — вписал строки после строки '127.0.0.1 localhost':

192.168.0.1 server.ex server
192.165.15.1 server.ex server

9. Добавил в свой фаервол следующие правила:

# DNS rndc сервер на Lo разрешаю. (обход connection refused)
/sbin/iptables -A OUTPUT -p tcp -m tcp -o lo --dport 953 --sport 1024:6553 -j ACCEPT
# разрешаю доступ DNS-серверу наружу
/sbin/iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
/sbin/iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

10. Запустил Bind.

server:/# /etc/init.d/bind9 start
server:/# rndc reload

11. Проверил работоспособность под Debian:

serverd:/etc/init.d# nslookup
> set q=any
> localhost
Server: 127.0.0.1
Address: 127.0.0.1#53

localhost
origin = localhost
mail addr = root.localhost
serial = 2
refresh = 604800
retry = 86400
expire = 2419200
minimum = 604800
localhost nameserver = localhost.
Name: localhost
Address: 127.0.0.1
localhost has AAAA address ::1
> 127.0.0.1
Server: 127.0.0.1
Address: 127.0.0.1#53

1.0.0.127.in-addr.arpa name = localhost.
> google.ru
Server: 127.0.0.1
Address: 127.0.0.1#53

Non-authoritative answer:
google.ru mail exchanger = 10 smtp2.google.com.
google.ru mail exchanger = 10 smtp3.google.com.
google.ru mail exchanger = 10 smtp4.google.com.
google.ru mail exchanger = 10 smtp1.google.com.
Name: google.ru
Address: 72.14.221.104
Name: google.ru
Address: 74.125.77.104
Name: google.ru
Address: 216.239.59.104
google.ru
origin = ns1.google.com
mail addr = dns-admin.google.com
serial = 2009033100
refresh = 21600
retry = 3600
expire = 1209600
minimum = 300
google.ru nameserver = ns3.google.com.
google.ru nameserver = ns1.google.com.
google.ru nameserver = ns4.google.com.
google.ru nameserver = ns2.google.com.

Authoritative answers can be found from:
google.ru nameserver = ns1.google.com.
google.ru nameserver = ns3.google.com.
google.ru nameserver = ns2.google.com.
google.ru nameserver = ns4.google.com.
ns2.google.com internet address = 216.239.34.10
ns3.google.com internet address = 216.239.36.10
ns4.google.com internet address = 216.239.38.10

serverd:/etc/init.d# dig @server.ex google.com

; <<>> DiG 9.5.1-P1 <<>> @server.ex google.com
; (2 servers found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 28297
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 300 IN A 74.125.67.100
google.com. 300 IN A 209.85.171.100
google.com. 300 IN A 74.125.45.100

;; AUTHORITY SECTION:
google.com. 345600 IN NS ns1.google.com.
google.com. 345600 IN NS ns3.google.com.
google.com. 345600 IN NS ns4.google.com.
google.com. 345600 IN NS ns2.google.com.

;; ADDITIONAL SECTION:
ns1.google.com. 172741 IN A 216.239.32.10
ns2.google.com. 172740 IN A 216.239.34.10
ns3.google.com. 172740 IN A 216.239.36.10
ns4.google.com. 172740 IN A 216.239.38.10

;; Query time: 107 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Mon Jan 1 00:39:58 2001
;; MSG SIZE rcvd: 212

serverd:/etc/init.d# dig @server.ex google.com

; <<>> DiG 9.5.1-P1 <<>> @server.ex google.com
; (2 servers found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27974
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 4, ADDITIONAL: 4

;; QUESTION SECTION:
;google.com. IN A

;; ANSWER SECTION:
google.com. 273 IN A 74.125.45.100
google.com. 273 IN A 74.125.67.100
google.com. 273 IN A 209.85.171.100

;; AUTHORITY SECTION:
google.com. 345573 IN NS ns1.google.com.
google.com. 345573 IN NS ns4.google.com.
google.com. 345573 IN NS ns3.google.com.
google.com. 345573 IN NS ns2.google.com.

;; ADDITIONAL SECTION:
ns1.google.com. 172714 IN A 216.239.32.10
ns2.google.com. 172713 IN A 216.239.34.10
ns3.google.com. 172713 IN A 216.239.36.10
ns4.google.com. 172713 IN A 216.239.38.10

;; Query time: 2 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Mon Jan 1 00:40:25 2001
;; MSG SIZE rcvd: 212
И на машине входящей в сеть под управлением
Windows XP:
Microsoft Windows XP [Версия 5.1.2600]

(С) Корпорация Майкрософт, 1985-2001.

C:\Documents and Settings\Администратор>nslookup
Default Server: server.ex
Address: 192.168.0.1

> set q=any
> server.ex
Server: server.ex
Address: 192.168.0.1

server.ex internet address = 192.165.15.1
server.ex internet address = 192.168.0.1
ex nameserver = server.ex


пятница, 27 марта 2009 г.

Создание локального репозитория с установычных дисков




Выдали мне на работе новый компьютер, а вот ДВД-привода в нем нет, ну для установки ОС'и админ дал на день привод. Пришлось из установочных дисков Debian'а создать на винчестере репозиторий с которого можно было бы спокойно устанавливать и удалять пакеты Debian'а без участия привода.

Все команды выполнялись от прав пользователя root!

В первую очередь я создал ISO-образы всех 3-х установочных дисков на винчестере. Создание образов осуществляется командой 'dd if=/dev/cdrom of=/mnt/dvd1.iso'. Т.е. Взять данные с ДВД-привода (/dev/cdrom) и сохранить их в папку (/mnt) под именем dvd1.iso.

Таким образом у меня были созданы 3-и образа с именами dvd1.iso, dvd2so, dvd3.iso соответственно.

Далее необходимо примаунтить (подключить) созданные образы. Для этого создаем соответствующие записи в файле '/etc/fstab' следующего содержания:


/mnt/dvd1.iso /mnt/setup/1 iso9660 loop 0 0
/mnt/dvd2.iso /mnt/setup/2 iso9660 loop 0 0
/mnt/dvd3.iso /mnt/setup/3 iso9660 loop 0 0


т.е. запись обозначает — взять образ из папки mnt с именем dvd1.iso стандарта iso9660 и подключить через петлевое устройство (виртуальный привод) loop к папке /mnt/setup/1 ну и т.д. Затем набрать команды 'umount -a' и 'mount -a' для применения изменений и примаунчивания дисков.


Затем нам нужно прописать пути репозитория для apt-get откуда брать для установки пакеты, для чего в файл '/etc/apt/sources.list' дописываем:


deb file:///mnt/setup/1/ stable contrib main
deb file:///mnt/setup/2/ stable contrib main
deb file:///mnt/setup/3/ stable contrib main


Затем необходимо дать команду 'apt-get update' для того чтобы apt-get перечитал заголовки пакетов.

понедельник, 2 марта 2009 г.

Настройка сетевого соединения для сетей со статическими адресами





Встала необходимость настройки сетевого соединения под Debian'ом для возможности выхода в домашнюю сеть и Интернет. Как я настраивал приведено ниже. Настройки приводимые здесь относятся только к сетям в которых используются статические IP-адреса, а не DHCP.
Все команды в статье идут от прав root'а.
Для начала проверил все свои сетевые интерфейсы командой 'ifconfig' и получил следующее сообщение на экране:

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:227287379 errors:0 dropped:0 overruns:0 frame:0
TX packets:227287379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1750794110 (1.6 GiB) TX bytes:1750794110 (1.6 GiB)

Как оказалось из сетевых интерфейсов у меня подключено и работает только «внутренняя петля» (замыкание на себя), т.е. присутствует IP-адрес по которому компьютер может осуществлять сетевое подключение сам на себя.
Соответственно мне пришлось задействовать свой сетевой интерфейс командой 'ifconfig eth0 up' (соответственно отключить сетевой интерфейс можно командой 'ifconfig eth0 down'). После чего команда 'ifconfig' вывела следующие данные:

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:227287379 errors:0 dropped:0 overruns:0 frame:0
TX packets:227287379 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1750794110 (1.6 GiB) TX bytes:1750794110 (1.6 GiB)

eth0 Link encap:Ethernet HWaddr 00:80:AD:76:45:97
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Interrupt:5 Base address:0xc000

Вот теперь приступил к настройке сетевого интерфейса, т.е. отредактировал файл 'etc/network/interfaces' для чего пришлось в него добавить следующие строчки:

auto eth0
iface eth0 inet static
address 192.168.1.3 - мой IP-адрес в сети
netmask 255.255.255.0 - маска моей домашней сети
network 192.168.1.0 - принадлежность к классу сети
broadcast 192.168.1.255 - адрес для передачи широковещательных пакетов
hostname dethroner - сетевое имя моего компьютера
gateway 192.168.1.1 - шлюз моего сервера/модема

Далее прописываем в файле 'etc/resolv.conf' адрес\адреса DNS-серверов в виде:

nameserver 192.168.1.1 - адрес 1-ого DNS-сервера
nameserver 82.209.240.241 -адрес 2-ого DNS-сервера

У меня этот файл не был обнаружен. Пришлось установить дополнительный пакет 'apt-get install resolvconf'. Ну и вписать адрес как описано выше.
Вот и вся настройка сетевого подключения. Сетевые настройки вступят в силу после перезагрузки компьютера, либо их можно задействовать командой '/etc/init.d/networking restart'.

четверг, 29 мая 2008 г.

Восстанавливаем загрузчик Lilo



В общем у меня стоит на ПК 2-е ОСи Debian и Windows XP первая для изучения и работы, вторая для игр. Вот как-то стала 2-я работать плохо: игры тормозят, вылетают, система падает неизвестно из-за чего и т.д. Короче взял и переставил её, а она естественно затерла MBR, и при запуске стала грузиться в ед. числе. Пришлось восстанавливать первоначальный загрузчик, т.е. Lilo.

Собственно вот как я его восстанавливал:

- поставил установочный диск Debian в привод и запустил установку;

- после того когда режим установки дошел до разметки дискового пространства, зашел глянул номер раздела винчестера где у меня стоял Debian (это оказался hdb5) и переключился на другую консоль (комбинация клавиш альт+ф2);

- в консоли ввел команду 'mkdir /mnt/1' которая создала папку с названием 1 размещенную в разделе mnt;

- затем к созданной папке примаунтил диск где у меня была усnановлена система Debian – ‘mount /dev/hdb5 /mnt/1’;

- после этого командой 'chroot /mnt/1/' сделал папки папку 1 – корневым каталогом;

- далее ввел команду 'lilo' – которая восстановила загрузчик Lilo в MBR со старым конфигом.

После перезагрузки я увидел приветствие Lilo с запросом ввода какую ОСь грузить.