Professional Documents
Culture Documents
Модуль
ду 1. Резервное
р копирование.
р
Копирование данных с продакшен-сервера на backup-сервер ............................................ 7
Перекрестное копирование данных ................................................................................................... 7
Системы хранения данных ...................................................................................................................... 8
Другие носители данных .......................................................................................................................... 9
Виды бекапа .................................................................................................................................................... 9
Схемы ротации бекапов ..........................................................................................................................10
Методы резервирования баз данных ...............................................................................................10
RAID – Redundant Array of Independent Disks ................................................................................11
Типы RAID-массивов..................................................................................................................................11
Уровни RAID-массивов.............................................................................................................................12
RAID 0 (Striped Disk Array without Fault Tolerance) .......................................................................12
RAID 1 (Mirroring & Duplexing) ..............................................................................................................12
RAID 5 (Independent Data Disks with Distributed Parity Blocks) ...............................................13
RAID 1+0 (Very High Reliability with High Performance) Performance)..............................................................13
..............................................................13
RAID 5+0 (High I/O Rates & Data Transfer Performance) ...............................................................14
Storage Area Networkk ................................................................................................................................ 14
................................................................................................................................14
Network Attached Storage .......................................................................................................................15
Direct Attached Storage ............................................................................................................................16
Самописный скрипт использующий атрибут mtime файлов.................................................17файлов .................................................17
Rsync .................................................................................................................................................................19
Зеркалируем разделы ..............................................................................................................................21
Amanda............................................................................................................................................................22
Модуль
ду 2. Сетевой интерфейс
рф Linux.
Какие файлы влияют на работу сетевого интерфейса интерфейса..............................................................30
..............................................................30
DHCP iface ......................................................................................................................................................31
Loopback iface ..............................................................................................................................................32
Custom iface...................................................................................................................................................32
Практика.........................................................................................................................................................33
Маршрутизация ..........................................................................................................................................35
Прописываем маршруты ........................................................................................................................36
Про шлюз........................................................................................................................................................38
Полезные ключи netstat ..........................................................................................................................38
NMAP ................................................................................................................................................................40
tcpdump ..........................................................................................................................................................41
1
Модуль
ду 3. TFTP.
Установка .......................................................................................................................................................42
Работа с TFTP.................................................................................................................................................42
Типы пакета ...................................................................................................................................................43
Режимы передачи ......................................................................................................................................43
Коды ошибок ................................................................................................................................................43
Клиент tftp .....................................................................................................................................................44
Модуль
ду 4. NFS.
Установка .......................................................................................................................................................45
Настройка ......................................................................................................................................................46
Опции конфигурационного файла.....................................................................................................47
Дополнительная информация .............................................................................................................48
Модуль
ду 5. Install-сервер.
р р
Принцип работы .........................................................................................................................................49
DHCP .................................................................................................................................................................50
TFTP ...................................................................................................................................................................51
Syslinux ............................................................................................................................................................51
NFS.....................................................................................................................................................................51
Создаем структуру tftp-сервера добавляем контент на сервер .........................................52
Устанавливаем ОС по сети .....................................................................................................................52
Автоматизация установки с помощью Kickstart ...........................................................................53
Диагностика ..................................................................................................................................................55
Модуль
ду 6. Виртуализация
р у ц Xen.
Что это такое ? ..............................................................................................................................................56
Зачем это нужно ?.......................................................................................................................................56
Типы виртуализации .................................................................................................................................56
Архитектура Xen .........................................................................................................................................58
Причины по которым стоит использовать виртуализацию. ..................................................58
Настраиваем сервер виртуализации ................................................................................................58
Установка Xen...............................................................................................................................................59
Создание новых виртуальных машин в Xen .................................................................................60
Работа с виртуальными машинами ....................................................................................................61
Производительность виртуальных машин ....................................................................................62
2
Модуль
ду 7. Subversion.
Архитектура Subversion ..........................................................................................................................63
Протоколы работы с SVN ........................................................................................................................64
Способы хранения данных ....................................................................................................................64
Компоненты Subversion...........................................................................................................................64
Проблема одновременной работы с файлами.............................................................................64
Рабочий цикл................................................................................................................................................66
Установка .......................................................................................................................................................66
Работаем с репозиторием ......................................................................................................................66
Получение копии репозитария с удаленного сервера где у вас есть аккаунт ..............68
Ограничение доступа...............................................................................................................................69
Работа через Proxy .....................................................................................................................................72
Модуль
ду 8. Apache.
p
Об Apache ......................................................................................................................................................73
Установка .......................................................................................................................................................73
Настройка ......................................................................................................................................................74
Добавляем виртуальный хост ..............................................................................................................82
Возможные опции в директиве Options ..........................................................................................84
Определение возможных директив в .htaccess ...........................................................................85
Аутентификация на сайте .......................................................................................................................86
Включение SSL .............................................................................................................................................87
Server-status и server-info ........................................................................................................................90
SSI.......................................................................................................................................................................91
Использование mod_rewrite .................................................................................................................91
Регулярные выражения mod_rewrite и флаги ..............................................................................93
Коды веб-сервера ......................................................................................................................................94
Модуль
ду 9. SAMBA.
Что такое SAMBA и зачем она нужна ? ........................................................................................... 104
Возможности SAMBA ............................................................................................................................. 104
Установка .................................................................................................................................................... 104
Типы аутентификации ........................................................................................................................... 104
Ключевые файлы ..................................................................................................................................... 105
Структура конфигурационного файла .......................................................................................... 106
Пример конфигурационного файла ............................................................................................... 106
Описание конфигурационного файла ........................................................................................... 107
SWAT – веб-интерфейс к SAMBA ....................................................................................................... 111
3
Модуль
ду 10. DHCPD.
Принцип работы ...................................................................................................................................... 112
Установка DHCPD .................................................................................................................................... 113
Настройка DHCPD ................................................................................................................................... 113
Описание опций из dhcpd.conf
dhcpd.conf.........................................................................................................
f......................................................................................................... 114
Секции-объявления ............................................................................................................................... 116
Типы пакетов протокола DHCP ......................................................................................................... 119
Используемые порты............................................................................................................................. 119
DHCP-клиент .............................................................................................................................................. 119
Модуль
ду 11. MySQL.
y Q
Принцип работы ...................................................................................................................................... 121
Пример роли MySQL в информационном пространстве ..................................................... 122
Типы данных .............................................................................................................................................. 122
Сколько нужно места под хранение типа данных ? ................................................................ 124
Практика...................................................................................................................................................... 125
Файл как источник запросов ............................................................................................................. 130
Пользователи и привелегии .............................................................................................................. 132
Саммари по командам и принципу работы ................................................................................ 133
Конфигурационный файл my.cnf...................................................................................................... 134
Забытый пароль администратора ................................................................................................... 136
Резервное копирование ...................................................................................................................... 136
Проверка целостности таблиц с помощью myisamchkk ......................................................... 137
Саммари по myisamchkk ........................................................................................................................ 138
Модуль
ду 12. Мониторинг.
р
О Nagios ....................................................................................................................................................... 139
Установка и настройка Nagios ........................................................................................................... 140
Добавление хостов и сервисов на мониторинг ........................................................................ 166
Мониторинг различных параметров сервера ........................................................................... 167
Мониторинг свободного места......................................................................................................... 167
Защита системы от пользовательских процессов ................................................................... 168
Мониторинг S.M.A.R.T. - параметров жесткого диска ............................................................. 168
Мониторинг сетевых портов в Linux .............................................................................................. 169
Мониторинг открытых файлов и сокетов .................................................................................... 169
Мониторинг запущенных процессов ............................................................................................. 170
Мониторинг системных ресурсов ................................................................................................... 170
Мониторинг свободного места в разделах ................................................................................. 170
Мониторинг сетевой подсистемы в реальном времени ...................................................... 171
Мониторинг работы DNS-сервера в реальном времени...................................................... 171
4
Мониторинг соединений proftpd в реальном времени........................................................
времени........................................................ 172
Статистика по виртуальной памяти ................................................................................................ 172
Статистика по процессору и устройствам ввода-вывода..................................................... 172
Модуль
ду 13. DNS.
Установка .................................................................................................................................................... 173
Инструменты ............................................................................................................................................. 173
Базовые понятия ..................................................................................................................................... 174
Правила построения DNS-системы ................................................................................................ 174
Режимы работы ДНС-серверов......................................................................................................... 175
Типы ответов DNS-серверов .............................................................................................................. 177
Виды запросов к DNS-серверу .......................................................................................................... 177
Способы копирования зоны с master-сервера ......................................................................... 177
Виды записей............................................................................................................................................. 179
Структура конфигурационного файла .......................................................................................... 181
Настройка ................................................................................................................................................... 182
Опции конфигурационного файла.................................................................................................. 186
Slave-сервер............................................................................................................................................... 187
Записи в /etc/resolv.conff ....................................................................................................................... 190
Статистика работы ................................................................................................................................. 190
Модуль
ду 14. Nginx.
g
Что такое Nginx ?...................................................................................................................................... 192
Преимущества Nginx ............................................................................................................................. 192
Варианты использования Nginx ....................................................................................................... 192
Установка EPEL .......................................................................................................................................... 193
Ставим EPEL-пакет ................................................................................................................................... 193
Установка Nginx с поддержкой PHP. Настраиваем связку Nginx + FastCGI. FastCGI...................
.................. 194
Конфигурирование Nginx + FastCGI................................................................................................ 195
Понижаем нагрузку на основной веб-сервер. Установка
Nginx как Frontend к Apache............................................................................................................... 198
Установка mod_rpaff ............................................................................................................................... 201
Включение SSL .......................................................................................................................................... 202
Использование двух версий PHP в Nginx одновременно .................................................... 203
Примеры производительности с Nginx и без него. ................................................................. 204
Описание директив конфигурационного файла ...................................................................... 205
файла......................................................................
Модуль
ду 15. Postfix.
Установка и настройка .......................................................................................................................... 210
Postfix ............................................................................................................................................................ 210
5
MySQL ........................................................................................................................................................... 216
Dovecot......................................................................................................................................................... 217
Clamd............................................................................................................................................................. 220
ClamSMTP .................................................................................................................................................... 221
Spamassassin .............................................................................................................................................. 221
Postfixadmin ............................................................................................................................................... 224
Squirrelmail ................................................................................................................................................. 225
Описание конфигурационных файлов.......................................................................................... 226
Postfix ............................................................................................................................................................ 226
Dovecot......................................................................................................................................................... 229
Clamd............................................................................................................................................................. 230
Clamsmtp ..................................................................................................................................................... 231
Spamassassin .............................................................................................................................................. 232
Модуль
ду 16. OpenVPN.
p
Об OpenVPN ............................................................................................................................................... 234
Установка Linux VPN-сервера ............................................................................................................ 234
Настройка Linux VPN-сервера ........................................................................................................... 235
Linux VPN-клиент ..................................................................................................................................... 240
Windows VPN-клиент.............................................................................................................................. 242
Добавление клиентов ........................................................................................................................... 243
Таблица предназначения ключей и сертификатов.................................................................. 243
Конфигурационный файл openvpn.conf на Linux VPN-сервере......................................... 243
Конфигурационный файл client.conf на Linux-клиентах ....................................................... 246
Конфигурационный файл client.ovpn на Windows-клиенте................................................. 247
Модуль
ду 17. Отказоустойчивый
у кластер.
р
Что такое кластер ? ................................................................................................................................. 248
Принцип работы нашего кластера ................................................................................................. 248
DRBD .............................................................................................................................................................. 249
Программы входщие в состав пакета DRBD................................................................................ 250
Heartbeat ..................................................................................................................................................... 251
Именование серверов .......................................................................................................................... 251
Установка ПО ............................................................................................................................................. 251
Настройка DRBD ...................................................................................................................................... 252
Настройка Heartbeat .............................................................................................................................. 257
Установка Apache .................................................................................................................................... 259
6
Модуль 1. Резервное копирование
Дисковые массивы
Д
По сути такой же сервер, но спроектирован специально под хранение
данных. Имеет много HDD большего размера.
Ленточные накопители
Они же стримеры. Данные как и в случае с ленточными библиотеками
записываются на специальные картриджи. Как правило, картридж – это
магнитная лента в пластиковом корпусе.
Виды бекапа
Полное – все файлы и каталоги которые мы хотим сохранять на отдельном
носителе.
Инкрементальное – копируем только то, что изменилось с момента
последнего резервного копирования. Полного или инкрементального.
Дифференциальное – копируем только то, что изменялось с момента
последнего ПОЛНОГО бекапа.
Пофайловый метод – копируем нужные файлы в индивидуальном порядке.
Дублирование диска – метод при котором мы делаем полный снимок диска.
Например утилитой dd.
Типы RAID-массивов
Есть два типа RAID-массивов.
RAID 0 ((Striped
p Disk Arrayy without Fault Tolerance))
Итоги
Механизм обеспечения
Уровень RAID Использование Мин.дисков
надежности
RAID 0 100% 1 нет
RAID 1 50% 2 зеркалирование
RAID 5 67-94% 3 четность
RAID 1+0 50% 4 зеркалирование
RAID 5+0 67-94% 6 четность
Главный вывод который можно сделать – у каждого уровня рейда есть свои
плюсы и минусы.
Еще главнее вывод – рейд не гарантирует целостности ваших данных. То есть
если кто-то удалит файл или он будет поврежден каким либо процессом, рейд
нам не поможет. Поэтому рейд не освобождает нас от необходимости делать
бекапы. Но помогает, когда возникают проблемы с дисками на физическом
уровне.
NAS – это сетевая система хранения данных. В целом это обычный сервер
3 timestamp=`date “+%Y-%m-%d-%H-%M”`
4 backupFS=”/etc /var/lib/mysql /usr/local/etc”
5 backupTO=/var/backup
6 KeepTime=7
7 if [ -d $backupTO ]; then
9 for i in $backupFS
10 do
11 j=`expr ${i//\//-}`
12 tar -zcvf $backupTO/`hostname`.${timestamp}.${j}.tar.gz $i
13 echo “$i is done”
14 done
15 else
16 echo “backup directory is missing...exiting”
17 exit 1
18 fi
Выполняем команду chmod +x <имя этого скрипта>, другими словами
делаем его исполняемым.
В рабочем скрипте цифр быть не должно. Я добавил их для удобства
объяснения строк кода.
1. Любой скрипт в Linux начинается с этой последовательности, которая
называется sha-bang. По сути исполняемый файл может быть просто
перечислением набора команд, но если планируется что-то сложнее,
где предстоит работа с переменными то sha-bang стоит поместить в
файл. В этом случае будет создан процесс, в котором мы можем хранить
временные данные;
Rsync
Rsync (Remote Synchronization) — с помошью этой программы происходит
копирование файлов между серверами, пришла на замену rcp.
centos52 — сервер куда будем делать бекап
unixbox — сервер с которого будем делать бекап
На сервере unixbox создадим пользователя rsync от которого будут
запрашиваться файлы для бекапа.
Добавим пользователя rsync и установим ему пароль.
# useradd rsync
# passwd rsync
Добавим его в нужные группы чтобы он мог получить право на чтение если
такого еще нет.
Скопируем каталог /etc с сервера unixbox в наш локальный каталог /var/
backup
$ rsync -e ssh -avz --delete-after --force rsync@unixbox:/etc /var/backup/
Вводим пароль и все.
Пояснения
Внимание: если после /etc нет “/” то будет скопирован сам каталог и его
содержимое. Если “/” есть, то будет скопировано только содержимое этого
каталога.
-e ssh – этим ключем мы показываем что будем использовать ssh, то есть наш
трафик будет шифроваться;
-a – работа в режиме архивирования, сохраняются права доступа и
информация о владельцах;
-v – выводить больше информативной информации;
-z – архивировать передаваемые данные;
--delete-after – удалять файлы которые отсутствуют в источнике после того
как закончится передача файлов по сети. Мы хотим иметь полную копию
контента с удаленного сервера. Можете включать эту опцию периодически.
Вдруг кто-нибудь случайно удалит файл на удаленном сервере и во время
ближайшей синхронизации мы удалим его тоже;
--force – не удалять директорию пока в ней есть файлы.
rsyncd
Также есть сервис – rsyncd который работает на порту 873 TCP. При
запущенном сервисе строка доступа может выглядеть так:
rsync://[USER@]HOST[:PORT]/SRC [DEST]
то есть в начале будет добавлено rsync:// а остальное также как и в примере
выше. Аутентификация в rsyncd основана на 128 bit MD4, что очень не
надежно в наше время. К тому же данные передаются в открытом виде, что
явно не в пользу этого сервиса, когда есть такие средства как rsync+ssh и scp.
Поэтому подробно рассматривать его не вижу смысла.
LIST=/var/backup/backup.list
Некоторые термины
level 0 – полный бекап
level 1 – инкрементальный бекап
level n – инкрементальный бекап с момента предыдущего инкрементального
бекапа (level n-1)
Disklist Entry (DLE) – каждая запись в файле disklist
dumpcycle – Промежуток времени в течение которого делается level 0
backup каждой из DLE (обычно 1 неделя)
runspercycle – сколько раз Amanda будет запущена в течение dumpcycle
tapecycle – сколько лент будет использовано в системе резервного
копирования
Начинаем установку
yum -y install amanda-server.i386
Создаем каталог для нового проекта и копируем файл amanda.conf из
проекта по умолчанию.
mkdir /etc/amanda/fasttech
displayunit «m»
dumpcycle 5
runspercycle 5
tapecycle 10
tapetype DISK
labelstr «fasttech-.*»
infofile «/etc/amanda/fasttech/curinfo»
logdir «/etc/amanda/fasttech»
indexdir «/etc/amanda/fasttech/index»
Проверяем
р р статус
у “лент”
$ ammt -t file:/var/backup/ status
file:/var/backup/ status: ONLINE
Переходим в бекап-директорию
$ cd /var/backup
Проверим
р р корректность
рр нашего amanda.conf
$ amcheck -s fasttech
Amanda Tape Server Host Check
-----------------------------
slot 3: read label `fasttech-3’, date `X’
Запускаем
у сервис
р
В файле /etc/xinetd.d/amandaidx меняем disable=yes на disable=no
# /etc/init.d/xinetd restart
Проверяем, начала ли работать наша служба
# netstat -lp | grep :amanda
tcp 0 0 *:amandaidx *:* LISTEN 3403/xinetd
Сервер готов.
Amanda client
# yum -y install amanda-client
Разрешаем серверу centos52 получать с нас бекап.
# echo «centos52 amanda» > `grep amanda /etc/passwd | cut -d: -f6`/.
amandahosts
Запускаем
у сервис
р
В файле /etc/xinetd.d/amanda меняем disable=yes на disable=no
# /etc/init.d/xinetd restart
# netstat -lp | grep :amanda
udp 0 0 *:amanda *:* 4850/xinetd
Клиент готов.
Restoring
su - amanda
Выясняем на каких лентах есть нужный нам каталог.
$ amadmin fasttech info unixbox /etc
Полезное
Эта команда попросит Amanda сделать полный бекап каталога /etc с сервера
unixbox в следующий раз:
amadmin fasttech force unixbox /etc
Команда перемотает виртуальную ленту на начало
ammt -t file:/var/backup rewind
Конфигурационный файл /etc/amanda/fasttech/amanda.conf
Подводим итоги
Принцип работы Amanda понять не сложно. Есть сервер с запущенной
службой через xinetd и есть клиенты с запущенным сервисом ожидающим
подключения от сервера. В файле .amandahosts на клиенте мы разрешаем
каким серверам можно получать с нас бекап. В файле disklist на сервере мы
перечисляем список серверов и каталогов которые мы хотим резервировать
с них. Как я писал выше, изначально Amanda была создана для работы с
ленточными накопителями и это дает о себе знать. Нам нужно создать набор
каталогов и пометить их как лента. Как будто мы работаем с набором лент
ленточного накопителя. При каждом запуске резервного копирования
ленты последовательно будут меняться в “виртуальном лотке”.
Резюме
Мы разобрали теорию бекапов и научились на практике дублировать наши
данные разными способами.
Домашняя работа
Установить и настроить Amanda, сделать пару бекапов, потом удалить“случайно”
какой-нибудь файл в системе и восстановить его средствами Amanda.
Для нас самое большое значение имеют скрипты ifcfg-*. Именно в них
описываются настройки сетевых интерфейсов присутствующих в сервере.
Давайте посмотрим что у них внутри.
DHCP iface
Данный интерфейс работает с использованием службы DHCP.
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
HWADDR=00:0C:29:43:5B:3D
ONBOOT=yes
Мой компьютер работает по DHCP, что отчетливо видно по директиве
BOOTPROTO=dhcp. То есть сетевые настройки мы получаем у dhcp-сервера
при загрузке нашего сервера. Другие директивы означают следующее:
DEVICE=eth0 — как будет называться наш интерфейс, принято первый
интерфейс называть как eth0, второй eth1 и так далее
HWADDR=00:0C:29:43:5B:3D — MAC-адрес нашей сетевой карты. Media
Access Control — это уникальный идентификатор сетевой карты. У каждой
сетевой карты свой MAC-адрес и в идеале он не повторяется больше ни с
каким в мире. Иногда MAC-адрес пытаются подменить чтобы выдать свой
компьютер за чужой, по каким либо соображениям, обычно враждебным.
Длина MAC-адреса составляет 48 бит что позволяет иметь 281 474 976 710
656 уникальных комбинаций. У каждого производителя сетевых плат есть
Loopback
p iface
loopback-интерфейс необходим для нормальной работы ОС.
# cat /etc/sysconfig/network-scripts/ifcfg-lo
DEVICE=lo
IPADDR=127.0.0.1
NETMASK=255.0.0.0
NETWORK=127.0.0.0
BROADCAST=127.255.255.255
ONBOOT=yes
NAME=loopback
DEVICE=lo — это loopback интерфейс. Интерфейс есть в любой системе и
всегда поднят. Он нужен для нормальной работы ОС.
IPADDR=127.0.0.1 — ip-адрес loopback интерфейса. Он всегда такой.
NETMASK=255.0.0.0 — сетевая маска
NETWORK=127.0.0.0 — сеть в которой находится наш ip-адрес
BROADCAST=127.255.255.255 — адрес широковещательной рассылки
ONBOOT=yes — включать ли интерфейс при загрузке сервера, конечно да!
NAME=loopback — имя сетевого интерфейса. Вывод команды ifconfig будет
показывать значение указанное именно в DEVICE.
Custom iface
Выше мы рассмотрели интерфейс работающий по протолу dhcp. Но как
правило придется работать именно с custom-интерфейсами, то есть вручную
задавать параметры и маршрутизацию о которой мы поговорим немного
позже.
Вот custom-интерфейс
DEVICE=eth0
IPADDR=192.168.0.2
NETMASK=255.255.255.0
NETWORK=192.168.0.0
BROADCAST=255.255.255.255
GATEWAY=192.168.0.1
Практика
Настроим сетевой интерфейс в Linux. Мы знаем что lo всегда включен и его
не нужно вообще трогать.
Редактируем /etc/sysconfig/network-scripts/ifcfg-eth0
Мой конфигурационный файл выглядит так:
DEVICE=eth0
HWADDR=00:0C:29:43:5B:3D
IPADDR=192.168.146.130
NETMASK=255.255.255.0
BROADCAST=192.168.146.255
GATEWAY=192.168.146.2
ONBOOT=yes
# netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
192.168.146.0 * 255.255.255.0 U 0 0 0 eth0
default 192.168.146.2 0.0.0.0 UG 0 0 0 eth0
Прописываем
р маршруты
р ру
Если на сервере несколько сетевых интерфейсов то скорее всего понадобится
вручную составить таблицу маршрутизации.
Приведу пример. У нас два сетевых интерфейса eth0 и eth1. Через eth0
мы получаем доступ во внешние сети и по умолчанию весь трафик
направляется через него. Через eth1 мы получаем доступ ко внутренней сети
192.168.147.0/24 но что еще важнее, в этой сети есть сервер 192.168.147.1
у которого есть сетевой интерфейс в подсеть 192.168.148.0/24 и мы очень
хотим туда попадать. А для того что туда попадать необходимо прописать
правильные маршруты у себя в ОС.
eth0
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:43:5B:3D
IPADDR=192.168.146.130
NETMASK=255.255.255.0
BROADCAST=192.168.146.255
ONBOOT=yes
eth1
# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
HWADDR=00:0c:29:43:5b:47
IPADDR=192.168.147.2
NETMASK=255.255.255.0
Про
р шлюз
Чтобы сервер был шлюзом для других компьютеров необходимо
удовлетворить ряд условий:
1.На сервере корректная таблица маршрутизации благодаря которой он
поймет что делать с пакетами дальше;
2.Включена передача пакетов между интерфейсами:
# echo '1' > /proc/sys/net/ipv4/ip_forward
3.Включен маскарадинг (или установлен прокси) для
нужной нам сети, например вот так (перенаправлять
пакеты для хостов из подсети 192.168.146.0/24):
# iptables -t nat -A POSTROUTING -s 192.168.146.0/24 -j MASQUERADE
NMAP
Nmap позволяет сканировать удаленные компьютеры на предмет открытых
портов. С более агрессивными опциями можно узнать версию ОС и
некоторые другие вещи.
Устанавливаем программу
# yum -y install nmap
Резюме
Мы разобрали базовую настройку сетевого интерфейса и маршрутов в Linux.
То, что вы узнали достаточно чтобы администрировать сетевой интерфейс,
иногда может понадобиться добавить сетевую карту и маршруты, но все
делается по такому же принципу.
Домашнее задание
Пройдитесь по всем пунктам описанным в этом модуле. Воспользуйтесь
nmap и tcpdump на практике.
TFTP (Trivial File Transfer Protocol) — это простой протокол передачи данных.
Для передачи данных использует протокол UDP, что в свою очередь не
гарантирует надежность передачи. Также в нем нет средств аутентификации
пользователей. TFTP используется в связке с другими технологиями когда
нужно просто передать файл без каких либо сложностей.
Самые рраспространенные
р р способы использования TFTP:
передача файлов при загрузке бездисковых рабочих станций;
передача начального загрузочного образа при установке ОС по сети;
участие в процессе backup`а и восстановления конфигурации сетевого
оборудования;
другие схожие операции.
TFTP ищет все файлы в каталоге /tftpboot который создается автоматически
при установке программы.
Установка
Устанавливаем пакет tftp-server из репозитория
# yum -y install tftp-server
Работа с TFTP
После того как TFTP-сервер запущен можно помещать все нужные файлы в /
tftpboot на отдачу по сети.
Если вы хотите делать backup файлов конфигураций сетевых устройств,
например оборудование компаний Cisco или Nortel то сначала нужно
создать пустые файлы в которые планируется сохранять конфигурацию.
42 Модуль 3. TFTP
То есть при backup`е конфигурации в файл на TFTP-сервере он уже должен
существовать!
Создаем пустой файл
# touch /tftpboot/cisco2960.backup
Типы пакета
В каждом передаваемом пакете есть поле размером 2 байта, оно и определяет
что это за пакет. Знание какой тип чего делает может помочь при анализе
сетевого трафика, например с помощью tcpdump.
RRQ (Read Request) – запрос на чтение файла;
WRQ (Write Request) – запрос на запись файла;
DATA – данные передаваемые через tftp;
ERR (Error) – ошибка;
OACK (Options Acknowledgment) – подтверждение опций.
Режимы передачи
Существует два режима передачи файлов:
netascii – файл перед передачей перекодируется в ASCII
octet – файл передается без изменений
Коды ошибок
0 Нет определенного кода, см. текст ошибки;
1 Файл не найден;
2 Доступ запрещен;
3 Невозможно выделить место на диске;
4 Некорректная TFTP-операция;
5 Неправильный Transfer ID;
6 Файл уже существует;
7 Пользователь не существует;
8 Неправильная опция.
Модуль 3. TFTP 43
Клиент tftp
Резюме
Обычно TFTP используется в связке с другими технологиями а для
классической передачи данных используют FTP. Настройка TFTP не занимает
более 10 минут.
Домашнее задание
Сделайте TFTP-сервер и поработайте с ним. Закачайте/скачайте файлы
воспользовавшись tftp-клиентом.
44 Модуль 3. TFTP
NFS
Установка
Скорее всего NFS уже есть в системе. Это можно проверить следующей
командой.
# chkconfig --list nfs
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
Добавляем в автозагрузку
# chkconfig nfs on
# service nfs start
Модуль 4. NFS. 45
Настройка
Файл конфигурации /etc/exports содержит список файловых систем которые
мы экспортируем, то есть разрешаем монтировать по протоколу NFS на
удаленных системах.
Каждая строка в файле это указание на экспортируемую ФС и режим доступа
к ней, шаблон следующий:
[файловая система] [кому разрешено получать доступ] [опциональные
ключи]
Пример /etc/exports:
/home 192.168.146.135(rw,no_root_squash)
Здесь мы разрешаем монтировать /home на сервере 192.168.146.135 в
режиме rw
46 Модуль 4. NFS.
Используя опцию -o можно указать дополнительные ключи монтирования.
По умолчанию монтирование происходит в режиме rw.
Если ФС экспортированы на сервере который работает 24 часа в сутки
то монтирование разделов можно добавить в /etc/fstab тем самым
автоматизировав процедуру при старте компьютера.
Строчка в /etc/fstab в нашем случае будет такая:
192.168.146.132:/home /mnt/nfs nfs defaults
Все готово.
Модуль 4. NFS. 47
Указать каким хостам разрешено монтировать наши разделы можно
несколькими способами:
Дополнительная информация
Описанного выше должно хватить сполна, но если хочется больше то:
# man nfs
# man exports
# man exportfs
Резюме
Мы выяснили что такое NFS и как ее использовать.
Домашнее задание
Сделайте доступ к ресурсу с помощью NFS и примонтируйте его с другого
компьютера.
48 Модуль 4. NFS.
Install-сервер
Принцип работы
Модуль 5. Install-сервер. 49
сетевые реквизиты и в дальнейшем адрес NFS-сервера
NFS – этап когда монтируется NFS-раздел
Init – происходит запуск /sbin/init и управление передается ему. Init – это
главный процесс в системе, другие процессы являются родительскими
процессами init.
В свободном изложение:
DHCP-сервер ожидает bootp-запросы в своей сети, после того как он получает
запрос он смотрит MAC-адрес источника, и если о таком MAC-адресе у него
имеется соответствующая запись он начинает с ним работать. DHCP —
сервер выдает клиенту сетевые реквизиты (ip-адрес, gateway, DNS-сервера,
...) и по протоколу TFTP, с помощью TFTP-сервера отправляет загрузочный
образ pxelinux.0. Этого образа хватает чтобы вывести меню выбора ОС.
Выбрав ОС вы начинаем загрузку ядра и начинаем инсталляцию, в процессе
выбрав источник установки — NFS-сервер. На NFS-сервер нужно выложить
подготовленный контент будущей операционной системы и убедиться, что
соответствующие каталоги экспортированы.
DHCP
Устанавливаем DHCPD и добавляем его в автозагрузку
# yum -y install dhcp
# chkconfig dhcpd on
ddns-update-style interim;
ignore client-updates;
default-lease-time 21600;
max-lease-time 43200;
Allow bootp;
Allow booting;
50 Модуль 5. Install-сервер.
host unixbox {
hardware ethernet 00:0c:29:77:9c:9c;
fixed-address 192.168.146.129;
filename «pxelinux.0»;
option subnet-mask 255.255.255.0;
option routers 192.168.146.2;
option domain-name «company.ru»;
option host-name «unixbox»;
next-server 192.168.146.130;
}
}
Запускаем DHCPD или перезагружаем если он был запущен
# service dhcpd restart
TFTP
Устанавливаем пакет tftp-server из репозитория
# yum -y install tftp-server
Теперь необходимо включить tftp в конфигурации xinetd, для этого в файле
/etc/xinetd.d/tftp
Меняем “disable = yes” на “disable = no” и включаем xinetd
# service xinetd start
Проверяем что порт tftp-сервера прослушивается (tftp работает на порту 69)
# netstat -nlp | grep :69
udp 0 0 0.0.0.0:69 0.0.0.0:* 3105/xinetd
Syslinux
Пакет содержит набор файлов для загрузки по сети. Нам нужны pxelinux.0
который как загрузочный образ мы будем отдавать через DHCP и menu.
c32, с помощью этого файла будет рисоваться более привлекательное меню
пользователя.
# cp $(rpm -ql syslinux | grep menu.c32) /tftpboot/
# cp $(rpm -ql syslinux | grep pxelinux.0) /tftpboot/
NFS
По умолчанию в системе скорее всего есть NFS, если нету то поставьте с
помощью yum.
# chkconfig nfs on
Модуль 5. Install-сервер. 51
В файл /etc/exports добавляем запись
echo “/var/install-server/ *(ro,no_root_squash)” >> /etc/exports
Запускаем nfs-сервер
# service nfs start
label Quit
localboot 0
Устанавливаем ОС по сети
После всех сделанных манипуляций которые описаны выше, можем
приступить к установке ОС. Стартуем нашу машину с MAC-адресом
00:0c:29:77:9c:9c включив в BIOS загрузку по сети. Когда начнется установка
все делаем стандартным образом, кроме как в списке откуда будет ставить
52 Модуль 5. Install-сервер.
ОС нужно выбрать NFS, далее когда попросят, указать:
NFS server name : 192.168.146.130
CentOS directory: /var/install-server/centos52_x86
Дальше устанавливаем ОС и пользуемся на здоровье :)
label Quit
localboot 0
Теперь выбрав «CentOS 5.2 x86 Kickstart Install» в меню выбора ОС нам
останется только подождать сервера с установленной на нем ОС.
Ниже пример моего Kickstart-файла. Мне захотелось чтобы в установленной
Модуль 5. Install-сервер. 53
ОС в настройках sshd была опция «PermitRootLogin yes». Kickstart-файл
позволяет не только задавать параметры установки ОС но и выполнять
скрипты, до инсталляции (%pre) и после (%post). Таким образом можно
написать массу скриптов по тюнингу и за 5-10 минут инсталляции получить
полностью готовую ОС.
#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth --useshadow --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Use text mode install
text
# Firewall configuration
firewall --disabled
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# Installation logging level
logging --level=info
# Use NFS installation media
nfs --server=192.168.146.130 --dir=/var/install-server/centos52_x86
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
#Root password
rootpw --iscrypted $1$Bz09jb2I$hfzh2vApqMjG0sEPsAwNr/
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# System timezone
timezone Europe/Moscow
# Install OS instead of upgrade
install
# Disk partitioning information
part swap --bytes-per-inode=4096 --fstype=”swap” --size=512
part / --bytes-per-inode=4096 --fstype=”ext3” --grow --size=1
%post --interp /bin/bash
PATH=/somework
/bin/mkdir $PATH
/bin/sed -e ‘s/#PermitRootLogin yes/PermitRootLogin yes/g’ /etc/ssh/sshd_config >
$PATH/sshd_config_edited
/bin/cp $PATH/sshd_config_edited /etc/ssh/sshd_config
/bin/rm -rf $PATH
54 Модуль 5. Install-сервер.
%packages
@base
@mysql
@mail-server
@web-server
@system-tools
После того как процесс установки завершится нужно закомментировать
строчку “ filename “pxelinux.0”;” в /etc/dhcpd.conf, чтобы после перезагрузки
сервера снова не начался процесс установки. Я пробовал поставить“label Quit”
первым в списке меню, чтобы по таймауту делался localboot 0 (выход из меню
и загрузка ОС на сервере), но счетчик банально не отсчитывается. Очевидно
это один из багов syslinux. Скажу что в Debian все работает нормально.
Как видно секции %packages, были установлены базовые утилиты, MySQL,
MTA, Apache и системные утилиты.
Установка ОС у меня заняла 5 минут.
Диагностика
В случае возникновения неисправностей используйте tcpdump. Но его также
стоит использовать чтобы понять как все работает “изнутри”.
# tcpdump -n -i eth0 “ether host 00:0c:29:25:04:55”
Ну и на всякий случай структура каталога /tftpboot
Резюме
Мы разобрались с простым и эффективным способом быстрой установки
ОС по сети.
Домашнее задание
Сделать свой Install-сервер и используя его, установить ОС на клиент. Можно
использовать мой kickstart-файл в качестве примера, только не забудьте
изменить IP-адрес NFS-сервера и путь к дистрибутиву Linux, пароль на
систему будет 111111 (root/111111).
Модуль 5. Install-сервер. 55
Xen
Типы виртуализации
Эмуляция
у ц аппаратуры
р ур
Полная виртуализация
р у ц
Паравиртуализация
р р у ц
Виртуализация
р у ц уруровня операционной
р ц системы
Перезагружаем сервер
# shutdown -r now
Распишуу по пунктам
у о чем нас спрашивали:
р
“What is the name of your virtual machine?” - здесь мы указываем имя
виртуальной машины
“How much RAM should be allocated (in megabytes)?” - сколько оперативной
памяти выделить для новой виртуальной машины
“What would you like to use as the disk (file path)?” - путь к файлу-образу
будущей виртуальной машины
“How large would you like the disk (/vm/linuxbox4.img) to be (in gigabytes)?” -
сколько места выделить для новой ВМ в гигабайтах
“Would you like to enable graphics support? (yes or no)” - обращаю внимание,
что пункт не имеет отношения к X Window в новой системе. Здесь нас
спрашивают, в каком режиме мы хотим провести процесс инсталляции.
Ставиться мы будем из консоли без графики. В противном случае нужно
было бы использовать VNC чтобы подключиться к этой машине. Лишние
хлопоты.
“What is the install location?” - здесь указываем откуда мы будем ставить ОС, я
заблаговременно примонтировал dvd-диск в /mnt, но устанавливать можно
откуда угодно.
Резюме
Мы разобрали работу Xen и научились создавать и запускать виртуальные
машины.
Домашнее задание
Разверните несколько виртуальных машин и поработайте с ними,
воспользуйтесь средствами администрирования xen.
Архитектура Subversion
Модуль 7. Subversion. 63
Протоколы работы с SVN
file:/// прямой доступ к хранилищу (на локальном диске);
http:// доступ через протокол WebDAV (если Subversion-сервер
работает через Apache);
https:// https://то же, что и http://, но с SSL-шифрованием;
svn:// доступ через собственный протокол к серверу svnserve;
svn+ssh:// то же, что и svn://, но через SSH-соединение.
Компоненты Subversion
svn – Клиент с интерфейсом командной строки
svnversion – Программа, показывающая состояние (в пределах ревизий
существующих элементов) рабочей копии
svnlook – Инструмент прямого управления хранилищем Subversion.
svnadmin – Инструмент для создания, настройки или восстановления
хранилища Subversion.
svndumpfilter – Программа для фильтрации дамповых потоков хранилища
Subversion.
mod_dav_svn – Подключаемый модуль для HTTP-сервера Apache,
использующийся для предоставления сетевого доступа к вашему
хранилищу.
svnserve – Собственный отдельный сервер, запускаемый как процесс-
демон и доступный посредством SSH; еще один способ для предоставления
сетевого доступа к хранилищу
svnsync – Программа для последовательного зеркалирования одного
хранилища в другое через сеть
Все программы расположены в /usr/bin/ кроме mod_dav_svn который
поставляется с Apache.
64 Модуль 7. Subversion.
одновременную работу с файлом нескольким пользователям, чтобы при
записи его в репозиторий изменения каждого из них были учтены ? Ведь
изменения сделанные каждым из пользователей могут перекрывать
изменения других людей.
Для решения этой проблемы есть две рабочих схемы.
Блокирование
р -> Изменение -> Разблокирование
р
Пользователь берет нужный файл из репозитория и ставит на него блокировку
пока с ним работает. Никто не сможет внести в него изменения пока тот, кто
его заблокировал не заблокирует. Пока файл заблокирован у остальных
будет только доступ только на чтение. Этот способ может применяться
при работе с графическим контентом или звуковыми файлами, ведь они
являются бинарными. А в свою очередь Subversion может анализировать
только текстовые файлы.
У этого способа есть свои минусы. Пользователь может просто забыть
разблокировать файл или может возникнуть неоправданная пошаговость,
ведь не всегда вносимые изменения могут пересекаться между собой.
Копирование
р -> Изменение -> Слияние
Пользователь извлекает нужные ему данные из репозитория, тем самым
создавая рабочую копию. Рабочая копия – это локальное отражение
данных из репозитория. Далее он вносит необходимые изменения в файлы
и закачивает их обратно в репозиторий (операция commit). В случае
если с момента создания его рабочей копий кто-то еще внес изменения
в репозиторий ему будет предложено обновить рабочую копию, внести в
нее поправки учтя работу других пользователей и только потом положить
в репозиторий. Ответственность за успешное разрешение конфликтов в
файлах лежит на пользователе.
Модуль 7. Subversion. 65
Рабочий цикл
Обновление рабочей копии
svn update
Внесение изменений
svn add
svn delete
svn copy
svn move
Анализ изменений
svn status
svn diff
svn revert
Слияние изменений, выполненных другими, с вашей рабочей копией
svn update
svn resolved
Фиксация изменений
svn commit
Установка
# yum -y install subversion
Все, мы получили инструмент для создания репозиториев и работы с ними.
Работаем с репозиторием
Для удобства работы я настроил работу по ключам у себя на машине, чтобы
не приходилось вводить пароль каждый раз когда его спросят.
# ssh-keygen -t rsa
# ssh-copy-id -i ~/.ssh/id_rsa.pub root@localhost
Создаем каталог где будут хранится репозитории
# mkdir /svn
Создаем репозиторий
# svnadmin create /svn/myrepo
Информация по репозиторию
# svn info file:///svn/myrepo/
66 Модуль 7. Subversion.
Path: myrepo
URL: file:///svn/myrepo
Repository Root: file:///svn/myrepo
Repository UUID: 0328446d-48a7-4758-9808-7aeb55de1aea
Revision: 0
Node Kind: directory
Last Changed Rev: 0
Last Changed Date: 2009-03-07 22:52:55 +0300 (Sat, 07 Mar 2009)
Committed revision 1.
Посмотрим изменилась ли ревизия.
# svn info file:///svn/myrepo
Path: myrepo
URL: file:///svn/myrepo
Repository Root: file:///svn/myrepo
Repository UUID: 0328446d-48a7-4758-9808-7aeb55de1aea
Revision: 1
Node Kind: directory
Last Changed Author: root
Last Changed Rev: 1
Last Changed Date: 2009-03-08 16:20:00 +0300 (Sun, 08 Mar 2009)
Посмотрим содержимое репозитория
# svn list file:///svn/myrepo/
file1
file2
file3
Модуль 7. Subversion. 67
У нас получился репозиторий с тремя файлами. Теперь мы создадим рабочую
копию этого репозитория и поработаем с ней.
# svn co file:///svn/myrepo/
A myrepo/file1
A myrepo/file2
A myrepo/file3
Checked out revision 1.
# cd myrepo
# echo «new line» >> file1
# svn commit -m «file1 has been modified»
Sending file1
Transmitting file data .
Committed revision 2.
68 Модуль 7. Subversion.
Warning: Permanently added 'linuxbox,192.168.146.132' (RSA) to the list of
known hosts.
mybestuser@linuxbox's password:
mybestuser@linuxbox's password:
A myrepo/file1
A myrepo/file2
A myrepo/file3
Checked out revision 2.
Ограничение доступа
Subversion обладает возможностью регулировать доступ в репозиторий.
У нас уже есть репозиторий /svn/myrepo и сейчас мы разберемся с правами
доступа к нему.
Вся настройка производится в /svn/myrepo/conf/svnserve.conf, То есть <путь
к репозитарию>/conf/svnserve.conf
[general]
anon-access = none
#auth-access = write
#password-db = passwd
authz-db = authz
realm = Bunch_Of_My_Repos
Модуль 7. Subversion. 69
В файле svnserve.conf раскоментируем строку password-db = passwd, в файл
authz добавим запись для пользователя harry если общая политика ему не
подходит.
Запустим службу svnserve
# svnserve -d
# svn list svn://harry@linuxbox/svn/myrepo
Authentication realm: <svn://linuxbox:3690> Bunch_Of_My_Repos
Password for 'root':
Authentication realm: <svn://linuxbox:3690> Bunch_Of_My_Repos
Username: harry
Password for 'harry':
file1
file2
file3
secret/
70 Модуль 7. Subversion.
* = - означает что никому и нечего не разрешено
В начале перечисления путей репозитория нужно указать корень - [/]
и задать на него права, далее следуя структуре каталогов репозитория
указать нужные нам ограничения. Каталоги ниже уровнем наследуют права
от родительских. Но права на них можно переназначить, что я собственно
продемонстрировал. В каталог /secret смогут попасть только участники
группы agents, но в каталог public который находится ниже уровнем смогут
попасть все. Учитывайте эти особенности в вашей политике безопасности.
Пользователи используемые в это схеме аутентификации – это системные
пользователи. Сейчас я продемонстрирую права доступа в деле.
Модуль 7. Subversion. 71
james@linuxbox's password:
file1
file2
file3
public/
Программы-клиенты
р р
Получить доступ к репозиторию можно не только через консоль. Существует
несколько известных и хороших программ. Например TortoiseSVN для ОС
Windows.
Резюме
Мы разобрали работу Subversion и освоили принцип базовой работы с этой
технологией. Subversion будет очень кстати в компаниях по разработке
программного обеспечения, для контроля исходных кодов программ. Также,
многие используют Subversion при коллективной работе с большим числом
текстовых документов.
Домашнее задание
Установить Subversion, создать репозиторий и поработать с ним с Linux-
клиента(командная строка) и Windows-клиента (программа TortoiseSVN).
72 Модуль 7. Subversion.
Apache
Apache – это самый популярный веб-сервер. Его задача как и любого другого
веб-сервера – отдавать контент на запросы клиентов. Apache обладает
большим функционалом за счет подключаемых модулей. На данный момент
есть три независимые рабочие ветки – 1.3.x, 2.0.x, 2.2.x. В репозитории CentOS
находится Apache ветки 2.2.x, его мы и будем использовать.
Установка
Установим классическую связку — Apache + PHP + MySQL. Пакет php-mysql
обеспечивает поддержку MySQL в PHP, он нужен если вы хотите работать с
СУБД через PHP.
Модуль 8. Apache. 73
поток имеют доступ ко всей памяти процесса то worker MPM подвержен
сбоям в большей степени, чем prefork, о котором ниже.
prefork
k – в этом случае используется несколько процессов, каждый процесс
обслуживает одно подключение. Этот MPM используетс немного больше
ресурсов но более стабилен.
Настройка
74 Модуль 8. Apache.
Конфигурационный файл /etc/httpd/conf/httpd.conf
Модуль 8. Apache. 75
KeepAliveTimeout Период времени в течение которого ожидается
очередной запрос от клиента на том же соединение;
<IfModule> Модуль в этой секции загрузится только в случае
</IfModule> если результат выполнения теста будет истина, если
ложь то секция будет проигнорирована;
Listen Предписывает Apache принимать соединения на
выбранном IP-адресе и/или порту;
LoadModule Загрузка DSO (Dynamic Shared Object) модуля;
Include conf.d/*.conf Директива подключения дополнительных файлов
конфигурации;
ExtendedStatus Генерировать полную статистику или только
базовую, когда запрошен server-status;
User Пользователь/группа с полномочиями которых
Group работает Apache.
76 Модуль 8. Apache.
<Files ~ «^\.ht»> Секция <Files></Files> позволяет задать настройки
Order allow,deny для файлов по определенной маске, в данном
примере для всех файлов с расширением .ht мы
Deny from all
запрещаем доступ через веб-браузер;
</Files>
TypesConfig Директива задает расположение файла с Mime —
типами;
DefaultType Mime — тип по умолчанию text/plain, То есть
содержимое выводим на экран;
HostnameLookups В log-файлы записывать IP-адреса или имена
клиентов, если опция включена то каждый раз
производиться запрос к DNS-серверу с целью
выяснить имя клиента. Включать эту опцию не
рекомендуется так как это повлечет за собой
задержку с обработкой пользовательских запросов;
EnableMMAP Включать ли memory-mapping, включается когда
есть необходимость читать содержимое файла в
процессе его доставки. Не рекомендуется включать
при обслуживание NFS-директорий;
EnableSendfile Включать поддержку sendfile или нет. На некоторых
платформах и ОС лучше отключить;
ErrorLog Расположение log-файла для журналирования
ошибок;
LogLevel Директива задает уровень журналирования в log-
файлы. Возможны такие опции:
emerg — система полностью неработоспособна;
alert — что-то должно быть сделано немедленно;
crit — критическая ситуация;
error — журналирование ошибок;
warn — журналирование предупреждений;
notice — уровень мелких замечаний;
info — информационный уровень;
debug — максимальный уровень журналирования;
LogFormat Задает формат записи log-файла;
CustomLog Расположение основного log-файла, если для
виртуальных хостов не задан свой CustomLog то
вся информация будет записываться в CustomLog
“главного” веб-сервера;
ServerSignature Позволяет задать строку которая будет выводиться
на генерируемых страницах. Полезно при
использование цепочки прокси-серверов;
Модуль 8. Apache. 77
Alias Задание альяса в формате: Alias fakename realname.
Если в альясе есть слеш (/) то и при запросе его тоже
нужно указывать. Пример альяса (псевдонима):
Alias /icons/ “/var/www/icons/” - при запросе
http://<server_ip>/icons/ будут использоваться
картинки из каталога /var/www/icons/;
ScriptAlias Тоже самое что и Alias, только файлы расположенные
в realname каталоге будут выполняться как скрипты
а не пересылаться клиенту в виде обычных файлов
как это происходит при использование Alias;
Redirect Позволяет делать перенаправление на другой
ресурс. Например:
Redirect /service http://foo2.example.com/service
При запросе файла http://example.com/service/foo.
txt будет сделан запрос к http://foo2.example.com/
service/foo.txt
IndexOptions Позволяет задать ряд настроек для директорий,
такие как кодировка, MIME-тип, Description Width,
FancyIndexing, FoldersFirst и многие другие;
AddIconByEncoding Директивы AddIcon* указывают серверу, какие
AddIconByType иконки показывать для различных файлов, или
расширений имен файлов. Они показываются
AddIcon
только для директорий с FancyIndexing;
DefaultIcon Директива указывает какую иконку показывать для
файлов, не имеющих явно определенных иконок;
ReadmeName Задает название README файла, которое сервер
будет искать по умолчанию, затем он будет добавлен
в листинг директории;
HeaderName Задает файл который будет добавлен в начало
листинга директории;
IndexIgnore Директива задает список файлов которые должны
быть исключены из листинга;
DefaultLanguage Директивы позволяют указать язык для документов.
AddLanguage Выможете в последствиеиспользоватьдинамическое
определение содержимого (content negotiation)
для выдачи браузеру файла на языке понятном
пользователю. DefaultLanguage задает язык по
умолчанию для всех документов, AddLanguage
позволяет задать язык для конкретных;
78 Модуль 8. Apache.
LanguagePriority LanguagePriority позволяет задать порядок выбора
некоторых языков (в случае неоднозначности) при
динамическом определении содержания (content
negotiation);
ForceLanguagePriority Директива позволяет серверу выдать конкретную
страницу, вместо сообщения MULTIPLE CHOICES
(задается Prefer) или сообщения NOT ACCEPTABLE
(задается Fallback), в случае, если не один язык не
подошел;
AddDefaultCharset Директива задает кодировку по умолчанию;
AddType Позволяет задать новый MIME-тип или
переопределить старый;
AddEncoding Позволяет на ходу распаковывать данные. Не все
браузеры это поддерживают;
AddHandler Директива позволяет назначить обработчик
файлам с определенным расширением. В свою
очередь, обработчики могут уже быть встроены в
веб-серверы или определены директивой Action;
AddOutputFilter Директива позволяет назначить фильтр файлам
с определенным расширением. Фильтры
обрабатывают страницы до того как их отправить
клиенту;
ErrorDocument Позволяет задать отображаемые страницы для
различного рода ошибок;
BrowserMatch Позволяет задать поведение сервера для
конкретного веб-браузера, это полезно в случае
известных ошибок в реализации веб-браузера;
<Location /server-status> Секция описывает страницу статус веб-сервера,
SetHandler server-status на которой много интересной информации о
состояние веб-сервера. Доступ к ней можно
Order deny,allow
получить по адресу: http://<servername>/server-
Deny from all status/
Allow from 192.168.146.150
</Location>
<Location /server-info> Секция описывает страницу с конфигурацией веб-
SetHandler server-info сервера. Доступ к ней можно получить по адресу:
Order deny,allow http://<servername>/server-info/
Deny from all
Allow from 192.168.146.150
</Location>
Модуль 8. Apache. 79
<IfModule mod_proxy.c> Секция описывает прокси сервер, раскоментируйте
</IfModule> строки чтобы его включить;
<IfModule mod_disk_ Секция позволяет включить кэширование
cache.c> проксируемого контента и задать директорию где
CacheEnable disk / он будет храниться.
CacheRoot “/var/cache/mod_proxy”
</IfModule>
80 Модуль 8. Apache.
Все запросы которые не направлены к 192.168.146.20 будут обработаны
“главным” сервером. Запросы к 192.168.146.20 с неизвестным hostname или
без заголовка Host: будут обслуживаться из /www/example1/
NameVirtualHost 192.168.146.10
NameVirtualHost 217.10.20.30
NameVirtualHost 192.168.146.150:80
NameVirtualHost 192.168.146.150:8080
<VirtualHost 192.168.146.150:80>
ServerName www.example.com
DocumentRoot /www/domain-80
</VirtualHost>
<VirtualHost 192.168.146.150:8080>
ServerName www.example.com
DocumentRoot /www/domain-8080
</VirtualHost>
<VirtualHost 192.168.146.150:80>
ServerName www.example.org
DocumentRoot /www/otherdomain-80
</VirtualHost>
<VirtualHost 192.168.146.150:8080>
ServerName www.example.org
DocumentRoot /www/otherdomain-8080
</VirtualHost>
Модуль 8. Apache. 81
IP-based виртуальный хостинг
Указанные ниже IP-адреса в свою очередь резолвятся в example.com и
example2.com
Listen 80
<VirtualHost 192.168.146.10>
DocumentRoot /www/example1
ServerName www.example.com
</VirtualHost>
<VirtualHost 192.168.146.20>
DocumentRoot /www/example2
ServerName www.example2.com
</VirtualHost>
Также могут быть смешанные вариации, которые могут одновременно
использовать порты, IP-адреса
<VirtualHost *:80>
ServerAdmin support@company.ru
DocumentRoot /var/sites/company.ru/html
ServerName company.ru
ServerAlias www.company.ru
82 Модуль 8. Apache.
DirectoryIndex index2.php
ScriptAlias /cgi-bin/ /var/sites/company.ru/html/cgi-bin/
ErrorLog /var/sites/company.ru/html/logs/error_log
CustomLog /var/sites/company.ru/html/logs/access_log common
</VirtualHost>
#!/usr/bin/perl
print «Content-type: text/html\n\n»;
print «Hello, World.»;
Модуль 8. Apache. 83
Устанавливаем право на исполнение для этого файла
# chmod +x test.cgi
Проверяем
http://www.company.ru/cgi-bin/test.cgi
84 Модуль 8. Apache.
All Доступны все опции кроме MultiViews, эту опцию
нужно указывать явно;
ExecCGI Выполнение CGI-скриптов с использованием mod_
cgi разрешено;
FollowSymLinks Разрешено переходить по символическим
ссылкам;
Includes Разрешены Server Side Includes (SSI);
IncludesNOEXEC SSI разрешены но команды #exec cmd и #exec cgi
отключены;
Indexes Если при запросе директории в ней не будет
найден файл из DirectoryIndex то mod_autoindex
вернет листинг этой директории с файлами и
каталогами;
MultiViews Разрешено Content-negotiation, когда есть
возможность отдавать контент в разных его
вариациях и клиент присылает свои пожелания;
SymLinksIfOwnerMatch Разрешен переход только по симлинкам владелец
конечного файла которых является владельцем
этого симлинка.
Модуль 8. Apache. 85
Indexes Позволяет использовать директивы отвечающие за
индексацию директории: AddDescription, AddIcon,
AddIconByEncoding, AddIconByType, DefaultIcon,
DirectoryIndex, FancyIndexing, HeaderName,
IndexIgnore, IndexOptions, ReadmeName и т.д.
Limit Директивы для управления доступа к хосту: Allow,
Deny and Order;
Options Позволяет использовать специфичные опции для
директорий;
None Запрещает использование .htaccess.
Аутентификация на сайте
Доступ в какой либо каталог можно ограничить списком учетных записей.
Для создания файла учетных записей используется программа htpasswd.
Когда мы создаем свой первый файл, который будет содержать список
учетных записей, программа htpasswd вызывается с ключем -c который
говорит о том, что нужно файл создать. При добавление учетных записей в
существующий файл, этот ключ использовать не нужно.
Теперь нужно сообщить веб-серверу, что при запросе каталога logs доступ
туда будет разрешен только определенному списку пользователей. Для
этого в файл /var/sites/company.ru/logs/.htaccess добавим такие директивы.
AuthType Basic
AuthName «Restricted Area»
AuthBasicProvider file
AuthUserFile /var/sites/company.ru/.htpasswd
Require valid-user
86 Модуль 8. Apache.
Проверяем
http://www.company.ru/logs/
Включение SSL
SSL (Secure Sockets Layer) – криптографический протокол обеспечивающий
безопасную передачу данных. Для реализации SSL в Apache есть
Модуль 8. Apache. 87
специальный модуль – mod_ssl, который предоставляет интерфейс
к библиотеки OpenSSL, предоставляющею сильное шифрование с
использованием протоколов SSL и TLS (Transport Layer Security). Для работы
с SSL необходимо сгенерировать два файла – ключ, который хранится на
сервере и сертификат, этот сертификат будет предлагаться всем желающим
когда они запросят любую информацию по адресу https://ваш_сервер/ и
т.д.
Сертификаты могут быть выданы специальными службами, - CA –
Certificate Authority, это будет стоит определенных денег. А можно
сделать самоподписанный, тогда при запросе страниц по https клиенту
будет выдаваться предупреждение, что сертификат выдан неизвестным
источником. Но как показывает практика, большинство организаций именно
такими и пользуются.
Устанавливаем mod_ssl
# yum -y install mod_ssl
После установки mod_ssl он будет подключен к Apache с помощью файла /
etc/httpd/conf.d/ssl.conf
Все что нам нужно сделать – это добавить новую секцию VirtualHost для 443
порта, именно на этом порту обслуживаются https соединения и директиву
NameVirtualHost.
NameVirtualHost *:443
<VirtualHost *:443>
SSLEngine on
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
ServerAdmin support@company.ru
DocumentRoot /var/sites/company.ru/html
ServerName company.ru
ServerAlias www.company.ru
DirectoryIndex index2.php
ErrorLog /var/sites/company.ru/html/logs/error_log
CustomLog /var/sites/company.ru/html/logs/access_log common
RewriteLog /var/sites/company.ru/rewrite.log
RewriteLogLevel 1
</VirtualHost>
SSLEngine позволяет включить SSL для сайта а директивы SSLCertificateKeyFile
и SSLCertificateFile указывают на расположение ключа и файла сертификата.
По умолчанию сертификат выдан на localhost.localdomain, что не очень
красиво. Давайте создадим новый самоподписанный сертификат для
88 Модуль 8. Apache.
company.ru Для этого понадобится библиотека OpenSSL (если не установлена
то yum -y install openssl).
Еще одна особенность SSL - для каждого сертификата нужен отдельный IP-
адрес. Наш сервер работает с IP 192.168.146.150 и все размещенные сайты
делят его между собой. Самый главный сайт на сервере – это конечно
корпоративный сайт и именно для него мы сделаем сертификат а другие
сайты также будут его использовать.
Переходим в директорию httpd
# cd /etc/httpd/conf.d/
Генерируем сертификат и ключ
# openssl req -new -x509 -nodes -out server.crt -keyout server.key
Generating a 1024 bit RSA private key
.....................++++++
..................................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:RU
State or Province Name (full name) [Berkshire]:Moscow
Locality Name (eg, city) [Newbury]:Moscow
Organization Name (eg, company) [My Company Ltd]:company.ru
Organizational Unit Name (eg, section) []:IT Dept
Common Name (eg, your name or your server’s hostname) []:company.ru
Email Address []:support@company.ru
После запуска команды openssl, будет задано несколько простых вопросов,
после чего сгенерируются server.crt и server.key файлы. Обращаю внимание
– Common Name должно полностью соответствовать вашему доменному
имени.
В файле /etc/httpd/conf.d/ssl.conf находим директивы SSLCertificateFile и
SSLCertificateKeyFile и приводим их к такому виду:
SSLCertificateFile /etc/httpd/conf.d/server.crt
SSLCertificateKeyFile /etc/httpd/conf.d/server.key
В секции виртуального хоста в httpd.conf исправляем пути к нашим новым
файлам:
Модуль 8. Apache. 89
<VirtualHost *:443>
SSLEngine on
SSLCertificateKeyFile /etc/httpd/conf.d/server.key
SSLCertificateFile /etc/httpd/conf.d/server.crt
ServerAdmin support@company.ru
DocumentRoot /var/sites/company.ru/html
ServerName company.ru
ServerAlias www.company.ru
DirectoryIndex index2.php
ErrorLog /var/sites/company.ru/html/logs/error_log
CustomLog /var/sites/company.ru/html/logs/access_log common
RewriteLog /var/sites/company.ru/rewrite.log
RewriteLogLevel 1
</VirtualHost>
# apachectl graceful
Теперь, если у вас сохранен старый сертификат для company.ru в браузере
то его нужно удалить, иначе вы будете продолжать его использовать. Для
браузера Firefox удалить сертификат можно вот так:
Инструменты -> Настройки -> Дополнительно -> Просмотр сертификатов ->
закладка Серверы, там мы находим сертификат для company.ru и удаляем его.
Пробуем зайти на наш сайт – https://www.company.ru/
При сохранение очередного сертификата убедитесь, что теперь он выдан на
company.ru а не localhost.localdomain
server-status и server-info
Можно получить много информации о состояние вашего веб-сервера, для
этого нужно в httpd.conf внести следующие записи:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 192.168.146.1
</Location>
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from 192.168.146.1
</Location>
90 Модуль 8. Apache.
Директивой Allow from задайте IP-адреса с которых можно попасть на эту
страницу.
SSI
SSI (Server Side Includes) – это директивы которые могут быть помещены в
html страницу. Они позволяют генерировать динамический контент html-
страниц без применения CGI, Perl или PHP.
Для включения SSI необходимо убедиться, что в файле httpd.conf есть такие
строки:
AddType text/html .shtml
AddOutputFilter INCLUDES .shtml
Использование mod_rewrite
Описание работы Apache не может быть полным без описания модуля mod_
rewrite. Он является одним из самых популярных среди веб-разработчиков,
позволяя на лету модифицировать запрошенный URL. Для простого
перенаправления достаточно директивы Redirect, но mod_rewrite позволяет
решать более сложные задачи.
Ниже я приведу ряд примеров, чтобы было понятно о чем идет речь. Все эти
команды нужно указывать в вашем .htaccess
Модуль 8. Apache. 91
RewriteEngine Включаем mod_rewrite;
RewriteBase Определяем корень, / соответствует корню сайта
http://www.company.ru/
RewriteRule Само правило, их может быть много.
RewriteEngine on
RewriteBase /
RewriteRule ^(.*)shop/(.*)$ $1catalog/shop.php?$2
92 Модуль 8. Apache.
RewriteLog /var/sites/company.ru/html/logs/rewrite.log
RewriteLogLevel 1
Если нужно больше отладочной информации то можно установить
RewriteLogLevel в положение 2 или 3.
Регулярные выражения
^ Начало строки
$ Конец строки
. Любой символ
(a|b) a или b
(...) Выбор группы;
[abc] Любой из этих символов (диапазон);
[^abc] Ни один символ из этого диапазона;
a? Буква a один раз или 0;
a* Буква а ноль или более раз;
a+ Буква а один или более раз;
a{3} Буква а три раза;
a{3,} Буква а более трех раз;
a{3,6} Буква а от 3 до 6 раз;
!(pattern) Отрицание;
Флаги RewriteRule
R[=code] Redirect, перенаправление на новый URL по
заданному коду;
F Forbidden, недоступно;
P Proxy, прокси;
L Last, последнее правило;
G Gone, больше не существует;
N Next, следующая;
C Chain, цепочка;
T=mime-type Type, задание MIME-типа;
NS NoSubreq, пропустить директиву если текущий
подзапрос является внутренним подзапросом;
NC NoCase, не учитывать регистр;
QSA QSAppend, добавлять строку запроса;
NE NoEscape, не экранировать URI при выводе;
PT PassThrough, пропускать через следующий
обработчик;
Модуль 8. Apache. 93
S=количество Skip, пропустить следующее количество правил;
E=VAR:VAL ENV, установить переменную окружения;
CO=NAME:VAL:domai Cookie, записывает cookie клиенту.
n[:lifetime[:path]] NAME – название cookie;
VAL – значение cookie;
domain – домен;
lifetime – время жизни cookie;
path – путь куда записать cookie;
Коды веб-сервера
100-199 – информационные, запрос агента принят и обрабатывается;
200-299 – запрос успешно обработан и отправлен;
300-399 – запрос изменен и нужно предпринять действия для удовлетворения
измененного запроса;
400-499 – возникли серьезные проблемы при попытке выполнить запрос;
500-599 – ошибки на сервере;
100 Продолжить;
101 Переключение протоколов;
200 OK;
201 Создан;
202 Принято;
203 Не авторская информация;
204 Нет содержимого;
205 Сбросить содержимое;
206 Частичное содержимое;
300 Множественный выбор;
301 Перемещен навсегда;
302 Найден;
303 Смотреть другой;
304 Не модифицирован;
305 Использовать прокси-сервер;
307 Временно переадресован;
400 Неправильный запрос;
401 Несанкционированно;
402 Требуется оплата;
403 Запрещено;
94 Модуль 8. Apache.
404 Ресурс не найден;
405 Метод запрещен;
406 Не приемлем;
407 Требуется аутентификация через прокси-сервер;
408 Истекло время ожидания запроса;
409 Конфликт;
410 Недоступен;
411 Требуется длина запроса;
412 Предусловие неверно;
413 Объект запроса слишком большой;
414 URI запроса слишком длинный;
415 Неподдерживаемый тип медиа;
416 Диапазон запроса неудовлетворителен;
417 Ожидание неуспешно;
500 Внутренняя ошибка веб-сервера;
501 Не реализовано;
502 Плохой шлюз;
503 Сервис недоступен;
504 Таймаут;
505 Версия протокола HTTP не поддерживается;
ServerTokens Full
ServerRoot «/etc/httpd»
PidFile run/httpd.pid
Timeout 120
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15
<IfModule prefork.c>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
</IfModule>
Модуль 8. Apache. 95
<IfModule worker.c>
StartServers 2
MaxClients 150
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0
</IfModule>
Listen 80
96 Модуль 8. Apache.
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule file_cache_module modules/mod_file_cache.so
LoadModule mem_cache_module modules/mod_mem_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so
Include conf.d/*.conf
ExtendedStatus On
User apache
Group apache
ServerAdmin root@localhost
UseCanonicalName Off
DocumentRoot «/var/www/html»
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory «/var/www/html»>
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule mod_userdir.c>
UserDir disable
</IfModule>
Модуль 8. Apache. 97
DirectoryIndex index.html index.htm index.php index.php5
AccessFileName .htaccess
<Files ~ «^\.ht»>
Order allow,deny
Deny from all
</Files>
TypesConfig /etc/mime.types
DefaultType text/plain
<IfModule mod_mime_magic.c>
MIMEMagicFile conf/magic
</IfModule>
HostnameLookups Off
ErrorLog logs/error_log
LogLevel warn
ServerSignature On
<Directory «/var/www/icons»>
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<IfModule mod_dav_fs.c>
DAVLockDB /var/lib/dav/lockdb
</IfModule>
98 Модуль 8. Apache.
<Directory «/var/www/cgi-bin»>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
ReadmeName README.html
HeaderName HEADER.html
AddLanguage ca .ca
AddLanguage cs .cz .cs
Модуль 8. Apache. 99
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw
AddDefaultCharset UTF-8
AddType application/x-compress .Z
AddType application /x-gzip .gz .tgz
<IfModule mod_negotiation.c>
<IfModule mod_include.c>
<Directory «/var/www/error»>
</IfModule>
</IfModule>
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 192.168.146.1
</Location>
<Location /server-info>
SetHandler server-info
Order deny,allow
Deny from all
Allow from 192.168.146.1
</Location>
NameVirtualHost *:80
NameVirtualHost *:443
<VirtualHost *:80>
ServerAdmin support@company.ru
DocumentRoot /var/sites/company.ru/html
ServerName company.ru
ServerAlias www.company.ru
DirectoryIndex index2.php
ScriptAlias /cgi-bin/ /var/sites/company.ru/html/cgi-bin/
ErrorLog /var/sites/company.ru/html/logs/error_log
CustomLog /var/sites/company.ru/html/logs/access_log common
RewriteLog /var/sites/company.ru/rewrite.log
RewriteLogLevel 1
</VirtualHost>
<VirtualHost *:443>
SSLEngine on
SSLCertificateKeyFile /etc/httpd/conf.d/server.key
SSLCertificateFile /etc/httpd/conf.d/server.crt
ServerAdmin support@company.ru
DocumentRoot /var/sites/company.ru/html
ServerName company.ru
ServerAlias www.company.ru
DirectoryIndex index2.php
ScriptAlias /cgi-bin/ /var/sites/company.ru/html/cgi-bin/
ErrorLog /var/sites/company.ru/html/logs/error_log
CustomLog /var/sites/company.ru/html/logs/access_log common
RewriteLog /var/sites/company.ru/rewrite.log
RewriteLogLevel 1
</VirtualHost>
Резюме
Мы установили и настроили наш веб-сервер. Разобрались с ключевым
моментами:
Установка Apache;
Настройка Apache;
Полностью разобрали конфигурационный файл httpd.conf;
Домашнее задание
Домашним заданием будет установить Apache и пройтись по всему
функционалу описанному в этом модуле.
Возможности SAMBA
• обеспечение доступа к Linux-разделам Windows-клиентам;
• обеспечение доступа к Windows-разделам Linux-клиентам;
• совместное использование принтеров подключенных к Linux-системе
Windows-клиентами;
• совместное использование принтеров подключенных к Windows-системе
Linux-клиентами;
• Средства авторизации и аутентификации.
Одним словом система, которая позволит сделать файл-сервер и принт-
сервер.
Установка
Устанавливаем SAMBA
# yum -y install samba
Добавляем в автозагрузку
# chkconfig smb on
Типы аутентификации
Прежде чем мы приступим к настройке, важно будет узнать какие способы
аутентификации есть в SAMBA. Это наверно самый главный параметр в ней,
который описывает способ получения доступа к ресурсам сервера.
ADS – samba является членом домена Active Directory. Необходимо поставить
Kerberos чтобы использовать этот режим.
Domain – samba полагается на информацию от Primary или Backup Domain
Controller. Поступающие к ней пароли и логины она направляет к контроллеру
и ждет пока тот проверит, есть ли такой пользователь в домене или нет.
Ключевые файлы
/etc/samba/smb.conf Главный конфигурационный файл и все настройки
задаются здесь;
/etc/samba/smbusers Файл в котором можно залинковать Windows-
пользователя на UNIX-пользователя, например
чтобы понять при подключение Windows-
пользователя кто он будет на SAMBA-сервере. Еще
одно назначение – это линковка многих windows-
пользователей на одного UNIX-пользователя, в этом
случае все действия в системе будут производится
от его лица и с его правами доступа;
/etc/samba/lmhosts Похож на /etc/hosts только занимается резолвингом
NetBIOS имен;
/usr/bin/smbpasswd Программа создания учетных записей SAMBA.
Популярный ключи:
-a добавляем пользователя (он уже должен быть в
системе);
-e включаем его учетную запись (по умолчанию
отключена);
-x удаляем пользователя из базы данных SAMBA
(системный пользователь остается на месте);
/usr/bin/smbclient SAMBA-клиент, позволяет подключаться к SAMBA-
ресурсам из командной строки (после того как
подключитесь наберите help для вывода возможных
действие, help <command> - более подробное
описание команды);
/usr/bin/smbcontrol Позволяет отсылать команды smbd и nmbd;
/ u s r / s h a r e / d o c / Документация.
samba-3.0.33
# ------------------------------Charsets----------------------------------------
unix charset = utf8
dos charset = cp1251
display charset = cp1251
# testparm
Load smb config files from /etc/samba/smb.conf
Processing section «[home]»
Processing section «[private]»
В public мы зайдем без паролей, так как это публичная файлопомойка, чтобы
зайти в home вводим свои учетные данные и попадаем в свой личный домашний
каталог а вот каталог private будет доступен только пользователю bestuser.
Аккаунты SAMBA-пользователей находятся в /etc/samba/smbpasswd
Резюме
Мы выяснили что такое SAMBA и как ее использовать. Есть множество
способов аутентификации, но мы использовали классические – на базе
системных аккаунтов.
Домашнее задание
Установить и настроить SAMBA и проверить работоспособность с Windows-
клиента.
Принцип работы
Принцип получения IP-адреса с помощью DHCP-сервера можно разделить
на 4 этапа:
Установка DHCPD
# yum -y install dhcp
# chkconfig dhcpd on
Настройка DHCPD
Файлы конфигурации
/etc/dhcpd.conf Файл конфигурации DHCPD;
/usr/share/doc/dhcp-3.0.5/ Документация;
/usr/sbin/dhcpd DHCP daemon, бинарный файл;
/usr/sbin/dhcrelay DHCP Relay, предназначен для
перенаправления запросов DHCP или BOOTP
из сети где нет DHCP-сервера в сеть где он
есть;
/etc/rc.d/init.d/dhcpd Скрипты автоматизации запуска (с помощью
/etc/rc.d/init.d/dhcrelay chkconfig инсталлируются в /etc/init.d/);
/var/lib/dhcpd/dhcpd.leases Файл в котором сохраняется информация о
выданных IP-адресах;
/etc/sysconfig/dhcpd Файл аргументов.
Конфигурационный
ф ур ц файл /etc/dhcpd.conf
ф p
ddns-update-style interim;
ignore client-updates;
authoritative;
default-lease-time 86400;
max-lease-time 86400;
Allow bootp;
Allow booting;
host linuxbox {
hardware ethernet 00:0C:29:77:9C:9C;
fixed-address 192.168.146.150;
# filename «pxelinux.0»;
option subnet-mask 255.255.255.0;
option routers 192.168.146.2;
option domain-name «fasttech.ru»;
option host-name «dhcphost»;
# next-server 192.168.146.130;
}
}
Секции-объявления
Структуру конфигурационного файла dhcpd.conf можно представить как
набор секций. Каждая секция несет в себе определенную роль. Секции
могут быть вложенными. Задаваемые параметры могут быть глобальными
или приватными, для одного хоста или группы хостов.
shared-network
Секция shared-network сообщает серверу DHCP, что несколько IP-подсетей
используют один физический сегмент. Каждая подсеть в такой сети
объявляется внутри секции shared-network.
shared-network имя {
[ параметры ]
[ объявления ]
}
Пример:
shared-network MyBigNetwork {
shared-network-specific parameters...
subnet 192.168.146.0 netmask 255.255.255.224 {
subnet-specific parameters...
range 192.168.146.10 192.168.146.20;
}
subnet 192.168.146.32 netmask 255.255.255.224 {
subnet-specific parameters...
range 192.168.146.35 192.168.146.60;
}
}
Пример:
subnet 192.168.146.0 netmask 255.255.255.0 {
range
g
Для любой подсети адреса которой присваиваются динамически, должен
быть указан хотя бы один диапазон с помощью секции range. В параметрах
указывается начальный и конечный адреса диапазона. Все IP адреса
в диапазоне должны принадлежать той подсети к описанию которой
относится секция range. Параметр dynamic-bootp указывается в случае,
если предполагается назначать адреса из диапазона клиентам по протоколу
BOOTP. Если указан только один адрес, то параметр конец диапазона может
быть опущен.
Пример:
host имя_хоста {
[ параметры ]
[ объявления ]
}
Пример:
host linuxbox {
hardware ethernet 00:0C:29:77:9C:9C;
fixed-address 192.168.146.150;
}
g p
group
Секция group используется для присвоения одного или нескольких
параметров группе объявлений. Параметры могут быть одновременно
присвоены группе секций hosts, shared networks, subnets, или даже group.
group {
[ параметры ]
[ объявления ]
}
Пример:
group {
filename «pxelinux.0»;
next-server 192.168.146.132;
Используемые порты
DHCP server ожидает запросы на порту 67 UDP
DHCP client ожидает ответы на порту 68 UDP
DHCP-клиент
Для того чтобы получать сетевые настройки с помощью DHCP-сервера
необходимо убедиться, что в настройках сетевого интерфейса есть
следующее:
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
Резюме
Мы разобрали работу DHCP. Как видно настройка является простой и нечто
большее требуется очень редко. DHCP-сервер также будет использоваться в
модуле посвященном Install-серверу.
Домашнее задание
Настроить свой DHCP-сервер и попробовать динамически получить сетевые
реквизиты для какого-нибудь клиента в той же сети.
Принцип работы
Раньше все данные хранились в обычных текстовых файлах. Но со временем,
объем информации с которым стали работать становился все больше и
больше. Появилась необходимость в получение к ней быстрого и удобного
доступа. Появилась необходимость структурировать большой объем данных
и производить там поиск.
Типы данных
Все данные хранятся в определенном формате, который принято называть
типом данных. Типы данных бывают разные, числовые – хранят числа,
строковые – хранят наборы символов (слова, целые предложения) и
Числа
TINYINT – очень маленькое целое число, может быть от -128 до 127 или от 0
до 255
SMALLINT – малое целое число, может быть от -32768 до 32767 или от 0 до
65535
MEDIUMINT – целое число среднего размера, может быть от -8388608 до
8388607 или от 0 до 16777215
INT – целое число нормального размера, может быть от -2147483648 до
2147483647 или от 0 до 4294967295
BIGINT – большое целое число, может быть от -9223372036854775808 до
9223372036854775807 или от 0 до 18446744073709551615
FLOAT – малое число с плавающей точкой обычной точности. Может
быть от -3.402823466E+38 до -1.175494351E-38, 0, и от 1.175494351E-38 до
3.402823466E+38.
DOUBLE - число с плавающей точкой удвоенной точности нормального
размера. Может быть от -1,7976931348623157E+308 до -2,2250738585072014E-
308, 0, и от 2,2250738585072014E-308 до 1,7976931348623157E+308
Символы
CHAR – до 255 символов, пустота заполняется пробелами
VARCHAR – строка переменной длины, для хранения величин типа VARCHAR
используется только то количество символов, которое нужно + 1 байт для
хранения информации о длине
Бинарные
р данные
BLOB – этот тип данных содержит бинарные данные, например графические
картинки. Максимальная размер BLOB – 65535 байт.
MEDIUMBLOB – тоже самое что и BLOB, только максимальный размер -
16,777,215 байт (16 МБ)
LONGBLOB – бинарный тип, размер до 4 Гб.
Числа
Тип дданных Сколько нужно
у места д
для хранения
р
TINYINT 1 байт
SMALLINT 2 байта
MEDIUMINT 3 байта
INT, INTEGER 4 байта
BIGINT 8 байт
4 байта если 0 <= p <= 24, 8 байт если 25
FLOAT(p)
<= p <= 53
FLOAT 4 байта
DOUBLE [PRECISION], REAL 8 байт
Даты и время
Д р
Тип данных Сколько нужно места
DATE 3 байта
TIME 3 байта
DATETIME 8 байт
TIMESTAMP 4 байта
YEAR 1 байт
Строки
р и бинарный
р тип
Тип данных Сколько нужно места
CHAR M × w байт, 0 <= M <= 255, где w – нужное число байт
для объекта
VARCHAR L + 1 байт если значение требует до 255 байт, L + 2
байт если требуется больше чем 255 байт
Практика
Начнем осваивать MySQL но для начала поставим нужное ПО.
# /etc/init.d/mysqld status
mysqld is stopped
# chkconfig mysqld on
# /etc/init.d/mysqld start
Initializing MySQL database: Installing MySQL system tables...
OK
Filling help tables...
OK
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.0.45 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
Мы без проблем попали внутрь и можем делать что хотим! Думаю вам не
захочется чтобы кто-то еще получил доступ к Вашим данным. Поэтому мы
сейчас поставим административный пароль.
Ошибка доступа! Это хорошо, это означает что уже не любой сможет попасть
в базу. Теперь зададим команду mysql с ключом -p, То есть запросим строку
ввода пароля, ключ -u позволяет задать пользователя под которым мы хотим
зайти. Но если ключ не задан будет использован root, То есть администратор
сервера.
# mysql -p
<вводим наш пароль на MySQL, который мы ввели выше>
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.0.45 Source distribution
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>
mysql> \s
--------------
mysql Ver 14.12 Distrib 5.0.45, for redhat-linux-gnu (i686) using readline 5.0
Connection id: 12
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.0.45 Source distribution
Protocol version: 10
mysql>
Эти три базы стандартные, они всегда есть в новой инсталляции MySQL. Базу
test можно удалить, это делается командой DROP DATABASE
Выберем нашу базу данных в качестве текущей, это делается командой USE
mysql> INSERT INTO users VALUES('', 'Ivan', 'Petrov', '25', 'petrov@company.ru', 'work');
Query OK, 1 row affected, 1 warning (0.00 sec)
mysql> INSERT INTO users VALUES('', 'Fyodor', 'Karpin', '27', 'fyodor@company.ru', 'work');
Query OK, 1 row affected, 1 warning (0.01 sec)
Сегодня наш коллега Сергей вернулся из отпуска, нужно это отобразить в БД.
Вернем пока что Федора на место, все таки 3 – хорошее число и посчитаем
количество записей в нашей таблице, это бывает необходимым.
Пользователи и привилегии
Теперь про пользователей и права. До этого момента мы работали из под
root.
Создадим обычного пользователя (admin) и дадим ему некоторые права на
базу company и все таблицы в ней (company.*).
# mysql -u admin -p
Замечу, даже если отобрать все права у пользователя он все равно будет в
MySQL. Полностью удалить пользователя из базы можно так.
# mysql -p
mysql> DELETE FROM mysql.user WHERE USER=’admin@localhost’;
Query OK, 0 rows affected (0.00 sec)
# ls -lh /var/lib/mysql/company/
total 40K
-rw-rw---- 1 mysql mysql 65 Feb 21 12:05 db.opt
-rw-rw---- 1 mysql mysql 8.6K Feb 21 19:26 users.frm
-rw-rw---- 1 mysql mysql 168 Feb 21 20:40 users.MYD
-rw-rw---- 1 mysql mysql 2.0K Feb 21 20:40 users.MYI
Запросы
[mysqld]
default-character-set=cp1251
init-connect='SET NAMES cp1251'
Резервное копирование
Резервное копирование можно делать с помощью mysqldump. Скопируем
нашу базу company в файл company.sql
Удаляем базу
Создаем её заново
Закачиваем
mysql>USE company;
Саммари по myisamchk
Ключи -r или -o используются для восстановления таблиц. Рекомендуется
использовать ключ -r и если он не помог, использовать -o, который на
порядок медленнее работает.
Резюме
Мы познакомились с СУБД MySQL, поняли как все устроено и работает.
Изучили популярные SQL-запросы, которые наверно используются в
90% случаев если не больше. Это конечно только вершина айсберга, но
полученных знаний и навыком достаточно чтобы решать почти любые
задачи, которые могут встретиться у владельца сайта или системного
администратора. Для более сложных вещей существуют администраторы
БД и разработчики БД.
Домашнее задание
Пройтись по всем шагам описанным в данном модуле на практике и
убедиться что есть понимание того, что вы делаете.
далее набираем
# yum -y install nagios nagios-plugins-all
Файл /etc/httpd/conf.d/nagios.conf
p g
ScriptAlias /nagios/cgi-bin/ /usr/lib/nagios/cgi-bin/
<Directory /usr/lib/nagios/cgi-bin/>
Options ExecCGI
Order Allow,Deny
Allow From All
AuthType Basic
AuthUserFile /etc/nagios/passwd
AuthName «nagios»
Require valid-user
</Directory>
<Directory /usr/share/nagios/html/>
Options None
Order Allow,Deny
Allow From All
AuthType Basic
AuthUserFile /etc/nagios/passwd
AuthName «nagios»
Require valid-user
</Directory>
Конфигурационный
ф ур ц файл
ф /etc/nagios/cgi.cfg
g g g
# CGI.CFG - Sample CGI Configuration File for Nagios 2.12
main_config_file=/etc/nagios/nagios.cfg
# HTML PATH
# Здесь указываем где расположены html-файлы Nagios
physical_html_path=/usr/share/nagios/share
url_html_path=/nagios
# CONTEXT-SENSITIVE HELP
# Выводить ли контекстную подсказку или нет
show_context_help=0
#nagios_check_command=/usr/lib/nagios/plugins/check_nagios
#/var/log/nagios/status.dat 5 ‘/usr/sbin/nagios’
# AUTHENTICATION USAGE
# Использовать ли аутентификацию для доступа в интерфейс. Однозначно
#рекомендуется ее использовать!
use_authentication=1
# DEFAULT USER
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
#statusmap_background_image=smbackground.gd2
default_statusmap_layout=5
default_statuswrl_layout=4
# STATUSWRL INCLUDE
# Опция позволяет подключать собственные объекты в генерируемый VRML
#world. Предполагается что файл расположен в HTML PATH
#(/usr/share/nagios/html/).
#statuswrl_include=myworld.wrl
# PING SYNTAX
# С какими параметрами нужно пинговать удаленный хост из WAP
#интерфейса (используя statuswml cgi). В переменную $HOSTADDRESS$
#будет помещен адрес хоста.
ping_syntax=/bin/ping -n -U -c 5 $HOSTADDRESS$
# REFRESH RATE
# Интервал обновления страниц в секундах различных CGI-страниц (status,
#statusmap, extinfo, and outages)
refresh_rate=90
# SOUND OPTIONS
# Здесь можно задать звуковые файлы которые будут проигрываться если в
#сети что-то происходит. Компьютеры операторов Nagios должны быть
#оборудованы акустикой. Звуковые файлы я бы заменил, больно они
#неприятные на слух. Файлы расположены в /usr/share/nagios/html/media/
#host_unreachable_sound=hostdown.wav
#host_down_sound=hostdown.wav
#service_critical_sound=critical.wav
#service_warning_sound=warning.wav
#service_unknown_sound=warning.wav
#normal_sound=noproblem.wav
# Синтаксис:
#
# define command{
# template <templatename>
# name <objectname>
# command_name <commandname>
# command_line <commandline>
# }
#
# Где:
#
# <templatename> = Имя с описанием другой команды которая будет шаблоном
# для текущей (опционально)
# <objectname> = Объектное имя с описанием другой команды которая будет
#шаблоном для текущей (опционально)
# <commandname> = имя команды которое будет использоваться в Nagios
# <commandline> = путь к выполняемой команде и аргументы
define command{
command_name check_http
command_line $USER1$/check_http -H $HOSTADDRESS$
}
Конфигурационный
ф ур ц файл
ф /etc/nagios/localhost.cfg
g g
# LOCALHOST.CFG - SAMPLE OBJECT CONFIG FILE FOR MONITORING #THIS
MACHINE
#
# Для удобства администрирования файл разбит на несколько частей а именно:
# TIME PERIODS
# COMMANDS
# CONTACTS
# CONTACT GROUPS
# HOSTS
# HOST GROUPS
# SERVICES
#
#
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-24:00
tuesday 00:00-24:00
wednesday 00:00-24:00
thursday 00:00-24:00
friday 00:00-24:00
saturday 00:00-24:00
}
# CONTACTS
# В этой секции мы указываем свои контакты. Куда отсылать уведомления о
# проблемах с сервисами.
define contact{
contact_name nagios-admin
alias Nagios Admin
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r
host_notification_options d,r
service_notification_commands notify-by-email
host_notification_commands host-notify-by-email
email nagios-admin@fasttech.ru
}
# CONTACT GROUPS
# При отправке уведомления в контактную группу, все ее участники получат
# сообщение. Можно удобно распределять администраторов по проектам.
define contactgroup{
contactgroup_name admins
alias Nagios Administrators
members nagios-admin
}
# HOSTS
# Базовый хост шаблон. В конце его описания стоит register = 0, что означает
#не использовать его в Nagios
define host{
name generic-host ; название host шаблона
notifications_enabled 1 ; Включать уведомления ?
event_handler_enabled 1 ; Включать ли event_handler, который
; отлавливает происходящие события
define host{
name linux-server ; название шаблона
use generic-host ; шаблон наследует параметры generic-
; host который мы описали выше
define host{
use linux-server ; название шаблона в качестве базовых
; опций для хоста. Шаблон linux-server, в
; свою очередь унаследовал все опции
; generic-host
host_name localhost
alias localhost
address 127.0.0.1
}
# HOST GROUPS
# Группы хостов объединеных по каким либо признакам, например Linux-
#сервера, Windows-сервера, сервера по проектам
define hostgroup{
hostgroup_name test
alias Test Servers
members localhost
}
# SERVICES
define service{
name generic-service ; название шаблона
active_checks_enabled 1 ; включение активной проверки
passive_checks_enabled 1 ; включение пассивной проверки
parallelize_check 1 ; проверка сервисов в
; параллельном режиме
define service{
use local-service ; используемый шаблон
host_name localhost
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service ; используемый шаблон
host_name localhost ; какой хост проверяем
service_description Root Partition ; название сервиса в Nagios
check_command check_local_disk!20%!10%!/ ; команда
}
define service{
use local-service ; используемый шаблон
host_name localhost ; какой хост проверяем
service_description Current Users ; название сервиса в Nagios
check_command check_local_users!20!50 ; команда
}
define service{
use local-service ; используемый шаблон
host_name localhost ; какой хост проверяем
service_description Total Processes ; название сервиса в Nagios
check_command check_local_procs!250!400!RSZDT ; команда
}
Конфигурационный
ф ур ц файл
ф /etc/nagios/nagios.cfg
g g g
# LOG FILE
# Log-файл куда пишутся все события хостов и сервисов
# эта опция должна быть первой в конфигурационном файле!
log_file=/var/log/nagios/nagios.log
#cfg_file=/etc/nagios/contactgroups.cfg
#cfg_file=/etc/nagios/contacts.cfg
#cfg_file=/etc/nagios/dependencies.cfg
#cfg_file=/etc/nagios/escalations.cfg
#cfg_file=/etc/nagios/hostgroups.cfg
#cfg_file=/etc/nagios/hosts.cfg
#cfg_file=/etc/nagios/services.cfg
#cfg_file=/etc/nagios/timeperiods.cfg
#cfg_dir=/etc/nagios/servers
#cfg_dir=/etc/nagios/printers
#cfg_dir=/etc/nagios/switches
#cfg_dir=/etc/nagios/routers
object_cache_file=/var/log/nagios/objects.cache
# RESOURCE FILE
resource_file=/etc/nagios/private/resource.cfg
# STATUS FILE
# Файл в котором сохранен текущий статус всех сервисов и хостов, он
#очищается при перезагрузке Nagios
status_file=/var/log/nagios/status.dat
# NAGIOS USER
# От какого пользователя запускать процесс Nagios в операционной системе
nagios_user=nagios
# NAGIOS GROUP
# Рабочая группа Nagios
nagios_group=nagios
check_external_commands=0
#command_check_interval=15s
command_check_interval=-1
command_file=/var/spool/nagios/cmd/nagios.cmd
external_command_buffer_slots=4096
# COMMENT FILE
# Файл в котором сохраняются комментарии для хостов и сервисов
comment_file=/var/log/nagios/comments.dat
# DOWNTIME FILE
# Файл в котором сохраняется информация о downtime-времени хостов и
#сервисов, То есть времени когда они не доступны
downtime_file=/var/log/nagios/downtime.dat
# LOCK FILE
# В этом файле хранится PID процесса Nagios. Используется сторонними
#программами
lock_file=/var/run/nagios.pid
# TEMP FILE
# Временный файл используется при обновление статус-лога, очистки
#комментариев и т.д.
temp_file=/var/log/nagios/nagios.tmp
event_broker_options=-1
#broker_module=/somewhere/module1.o
#broker_module=/somewhere/module2.o arg1 arg2=3 debug=0
log_rotation_method=d
log_archive_path=/var/log/nagios/archives
# LOGGING OPTIONS
# Используем системную службу Syslog чтобы записывать логи
use_syslog=1
log_notifications=1
log_service_retries=1
log_host_retries=1
log_event_handlers=1
log_initial_states=0
log_external_commands=1
log_passive_checks=1
#global_host_event_handler=somecommand
#global_service_event_handler=somecommand
service_inter_check_delay_method=s
max_service_check_spread=30
service_interleave_factor=s
host_inter_check_delay_method=s
max_host_check_spread=30
max_concurrent_checks=0
service_reaper_frequency=10
check_result_buffer_slots=4096
# AUTO-RESCHEDULING OPTION
# Опция может помочь сбалансировать нагрузку на сервер мониторинга
# автоматически переназначив проверку хостов и сервисов, распределяя
# нагрузку во времени. Опция эксперементальная и ее использование на свой
# страх и риск.
auto_reschedule_checks=0
# AUTO-RESCHEDULING INTERVAL
auto_rescheduling_interval=30
# AUTO-RESCHEDULING WINDOW
# Размер «окна» в секундах. Проверки хостов и сервисов назначенные в
# следующие X секунд (размер окна) будут переназначены.
auto_rescheduling_window=180
# SLEEP TIME
# Время «сна» между которыми проверяются системные события и проверки
# сервисов которые должны быть выполнены
sleep_time=0.25
# TIMEOUT VALUES
# Как много времени давать на выполнение команде, после истечения которого
# она будет принудительно завершена. Значение указывается в секундах.
service_check_timeout=60
host_check_timeout=30
event_handler_timeout=30
notification_timeout=30
ocsp_timeout=5
perfdata_timeout=5
retain_state_information=1
state_retention_file=/var/log/nagios/retention.dat
retention_update_interval=60
use_retained_program_state=1
use_retained_scheduling_info=0
# INTERVAL LENGTH
# Интервал проверки
interval_length=60
use_aggressive_host_checking=0
execute_service_checks=1
accept_passive_service_checks=1
execute_host_checks=1
accept_passive_host_checks=1
enable_notifications=1
enable_event_handlers=1
process_performance_data=0
#host_perfdata_command=process-host-perfdata
#service_perfdata_command=process-service-perfdata
#host_perfdata_file=/tmp/host-perfdata
#service_perfdata_file=/tmp/service-perfdata
#host_perfdata_file_template=[HOSTPERFDATA]\t$TIMET$\t$HOSTNAME$\t
#service_perfdata_file_template=[SERVICEPERFDATA]\t$TIMET$\t
#$HOSTNAME$\t$SERVICEDESC$\t$SERVICEEXECUTIONTIME$\t
#$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$
#host_perfdata_file_mode=a
#service_perfdata_file_mode=a
#host_perfdata_file_processing_interval=0
#service_perfdata_file_processing_interval=0
#host_perfdata_file_processing_command=process-host-perfdata-file
#service_perfdata_file_processing_command=process-service-perfdata-file
obsess_over_services=0
#ocsp_command=somecommand
check_for_orphaned_services=1
check_service_freshness=1
service_freshness_check_interval=60
check_host_freshness=0
host_freshness_check_interval=60
aggregate_status_updates=1
status_update_interval=15
enable_flap_detection=0
date_format=euro
p1_file=/usr/sbin/p1.pl
illegal_object_name_chars=`~!$%^&*|’”<>?,()=
illegal_macro_output_chars=`~$&|’”<>
use_regexp_matching=0
use_true_regexp_matching=0
admin_email=nagios
admin_pager=pagenagios
daemon_dumps_core=0
Конфигурационный
ф ур ц файл
ф /etc/nagios/private/resource.cfg
g p g
# RESOURCE.CFG - Sample Resource File for Nagios 2.12
# Этот файл содержит различные макросы, CGI-программы будут обращаться
# именно к ним а не к этому файлу напрямую. Поэтому здесь можно
# использовать все возвожные пароли и логины и не бояться утечки информации.
# Макрос $USER1$ будет содержать путь к плагинам
$USER1$=/usr/lib/nagios/plugins
#$USER2$=/usr/lib/nagios/plugins/eventhandlers
define host{
use linux-server
host_name mylinuxbox
alias mylinuxbox
address 192.168.146.135
}
define service{
use local-service
host_name mylinuxbox
service_description PING
check_command check_ping!100.0,10%!200.0,60%
}
define service{
use local-service
host_name mylinuxbox
service_description SMTP
check_command check_smtp
}
define service{
use local-service
host_name mylinuxbox
service_description Apache
check_command check_http
}
# /usr/lib/nagios/plugins/check_http -h
define command{
command_name check_dhcp
command_line $USER1$/check_dhcp -s $HOSTADDRESS$
}
Перезагружаем Nagios
# service nagios restart
Мониторинг
р свободного места
Выведем список 5 пользователей занимающих наибольшее количество
дискового пространства в своем домашнем каталоге.
# du -cms /home/* | sort -rn | head -6
Защита
щ системы от пользовательских процессов
р ц
Пользовательские процессы без проблеммогутзанятьвседисковоепространство
и тем самым положить сервер. Чтобы этого избежать воспользуемся командой
ulimit и ограничим возможный размер файла до 10Мб.
# ulimit -f 10000
# yes 'some shit' > shit.txt
File size limit exceeded
# ls -l
total 10016
-rw-r--r-- 1 root root 10240000 Mar 14 21:36 shit.txt
Точно также можно задавать другие опции ограничения, такие как максимальное
количество файлов, максимальное количество открытых дескрипторов,
процессорное время, объем виртуальной памяти доступный в shell и т.д.
Мониторинг
р S.M.A.R.T. - параметров
р р жесткого диска
# smartctl -a /dev/sda
Напомню, S.M.A.R.T. - это Self-Monitoring, Analysis and Reporting Technology.
Технология самоконтроля и анализа, которой снабжены все современные
диски. Она позволяет отслеживать основные параметры жестких дисков и
прогнозировать потенциальный отказ.
Мониторинг
р сетевых портов
р в Linux
Просмотреть конкретный сетевой порт можно вот так
# netstat -nlp | grep :8080
tcp 0 0 :::8080 :::* LISTEN 2697/httpd
Мониторинг
р открытых
р ф
файлов и сокетов
Для этих целей хорошо подойдет lsof.
Вывод всех открытых файлов
# lsof
Мониторинг
р запущенных
ущ процессов
р ц
Все процессы
# ps -eF
Вывести дерево процессов
# ps -ejH
Мониторинг
р системных рресурсов
ур
# top
или, если хочется чтобы все было красиво (не забудьте подключить
репозиторий EPEL)
# yum -y install htop
# htop
Мониторинг
р свободного места в рразделах
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
23G 2.4G 20G 11% /
Мониторинг
р сетевой подсистемы в реальном
р времени
р
В этом нам отлично поможет пакет ntop.
Убедитесь что репозиторий EPEL подключен. Далее набираем команду:
# yum -y install ntop
Мониторинг
р рработы DNS-сервера
р р в реальном
р времени
р
Ставим пакет dnstop на том же сервере где и dns-сервер.
# wget http://dag.wieers.com/rpm/packages/dnstop/dnstop-0.0.20070510-1.
el5.rf.i386.rpm
# rpm -Uvh dnstop-0.0.20070510-1.el5.rf.i386.rpm
Мониторинг
р соединений proftpd
p p в рреальном времени
р
# ftptop
Статистика по виртуальной
р у памяти
# vmstat
Статистика по процессору
р ц ру и устройствам
у р ввода-вывода
Ставим пакет sysstat (содержит в себе программы sa, mpstat, iostat, sar)
# yum -y install sysstat
Информация по вводу-выводу
# iostat
Информация по процессору
# mpstat
Резюме
Мы разобрали систему мониторинга Nagios, это одна из самых
популярных систем для мониторинга большего количества серверов.
Также познакомились с различными инструментами, которые помогут в
администрирование вашего сервера.
Домашнее задание
Настройте систему мониторинга Nagios и поставьте на мониторинг пару
серверов.
Установка
Пакет bind-chroot содержит необходимую структуру каталогов для chroot-
окружения, пакет caching-nameserver содержит все необходимые файлы. Все
остальное, что понадобится в работе будет установлено как зависимости.
Инструменты
Для отладки своих DNS-серверов будут очень полезны следующие утилиты.
# nslookup www.ru
Server: 192.168.146.2
Address: 192.168.146.2#53
Non-authoritative answer:
Name: www.ru
Address: 194.87.0.50
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 518400 IN NS K.ROOT-SERVERS.NET.
. 518400 IN NS B.ROOT-SERVERS.NET.
. 518400 IN NS D.ROOT-SERVERS.NET.
. 518400 IN NS A.ROOT-SERVERS.NET.
. 518400 IN NS M.ROOT-SERVERS.NET.
. 518400 IN NS G.ROOT-SERVERS.NET.
. 518400 IN NS C.ROOT-SERVERS.NET.
. 518400 IN NS E.ROOT-SERVERS.NET.
. 518400 IN NS J.ROOT-SERVERS.NET.
. 518400 IN NS L.ROOT-SERVERS.NET.
. 518400 IN NS I.ROOT-SERVERS.NET.
. 518400 IN NS F.ROOT-SERVERS.NET.
. 518400 IN NS H.ROOT-SERVERS.NET.
;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET. 3600000 IN A 198.41.0.4
A.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:503:ba3e::2:30
B.ROOT-SERVERS.NET. 3600000 IN A 192.228.79.201
C.ROOT-SERVERS.NET. 3600000 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 3600000 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 3600000 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 3600000 IN A 192.5.5.241
F.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:2f::f
G.ROOT-SERVERS.NET. 3600000 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 3600000 IN A 128.63.2.53
H.ROOT-SERVERS.NET. 3600000 IN AAAA 2001:500:1::803f:235
Stealth DNS-сервер
р р (невидимый DNS-сервер) – такой DNS-сервер не
упоминается в описание зоны. Информацию о нем нельзя получить прямыми
запросами или копированием описания зоны. Данный тип сервера может
быть полезен для внесения изменений в зону находясь за файрволом. В
этом случае primary master можно сделать невидимым, а все остальные, в
том числе и заявленные при регистрации домена, slave-серверами зоны.
Это позволяет нейтрализовать атаки на зону, т.к. обновление всегда будет
производиться с “невидимого” primary master.
Non-authoritative answer:
ya.ru
origin = ns1.yandex.ru
mail addr = sysadmin.yandex.ru
serial = 2009040300
refresh = 10800
retry = 900
expire = 2592000
minimum = 900
logging
{
...
};
acl
{
...
zone
{
...
};
Настройка
Итак, у нас есть следующее:
Сервер с IP 192.168.146.2 – шлюз во внешние сети и DNS-сервер для двух
наших сетей (192.168.146.0/24, 192.168.147.0/24);
Сервер с IP 192.168.146.132 – новый сервер со свежей Linux CentOS 5.2
который мы сделаем как master dns сервер, также этот сервер будет
перенаправлять все запросы на которые не сможет сам ответить на DNS-
сервер провайдера (192.168.146.2);
Сервер с IP 192.168.147.132 – новый сервер со свежей Linux CentOS 5.2
который мы сделаем как slave dns сервер для 192.168.146.132.
Настраивать named рекомендуется в chroot-окружение, это когда для
сервиса создана своя рабочая среда в рамках которой он работает. Он
нечего не знает о внешней системе и не может туда выбраться, и в случае
проблем с безопасностью это никак не повлияет на систему в целом. Для
этих целей мы и поставили пакет bind-chroot.
По умолчанию, если не найден файл /var/named/chroot/etc/named.conf то
будет использоваться /var/named/chroot/etc/named.caching-nameserver.conf
Я предпочел скопировать шаблон файла named.conf и на его основе сделать
свой файл.
# cp /usr/share/doc/bind-9.3.4/sample/etc/named.conf /var/named/chroot/etc/
Ключевые файлы и каталоги пакета BIND в таблице ниже.
/var/named/chroot/ Структура файловой системы и файлы которые
будут использоваться в работе chrooted-bind, все
что нужно редактируйте здесь;
/usr/sbin/named Исполняемый файл DNS-сервера;
/var/named/chroot/etc/named.conf В нормальных условиях конфигурационный файл
named.conf расположен в /etc/ но мы настраиваем
DNS-сервер в chroot-окружение и поэтому он будет
расположен здесь, чтобы named смог его найти;
Файл /var/named/chroot/etc/named.conf
options
{
directory «/var/named»;
dump-file «data/cache_dump.db»;
statistics-file «data/named_stats.txt»;
memstatistics-file «data/named_mem_stats.txt»;
version «Made in USSR»;
listen-on {localhost; 192.168.146.132; };
allow-transfer{192.168.147.132; };
allow-query{trusted-networks; };
allow-recursion {trusted-networks; };
forwarders {192.168.146.2; };
};
logging
{
channel default_ch {
file «data/named-base.log»;
severity info;
print-time yes;
print-category yes;
};
channel security_ch {
file «data/named-security.log»;
severity info;
print-time yes;
print-category yes;
};
};
zone «example545.com» IN {
type master;
file «example545.com»;
};
zone «168.192.in-addr.arpa» {
type master;
file «168.192.rev»;
};
include «/etc/named.rfc1912.zones»;
IN NS ns1.example545.com.
IN NS ns2.example545.com.
IN MX 10 mail.example545.com.
@ IN A 192.168.146.132
ns1 IN A 192.168.146.132
ns2 IN A 192.168.147.132
mail IN A 192.168.146.132
www IN A 192.168.146.132
IN NS ns1.example545.com.
IN NS ns2.example545.com.
132.146 IN PTR example545.com.
Если мы не хотим чтобы к имени что либо добавлялось, нужно явно показать
что это имя является FQDN, То есть полностью описанным. Для этого после
имени нужно поставить точку. Давайте в нашем файле зоны example545.com
уберем точку в строке
“IN MX 10 mail.example545.com.”, перезагрузим конфигурационный
файл командой rndc reload и сделаем запрос к DNS-серверу:
# dig example545.com @ns1.example545.com any
;; ANSWER SECTION:
...
example545.com. 43200 IN MX 10 mail.example545.com.example545.com.
...
Slave-сервер
Slave-сервер настраивается точно также как и master за исключением пары
опций в секции zone. Ниже я приведу мою конфигурацию и пояснения.
Добавляем в автозагрузку
# chkconfig named on
/var/named/chroot/etc/named.conf
options
{
directory «/var/named»;
dump-file «data/cache_dump.db»;
statistics-file «data/named_stats.txt»;
logging
{
channel default_ch {
file «data/named-base.log»;
severity info;
print-time yes;
print-category yes;
};
channel security_ch {
file «data/named-security.log»;
severity info;
print-time yes;
print-category yes;
};
};
zone «example545.com» IN {
type slave;
file «slaves/example545.com»;
masters {192.168.146.132; };
};
include «/etc/named.rfc1912.zones»;
Как видите все почти тоже самое. Трансфер зоны мы делать не будем,
потому что в нашей сети больше нет серверов кому ее можно передать, а
master-серверу ее передавать бессмысленно, он является primary master-
ом для зоны. Все запросы на которые не сможем ответить сами, мы
переадресуем master-серверу (он если не сможет ответить то переадресует
Неавторитативный ответ
Наш DNS-сервер не поддерживает зону ya.ru поэтому не может дать
авторитативный ответ. Он всего лишь сообщает клиенту то, что узнал
от других DNS-серверов. Такой ответ будет неавторитативным и будет
содержать строку Non-authoritative answer в своем ответе. А узнавать наш
DNS-сервер будет у тех кто перечислен в опции forwarders, То есть кому
перенаправлять запросы с которыми мы сами не справились.
# nslookup ya.ru
Server: 192.168.146.132
Address: 192.168.146.132#53
Non-authoritative answer:
Name: ya.ru
Address: 213.180.204.8
Авторитативный ответ
В этом примере ответ будет авторитативный - мы обращаемся с запросом к
нашему DNS-серверу который обслуживает эту зону.
# nslookup example545.com
Server: 192.168.146.132
Записи в /etc/resolv.conf
Файл /etc/resolv.conf служит не только для указания NS-серверов. Есть еще
пара интересных опций на мой взгляд.
domain – указав домен мы будем производить поиск хостов в этом домене
по коротким именам, это удобно. Например “domain example545.com”.
Выполнив команду “nslookup server10” мы произведем поиска хоста server10
в домене example545.com, То есть если существует хост server10.example545.
com то мы получим положительный ответ.
search – более функциональный механизм, он позволяет задать список
доменов в котором мы будем искать свой хост по короткому имени и
порядок поиска. Например:
search office.example545.com outsorcers.example545.com
Сначала ищем в office.example545.com и если не находим то переключаемся
на поиск в outsorcers.example545.com. Поиск происходит до первого
совпадения, если нечего не найдено то возвращается сообщение об
ошибке.
Статистика работы
Статистику работы можно посмотреть вот так:
# rndc status
number of zones: 7
debug level: 0
xfers running: 0
xfers deferred: 0
soa queries in progress: 0
query logging is OFF
recursive clients: 0/1000
tcp clients: 0/100
server is up and running
Еще один инструмент мониторинга DNS – программа dnstop. Я о ней подробнее на-
писал в модуле “Резервное копирование”. Поставить ее можно из репозитария EPEL.
Резюме
В этом модуле мы выяснили как работает DNS-сервер и как он взаимодействует
с другими серверами. Разобрались с записями в файле зоны и опциями в
конфигурационном файле named.conf. Это далеко не все опции которые
бывают, но в случае необходимости без проблем сможете “докрутить” DNS-
сервер под свои нужды, так как знаете о нем достаточно чтобы эффективно
администрировать его. По опыту скажу, что что-то большее может
потребоваться только в крупных сетях с нагруженными серверами, и даже в
этом случае чего-то сверх-ординарного от вас не потребуется.
Домашнее задание
Сделайте 4 виртуальные машины. На двух делаем DNS-сервера – master и
slave, на двух других достаточно будет просто Linux, они будут клиентам.
Пусть первый клиент выполняет запросы через master, второй через slave.
Slave работает через master, master смотрим в Интернет через вашего
провайдера. Заведите зону (а лучше несколько) на master-сервере и
убедитесь что она передана на slave. Ваши сервера могут быть из одной
сети - правило разных сетей класса C действует в публичных сетях, в своей
песочнице делайте как хотите.
Преимущества Nginx
Модульная архитектура Apache предоставляет большие возможности,
однако они редко когда полностью востребованы. Ценой за большую
функциональность является большой расход системных ресурсов. В массе
своей сайты содержат больше статических объектов (HTML, изображения,
файлы стилей) для обработки которых не нужен большой функционал.
Запросы являются простыми и следовательно обрабатывать такие запросы
нужно простым и легковесным веб-сервером, таким как Nginx. К примеру, 10
000 неактивных keep-alive соединений занимают примерно 2.5 Мб памяти.
standalone
Самая легкая в настройке конфигурация. Nginx и Apache работают на разных
портах или ip-адресах. Например, адрес всех картинок images.server.ru, этот
сервер в свою очередь является Nginx-серверов. Следовательно запросы
картинок и прочего статического контента направляются на Nginx-сервер.
Если запросов статического контента очень много, то имеет смысл купить
отдельный сервер под его обслуживание и поставить на него Nginx.
Frontend к Apache
p
Так называемое “акселерированное проксирование ” при котором
все запросы сначала направляются на Nginx. Если происходит запрос
Nginx
g + FastCGI
Если скрипты сайта написаны на языке программирования интерпретатор
которого понимает технологию FastCGI то Apache нам вообще не нужен.
Примерами таких языков являются Perl, PHP и многие другие. Минус этого
способа – возможно потребуется модификация скриптов.
Установка EPEL
В базовых репозиториях CentOS 5.2 Nginx отсутствует. Для того чтобы его
поставить из пакета нам нужно подключить репозиторий EPEL.
EPEL - Extra Packages for Enterprise Linux, репозиторий поддерживаемый
добровольцами и содержащий в себе популярные и нужные пакеты. На
момент написания этих строк репозиторий содержал в себе примерно 2800
пакетов.
То есть по сути просто файл .repo который содержит в себе ссылку на новый
репозиторий.
Ставим EPEL-пакет
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-
5-3.noarch.rpm
Устанавливаем Nginx
# yum -y install nginx
#!/bin/bash
# chkconfig: - 80 20
# description: Starts and stops FastCGI server for Nginx
SPAWN=»/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi»
RETVAL=0
case «$1» in
start)
events {
worker_connections 1024;
# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
include /etc/nginx/conf.d/*.conf;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
ssi on;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location /status {
stub_status on;
access_log off;
allow 192.168.146.1;
deny all;
}
location /old_dir/ {
rewrite ^/old_dir/(.*)$ /new_dir/$1 permanent;
}
location ~ /\.ht {
deny all;
}
}
location / {
root /home/company2.ru;
index index.html index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/company2.ru$fastcgi_script_name;
include fastcgi_params;
}
}
}
Устанавливаем Apache
# yum -y install httpd httpd-devel
Устанавливаваем Nginx
# yum -y install nginx
Конфигурирование Nginx
user nginx;
worker_processes 1;
events {
worker_connections 1024;
# use [ kqueue | rtsig | epoll | /dev/poll | select | poll ];
use epoll;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
gzip on;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain;
output_buffers 1 32k;
postpone_output 1460;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
include /etc/nginx/conf.d/*.conf;
server {
listen 80;
server_name company.ru www.company.ru;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 75;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
location ~* ^.+\.(jpg|gif|avi|mp3|zip|js)$ {
root /var/www/html/media;
Установка mod_rpaf
Запросы к Apache приходят с IP-адреса frontend-сервера, что в свою очередь
не позволяет собирать статистику и вести log-файлы по посетителям. Тут
нам на помощь приходит модуль mod_rpaf, который служит для замены
IP-адреса Frontend-сервера на адрес посетителя и мы просто не замечаем
Nginx на свое пути.
Пересобираем пакет
# rpmbuild --rebuild mod_rpaf-0.6-el5.rhc.1.src.rpm
В /etc/httpd/conf/httpd.conf добавляем:
RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1 192.168.146.132
RPAFheader X-Real-IP
Включение SSL
Сейчас я покажу как подключить SSL к Nginx и настроить работу с PHP-
скриптами (тоже самое что и не у SSL-режима).
Генерируем ключ и сертификат (если нет openssl то ставим – yum -y install
openssl)
# openssl genrsa -des3 -out server.key.crypt 1024
# openssl rsa -in server.key.crypt -out server.key
# openssl req -new -x509 -nodes -sha1 -days 365 -key server.key -out server.crt
# rm -f server.key.crypt
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 10m;
location / {
root /usr/share/nginx/html;
index index.php index.html;
}
location ~ \.php$ {
if (!-f $request_filename) {
return 404;
}
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# service nginx restart
Средняя
р нагрузка
ру
Использование процессора
р ц р
Резюме
Мы выяснили что такое Nginx и зачем он нужен, разобрали способы его
применения и самое главное все сами сделали на практике. Nginx может
работать сам по себе, но основное предназначение – снижать нагрузку на
Apache обрабатывая статику.
Домашнее задание
Воспользовавшись полученными знаниями настройте Nginx в двух режимах
работы. Nginx+FastCGI и Frontend/Backend.
Установка и настройка
# yum -y remove sendmail
Postfix
Для построение почтового сервера нужно установить и настроить набор
программного обеспечения.
1. Postfix – MTA который отвечает за пересылку почты на другие почтовые
сервера;
2. MySQL, именно в базе данных мы будем хранить почтовые аккаунты;
3. Dovecot, предоставляет сервисы POP3/IMAP для пользователей сервера;
4. Clamd (ClamAV Daemon), отвечает за проверку почту на наличие
вирусов;
5. ClamSMTP, связывает работу Postfix и ClamAV между собой;
6. Spamassassin, отвечает за проверку почты на наличие SPAM-сообщений;
7. Postfixadmin – веб-интерфейс для управления Postfix;
8. Squirrelmail – веб-интерфейс для пользователей почтового сервера.
sendmail_path = /usr/sbin/sendmail.postfix
newaliases_path = /usr/bin/newaliases.postfix
mailq_path = /usr/bin/mailq.postfix
setgid_group = postdrop
html_directory = no
manpage_directory = /usr/share/man
sample_directory = /usr/share/doc/postfix-2.3.3/samples
readme_directory = /usr/share/doc/postfix-2.3.3/README_FILES
config_directory = /etc/postfix
virtual_mailbox_domains = mysql:$config_directory/sql/vdomains.cf
virtual_mailbox_base = /var/vmail
virtual_mailbox_maps = mysql:$config_directory/sql/vmailbox.cf
virtual_alias_maps = mysql:$config_directory/sql/valias.cf
virtual_minimum_uid = 1000
virtual_uid_maps = static:1000
virtual_gid_maps = static:12
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
smtpd_sasl_auth_enable = yes
smtpd_sasl_exceptions_networks = $mynetworks
smtpd_recipient_restrictions = permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
reject_non_fqdn_recipient,
reject_unverified_recipient,
reject_rbl_client cbl.abuseat.org,
reject_rbl_client dialups.mail-abuse.org,
content_filter = scan:127.0.0.1:10025
receive_override_options = no_address_mappings
Конфигурационный
ф ур ц файл
ф /etc/postfi
p x/master.cf
# mkdir /etc/postfix/sql
Конфигурационный
ф ур ц файл
ф /etc/postfi
p x/sql/valias.cf
q
user = postfix
password = password
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
additional_conditions = and active = '1'
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'
Конфигурационный
ф ур ц файл
ф /etc/postfi
p x/sql/vdomains.cf
q
user = postfix
password = password
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
query = SELECT domain FROM domain WHERE domain='%s' AND backupmx='0'
AND active='1'
MySQL
MySQL – популярная система управления базами данных. В базе мы будет
хранить почтовые аккаунты, то есть пользователи будут виртуальными и нет
необходимости заводить их в системе.
# service mysqld start
Dovecot
Dovecot – популярный POP3/IMAP-сервер, стабильный и несложный в
настройке.
# yum -y install dovecot
# chkconfig dovecot on
Конфигурационный
ф ур ц файл
ф /etc/dovecot.conf
base_dir = /var/run/dovecot/
protocol imap {
listen = *:143
}
protocol pop3 {
listen = *:110
}
syslog_facility = mail
mail_location = maildir:/var/vmail/%d/%u
first_valid_uid = 1000
last_valid_uid = 1000
maildir_copy_with_hardlinks = yes
protocol imap {
login_executable = /usr/libexec/dovecot/imap-login
mail_executable = /usr/libexec/dovecot/imap
imap_max_line_length = 65536
}
protocol pop3 {
login_executable = /usr/libexec/dovecot/pop3-login
mail_executable = /usr/libexec/dovecot/pop3
pop3_uidl_format = %08Xu%08Xv
}
protocol lda {
postmaster_address = postmaster@company.ru
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
}
auth_verbose = yes
auth_debug = yes
auth_debug_passwords = yes
auth default {
base_dir = /var/run/dovecot/
mechanisms = plain
passdb pam {
}
userdb passwd {
}
userdb sql {
args = /etc/dovecot-sql.conf
}
user = nobody
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0660
user = vmail
group = mail
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
dict {
}
plugin {
}
Конфигурационный
ф ур ц файл
ф /etc/dovecot-sql.conf
q
driver = mysql
connect = host=localhost dbname=postfix user=postfix password=password
default_pass_scheme = MD5
Clamd
Clamd - Clam AntiVirus Daemon. Сервис ожидает входящие подключения
на UNIX/TCP-сокете и проверяет файлы и каталоги по запросу (например
clamdscan /var).
# yum -y install clamd
# chkconfig clamd on
Конфигурационный
ф ур ц файл
ф /etc/clamd.conf
LogFile /var/log/clamav/clamd.log
LogFileMaxSize 0
LogTime yes
LogSyslog yes
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /var/tmp
DatabaseDirectory /var/clamav
LocalSocket /var/run/clamav/clamd.sock
FixStaleSocket yes
TCPSocket 3310
TCPAddr 127.0.0.1
MaxConnectionQueueLength 30
MaxThreads 50
ReadTimeout 300
User clamav
AllowSupplementaryGroups yes
ScanPE yes
ScanELF yes
DetectBrokenExecutables yes
ScanOLE2 yes
ScanMail yes
ScanHTML yes
ScanArchive yes
ArchiveBlockEncrypted no
ClamSMTP
ClamSMTP – это SMTP-фильтр, который позволяет взаимодействовать Postfix
и ClamAV.
# rpm -Uvh http://www.inet.lt/clamsmtp/clamsmtp-1.10-1.src.rpm
# cd /usr/src/redhat/SPECS
# yum -y install automake autoconf
# rpmbuild -ba clamsmtp.spec
# rpm -Uvh /usr/src/redhat/RPMS/i386/clamsmtp-1.10-1.i386.rpm
# chkconfig clamsmtpd on
Конфигурационный
ф ур ц файл
ф /etc/clamsmtpd.conf
p
OutAddress: 10026
TimeOut: 180
KeepAlives: 0
XClient: on
Listen: 127.0.0.1:10025
ClamAddress: /var/run/clamav/clamd.sock
Header: X-Virus-Scanned: ClamAV using ClamSMTP
TempDirectory: /tmp
Action: drop
Quarantine: on
User: clamav
Spamassassin
Spamassassin – самый популярный антиспам фильтр.
Настройка Spamassassin может занять у вас определенное время, прежде
чем он научится эффективно справляться со спамом.
Работа Spamassassin основана на ряде тестов через которые прогоняется
каждое входящее письмо. Каждый тест имеет свой вес – некое целое или
десятичное число, которое добавляется в общую “копилку”. Число может быть
как положительным так и отрицательным. Если к концу всех тестов письмо
exit $?
Конфигурационный
ф ур ц файл
ф /etc/mail/spamassassin/local.cf
p
required_hits 5
rewrite_header Subject ****SPAM****
report_safe 0
use_bayes 1
bayes_path /etc/mail/spamassassin/bayes
bayes_file_mode 0666
bayes_learn_to_journal 1
ok_locales en ru
whitelist_from root@localhost
blacklist_from *@outblaze.com
auto_whitelist_path /etc/mail/spamassassin/auto-whitelist
auto_whitelist_file_mode 0666
trusted_networks 192.168.146.0/24
# chkconfig spamassassin on
Письма бывают двух видов, ham – чистые письма и spam – незатребованная
реклама, вирусы в аттаче и т.д. Свою антиспам систему мы можем
самостоятельно обучать какие письма хорошие а какие нет. Через какое-
то время после того, как spamassassin получить достаточно информации о
типичном содержимом входящих писем, он начнет использовать полученные
знания на практике, используя их при анализе всей входящей почты. По
умолчанию требуется 200 ham-писем и 200 spam. Самостоятельно обучение
происходит командой sa-learn. Если сообщение будет по ошибке распознано
как спам мы просто запускаем команду sa-learn --ham с указанием этого
письма, и наш spamassassin учтет полученный опыт в будущем.
Хорошее
р письмо
# sa-learn --mbox --ham <письмо>
Spam-письмо
p
# sa-learn --mbox --spam <письмо>
Postfixadmin
Postfixadmin – веб-интерфейс для управления Postfix. Здесь можно завести
почтовые домены и ящики, настроить псевдонимы. Поведение самого
почтового сервера задается руками в файлах main.cf и master.cf.
Пользователь MySQL, его пароль и название БД. Все это мы задали в разделе
MySQL.
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Postfix
Конфигурационный файл /etc/postfix/main.cf
Это главный конфигурационный файл Postfix. Практически все настраивается
здесь.
soft bounce Сообщение которое не смогло быть доставлено
сразу попадает в очередь, и через какое-то время
попытка повторяется. Если опция отключена то
отправитель сразу уведомляется что доставка
невозможна и сообщение отбрасывается;
queue_directory Директория для очереди сообщений;
command_directory Расположение административных команд;
daemon_directory Директория с дополнительными программами;
mail_owner Кому принадлежит почтовая очередь и от
какого пользователя выполняется большинство
процессов;
default_privs Права этого пользователя будут использоваться в
процессе локальной доставки сообщений внешним
командам или файлам;
myhostname Имя системы, по умолчанию используется FQDN имя
получаемое с помощью gethostname();
mydomain Доменное имя этой системы;
myorigin Значение используется в адресе отправителя почты,
если myorigin=company.ru то вся почта будет из @
company.ru
inet_interfaces На каких сетевых интерфейсах принимать почту;
mydestination Для каких доменов мы будем принимать почту;
u n k n o w n _ l o c a l _ Код ответа в случае некорректного получателя
recipient_reject_code сообщения;
local_recipient_maps Список всех локальных получателей почты;
mynetworks Список доверенных сетей, клиенты из доверенных
сетей могут перенаправлять почту через почтовый
сервер;
relay_domains Для каких доменов мы будем релеем;
alias_maps База псевдонимов используемых для локальной
alias_database доставки;
mail_spool_directory Директория где храняться почтовые ящики;
smtpd_banner Приглашение почтового сервера, код 220;
Подключаем Spamassassin.
spamfilter unix - n n - - pipe
flags=Rq user=spamfilter argv=/usr/local/bin/spamfilter -f ${sender} -- ${recipient}
Dovecot
Конфигурационный файл /etc/dovecot.conf
Это основной конфигурационный файл Dovecot.
base_dir Рабочая директория;
protocols Обслуживаемые протоколы;
listen Какие IP-адреса и порты слушать на входящие
соединения;
log_timestamp Формат записи логов;
syslog_facility Указываем если используем Syslog для журналирования
работы сервиса;
mail_location Расположение почтовых ящиков пользователей;
mail_debug Режим отладки;
Clamd
Конфигурационный файл /etc/clamd.conf
LogFile Журналирование работы сервиса в
указанный файл;
LogFileMaxSize Максимальный размер log-файла, 0 означает
неограниченный;
LogTime Указывать время для каждого сообщения;
Clamsmtpp
Конфигурационный файл /etc/clamsmtpd.conf
OutAddress Порт через который возвращается письмо, после того как
оно будет проверено на вирусы;
Spamassassin
p
Конфигурационный файл /etc/mail/spamassassin/local.cf
Резюме
Мы сделали полнофункциональный почтовый сервер. Построение почтовых
систем по праву считается одним из самых сложных моментов в системном
администрирование, но любой процесс можно разбить на ряд четких шагов,
выполняя которые вы неизбежно будете получать нужный результат.
Домашнее задание
Сделать почтовый сервер по данному руководству и проверить
работоспособность.
Устанавливаем OpenVPN
# yum -y install openvpn
# chkconfig openvpn on
# cp -R /usr/share/openvpn/easy-rsa/2.0/ /etc/openvpn/
Инициализируем переменные
# source ./vars
и меняем ее на:
net.ipv4.ip_forward = 1
Linux VPN-клиент
Подключаем репозиторий EPEL откуда мы поставим OpenVPN.
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-
5-3.noarch.rpm
Устанавливаем OpenVPN
# yum -y install openvpn
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
log-append /var/log/openvpn.log
comp-lzo
verb 3
Пингуем других VPN-клиентов если они у вас уже есть (у меня есть):
# ping 10.10.10.10
PING 10.10.10.10 (10.10.10.10) 56(84) bytes of data.
64 bytes from 10.10.10.10: icmp_seq=1 ttl=64 time=0.680 ms
64 bytes from 10.10.10.10: icmp_seq=2 ttl=64 time=0.994 ms
10.10.10.1 – VPN-сервер
192.168.146.2 – мой шлюз во внешние сети
www.ru – пункт назначения для наших пакетов.
ca c:\\vpn\\ca.crt
cert c:\\vpn\\client2.crt
key c:\\vpn\\client2.key
comp-lzo
verb 3
Пуск -> Выполнить -> пишем команду ”cmd” нажимаем Enter ->
ipconfig /all – посмотреть сетевые интерфейсы
route print – посмотреть таблицу маршрутизации
Попингуйте VPN-сервер и сделайте трасировку (tracert) до www.ru
Резюме
Мы установили и настроили VPN-сервер и несколько VPN-клиентов. Клиент мо-
жет использовать ОС Linux или Windows, мы знаем как производить настройку
на обеих ОС. Весь трафик клиентов проходит через VPN-сервер, благодаря за-
данию опции redirect-gateway и назначению маршрута по умолчанию.
Домашнее задание
Развернуть три виртуальные машины – VPN-сервер и два клиента, Linux-
клиент и Windows-клиент. Произвести настройку виртуальных машин в
соответствие с руководством в этом модуле. Убедиться, что все работает.
DRBD
DRBD (Distributed Replicated Block Device) – распределенное и
синхронизированное блочное устройство, это программное обеспечение
для зеркалирования контента блочных устройств (HDD, partitions, logical
volumes...). По своей работе, DRBD очень похож на RAID1, данные на разных
нодах также реплицируются в режиме реального времени. В свою очередь
для приложений DRBD полностью прозрачен и они даже не догадываются
о том, что фактически их данные хранятся на нескольких серверах. Запись
данных на носитель может происходит двумя способами – синхронный,
когда записывающее приложение уведомляется о том, что запись завершена
только после того как данные будут записаны на все ноды, и асинхронный
– это когда записывающее приложение уведомляется сразу после записи на
локальном носителе, не дожидаясь аналогичных действий на peer-системе.
Heartbeat
Heartbeat – это сервис для управления узлами кластера. Который занимается
запуском/остановом сервисов, мониторингом доступности систем в
кластере и сменой владельца общего IP-адреса если primary node приходит
в неработоспособное состояние.
Heartbeat может обслуживать веб-сервера, почтовые сервера, DNS-сервера,
сервера баз данных и т.д.
Именование серверов
Наш кластер будет состоять из двух нод, названных node1.company.ru
(192.168.146.150) и node2.company.ru (192.168.146.134).
В конфигурационных файлах DRBD и Heartbeat должны использоваться
имена нод выводимых по команде uname -n
Указать hostname для сервера можно в файле /etc/sysconfig/network в опции
HOSTNAME, после этого нужно перезагрузить сервер.
Если использование DNS не предполагается то укажите соответствие IP-
адресов к именам в файле /etc/hosts обоих серверов
# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
::1 localhost6.localdomain6 localhost6
192.168.146.134 node2.company.ru
192.168.146.150 node1.company.ru
Установка ПО
Пару лет назад в репозиторий CentOS были включены пакеты drbd и
heartbeat, теперь установка и настройка кластера стала еще проше.
Устанавливаем HeartBeat, DRBD и модуль для DRBD - kmod-drbd, дополнительно
как зависимости будут установлены пакеты heartbeat-pils и heartbeat-stonith.
# yum -y install heartbeat drbd kmod-drbd
Настройка DRBD
Первым шагом мы настроим DRBD и убедимся что он работает правильно.
В нашей системе два HDD, /dev/sda и /dev/sdb. /dev/sda – это системный диск
на котором установлена ОС, /dev/sdb мы будем использовать в качестве
устройства DRBD, постоянно реплицируя его с аналогичным диском на
другой ноде.
# fdisk -l
Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Конфигурационный
ф ур ц ф
файл /etc/drbd.conf на обеих нодах
д
global { usage-count yes; }
common { syncer { rate 20M; } }
resource r0 {
protocol C;
startup {
}
disk {
on-io-error detach;
}
net {
}
on node1.company.ru {
device /dev/drbd0;
disk /dev/sdb;
address 192.168.146.150:7789;
meta-disk internal;
}
on node2.company.ru {
device /dev/drbd0;
disk /dev/sdb;
address 192.168.146.134:7789;
meta-disk internal;
}
}
Монтируем диск
[root@node1 ~]# mount /dev/drbd0 /mnt/drbd0/
Отмонтируем устройство
Монтируем устройство
[root@node2 ~]# mount /dev/drbd0 /mnt/drbd0
Настройка Heartbeat
Файлы конфигурации Heartbeat на обеих нодах должны быть идентичными.
Копируем шаблоны файлов конфигурации в /etc/ha.d/
# cp /usr/share/doc/heartbeat-2.1.3/{ha.cf,authkeys,haresources} /etc/ha.d/
Конфигурационные файлы Heartbeat.
Конфигурационный
ф ур ц файл
ф /etc/ha.d/authkeys
y
В файле конфигурации мы выбираем режим аутентификации и указываем
секретную фразу по которой она будет происходить. Секретная фраза
должна быть одинаковой на обеих нодах. Далее на этот файл необходимо
установить право на чтение только пользователю root, для этого выполните
команду chmod указанную ниже. Рекомендуется использовать sha1 как в
примере.
auth 2
2 sha1 NoOneKnowsIt
Конфигурационный
ф ур ц файл
ф /etc/ha.d/ha.cf
Это главный конфигурационный файл и поведение Heartbeat задается
здесь.
logfacility local0
keepalive 2
deadtime 30
initdead 120
bcast eth0
auto_failback on
node node1.company.ru
node node2.company.ru
respawn hacluster /usr/lib/heartbeat/ipfail
use_logd yes
logfile /var/log/ha.log
debugfile /var/log/ha-debug.log
Конфигурационный
ф ур ц файл
ф /etc/ha.d/haresources
В этом файле описываются наши ресурсы для управления с помощью
Heartbeat.
node1.company.ru IPaddr::192.168.146.140/24 drbddisk::r0 \
Filesystem::/dev/drbd0::/mnt/drbd0::ext3::defaults httpd
Как мы видим именно здесь задается shared IP-адрес, это тот самый IP-
адрес по которому пользователи должны обращаться к вашим сервисам.
Если первичная нода станет недоступна то этот IP-адрес будет назначен
вторичной ноде которая станет первичной и начнет обрабатывать запросы.
Такой подмены пользователи не заметят и сервис будет предоставляться
без перебоев, а именно это нам и нужно. Укажите здесь любой свободный
IP-адрес из вашей сети и закрепите его за кластером.
После того как файлы конфигурации Heartbeat на обеих нодах будут готовы,
можно запускать сервис.
RewriteLog /mnt/drbd0/logs//rewrite.log
RewriteLogLevel 1
</VirtualHost>
Создаем log-файлы
В выводе команды ifconfig вы заметите что был создан сетевой алиас (eth0:0),
это виртуальный интерфейс с назначенным ему IP-адресом. В случае выхода
первичной ноды он будет переназначен на вторичной и она став первичной
будет обрабатывать запросы!
Теперь надо убедится что при недоступности одной ноды работу будет
выполнять вторая.
После того как node1 будет починена ее можно вернуть на первичную роль.
[root@node1 ~]# service heartbeat start
[root@node2 ~]# service heartbeat stop
[root@node2 ~]# service heartbeat start
Конфигурационный
ф ур ц файл
ф /etc/drbd.conf
minor-count По умолчанию модуль DRBD загружается с minor-
count 32, если используется много устройств и
номеров не хватает их можно явно указать здесь;
dialog-refresh Обновление экрана каждые n секунд, может
быть полезно при подключение к серверу по
последовательному интерфейсу;
disable-ip-verification Позволяет отключить одну из проверок drbdadm;
usage-count Участвовать в глобальном подсчете пользователей
DRBD или нет;
common {...} Секция, опции которой наследуют все ресурсы;
syncer Позволяет задать пропускную способность при син-
хронизации устройств по сети, разработчики реко-
мендуют использовать 30% от возможностей сети. На-
пример, если у вас 100 Мбит сеть, то 100 * 0.3 = 30 Мб;
resource r0 {...} Секция описания ресурса;
protocol Задает протокол для DRBD, подробнее о них
написано выше;
handlers {...} Задает обработчики, например что делать в случае
потери соединения первичной ноды;
startup {...} Секция для опций используемых в процессе
загрузки DRBD;
wfc-timeout Ожидание таймаута соединения;
degr-wfc-timeout Ожидание таймаута подключения, в случае если в
кластере одна рабочая нода;
Информация о ресурсе
cs connection state
ro roles
ds disk states
ns network send
Роли ресурсов
Конфигурационный
ф ур ц файл
ф /etc/ha.d/ha.cf
debugfile Задает расположение файла для записи отладочной инфор-
мации;
logfile Задает расположение файла для записи всей остальной ин-
формации;
logfacility Опция для Syslog;
keepalive Как часто проверять состояние другой ноды, указывается в
секундах;
deadtime Как быстро нужно решить, что удаленная нода вышла из
строя, указывается в секундах;
warntime Через какой промежуток времени после последнего ответа
от удаленной ноды генерировать предупреждение;
initdead На некоторых серверах и ОС, сетевой интерфейс начинает
работать правильно только после перезагрузки, для коррект-
ной обработки ситуации введен дополнительный счетчик;
udpport UDP порт для broadcast/unicast запросов;
baud Скорость для последовательного соединения;
serial Устройство для последовательного соединения;
bcast Через какой интерфейс отправлять broadcast-запросы
Heartbeat;
mcast Интерфейс для multicast-запросов, если используется;
ucast Интерфейс для unicast-запросов, если используется;
auto_failback Переключаться ли обратно на primary node после ее восста-
новления:
on – переключаться;
off – secondary node продолжит работать как primary node;
legacy – включать auto_failback в системах, где все ноды еще
не поддерживают опцию auto_failback;
stonith Опция используется только в первой версии Heartbeat;
watchdog Позволяет включить Watchdog timer, если наш собственный
Heartbeat не ответит в течение минуты то сервер будет пере-
загружен;
Резюме
В этом модуле мы выяснили какие виды кластеров бывают. Подробнее
разобрали принцип работы отказоустойчивого кластера, узнали о
программном обеспечение которое нам может помочь в его построение и
удачно воспользовались им. Мы установили и настроили наш кластер на базе
DRBD и Heartbeat, далее развернули веб-сервер Apache и протестировали
его работу. Это была простая конфигурация кластера, но полученный опыт
является хорошим фундаментом для дальнейших исследований.
Домашнее задание
На двух виртуальных машинах построить отказоустойчивый кластер для
веб-сервера и убедиться, что все работает.