пятница, 25 сентября 2009 г.

PostfixAdmin на Debian

Перевод статьи: PostfixAdmin on Debian

Postfix Admin - это web-интерфейс для настройки пользователей почтового сервера на основе Postfix и MySQL.

Он позволяет создавать пользователей и псевдонимы в пределах домена.

Этот урок рассматривает установку Postfix Admin, Postfix в связке с MySQL и включенной SMTP-аутентификацией, и Dovecot (для POP3/POP3S/IMAP/IMAPS) в связке с MySQL.

Не смотря на то, что этот урок был проверен на Debian Etch, настройка Postfix/MySQL одинакова и должна правильно работать на большинстве дистрибутивов.

Если вы хотите настроить фильтрацию почты каждого пользователя от спама и вирусов, обратитесь к следующему уроку: http://bliki.rimuhosting.com/space/knowledgebase/linux/mail/postfix+with+amavis+and+mysql

Postfixadmin теперь есть в официальных репозиториях Debian и Ubuntu. Просто воспользуйтесь apt-get для его установки:
# apt-get install postfixadmin
ЗАМЕЧАНИЕ: Пакет не попал в репозитории Ubuntu. Просто скачайте файл со страницы http://sourceforge.net/project/showfiles.php?group_id=191583&package_id=225300 и выполните:
# dpkg -i postfixadmin_2.2.0_all.deb
Postfixadmin будет установлен в каталог /usr/share/postfixadmin/, также будут установлен файл конфигурации /etc/postfixadmin/config.inc.php, а в конфигурацию apache будет добавлен дополнительный псевдоним посредством файла /etc/apache2/conf.d/postfixadmin:
Alias /postfixadmin /usr/share/postfixadmin
Если вы решите воспользоваться установкой из архива с исходными текстами, это всё можно сделать вручную.

Настроим Postfix Admin в соответствии с вашей спецификой (например, зададим подходящий пароль к базе данных, настроим домен по умолчанию и т.п.)

Отредактируем файл /usr/share/postfixadmin/config.inc.php и укажем следующее:
# vi config.inc.php
[...]
$CONF['configured'] = true;
$CONF['postfix_admin_url'] = 'http://ваш-домен.ru/postfixadmin';
$CONF['database_type'] = 'mysql';
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfixadmin';
$CONF['database_password'] = 'SecretPassword!';
$CONF['database_name'] = 'postfix';
$CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['encrypt'] = 'cleartext';
Просмотрите остаток файла, если вам захочется сделать более тонкие настройки.

Вы можете быстро заменить домен по умолчанию на ваш собственный:
# replace "change-this-to-your.domain.tld" "ваш-домен.ru" -- /usr/share/postfixadmin/config.inc.php
Создайте базу данных и пользователя в mysql:
$ mysql -u root -p
mysql> create database postfix;
mysql> grant all privileges on postfix.* to 'postfixadmin'@'localhost' identified by 'SecretPassword!';
mysql> flush privileges;
mysql> q
Откройте браузер и перейдите по ссылке http://ваш-домен.ru/postfixadmin/ или http://ваш-IP/postfixadmin/. Будет предложено запустить процесс настройки. Удостоверьтесь, что все проверки установщика сообщают 'OK'.

Рекомендуется удалить setup.php.

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

Установим Postfix и SASL2 с поддержкой MySQL
# apt-get install postfix-mysql postfix-tls libsasl2-modules-sql libsasl2-modules
Добавим в файл /etc/postfix/main.cf следующие строки:
virtual_alias_maps = mysql:/etc/postfix/mysql_virtual_alias_maps.cf
virtual_gid_maps = static:106
virtual_mailbox_base = /home/vmail
virtual_mailbox_domains = mysql:/etc/postfix/mysql_virtual_domains_maps.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql_virtual_mailbox_maps.cf
virtual_minimum_uid = 106
virtual_transport = virtual
virtual_uid_maps = static:106
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated,
  reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient,
  reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname
smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
ЗАМЕЧАНИЕ: UID и GID равные 106 на вашей системе могут быть другими. Посмотрите на UID и GID пользователя postfix (или vmail) в файле /etc/passwd и укажите их. Например, на моём сервере:
# grep postfix /etc/passwd
postfix:x:102:105::/var/spool/postfix:/bin/false
--> uid: 102; gid: 105

Создайте следующие файлы в каталоге /etc/postfix/:
mysql_virtual_alias_maps.cf
user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
mysql_virtual_domains_maps.cf
user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = domain
select_field = domain
where_field = domain
additional_conditions = and backupmx = '0' and active = '1'
mysql_virtual_mailbox_maps.cf
user = postfix
password = SecretPassword!
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
Если вы хотите разрешить ретрансляцию почты через ваш сервер после SMTP AUTH, пропишите в файле /etc/postfix/sasl/smtpd.conf следующие настройки:
pwcheck_method: auxprop
mech_list: PLAIN LOGIN
auxprop_plugin: sql
sql_verbose: yes
sql_engine: mysql
sql_hostnames: localhost
sql_user: postfix
sql_passwd: SecretPassword!
sql_database: postfix
sql_select: select password from mailbox where username = '%u@%r'
Создайте структуру каталогов, включая каталог для первого домена. Вы так же можете войти в PostfixAdmin и создать учётную запись 'test' для домена ваш-домен.ru.
# mkdir -p /home/vmail/yourdomain.com/test
# chmod -R 770 /home/vmail
# chown -R postfix:postfix /home/vmail/
Установим Dovecot с поддержкой MySQL
# apt-get install dovecot-common dovecot-imapd dovecot-pop3d
Отредактируем файл /etc/dovecot/dovecot-mysql.conf с настройками Dovecot/MySQL, воспользовавшись следующими опциями:
driver = mysql
connect = dbname=postfix user=postfixadmin host=localhost password=SecretPassword!
default_pass_scheme = PLAIN
password_query = SELECT password FROM mailbox WHERE username = '%u'
user_query = SELECT maildir,
                    106 AS uid,
                    106 AS gid
             FROM mailbox
             WHERE username = '%u'
Теперь настроим Dovecot на использование MySQL, задав следующие опции в файле /etc/dovecot/dovecot.conf:
protocols = imap imaps pop3 pop3s
disable_plaintext_auth = no
log_timestamp = "%Y-%m-%d %H:%M:%S "
mail_location = maildir:/home/vmail/%d/%n
mail_access_groups = mail
first_valid_uid = 106
first_valid_gid = 106
protocol imap {
}
protocol pop3 {
  pop3_uidl_format = %08Xu%08Xv
}
auth default {
  mechanisms = digest-md5 plain
  passdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
  }
  userdb sql {
    args = /etc/dovecot/dovecot-mysql.conf
  }
  user = root
}
Перезапустим Dovecot и Postfix и проверим их.

По завершении вы должны получить возможность добавлять новые домены, почтовые ящики, псевдонимы с помощью PostfixAdmin и получить правильно работающую систему, включая SMTP-аутентификацию. Отметим, что для работы SMTP-аутентификации saslauthd не требуется.

Примечание переводчика:
  1. В репозитории Debian Lenny и выше на момент перевода готовый пакет PostfixAdmin обнаружен не был.
  2. После редактирования файла /etc/postfixadmin/config.inc.php нужно перейти не по ссылке http://ваш-домен.ru/postfix/, а по ссылке http://ваш-домен.ru/postfix/setup.php
  3. Чтобы http://ваш-домен.ru/postfix/setup.php не выдавал ошибки, нужно поставить пакет php5-imap и включить использование модуля imap в PHP.

пятница, 18 сентября 2009 г.

Как настроить клиент последовательной консоли

Перевод статьи: How-To set up a serial console client

В двух предыдущих статьях я остановился на настройке последовательной консоли в Ubuntu и Debian.

В этом уроке мы покажем как подключиться к этой последовательной консоли с помощью другого компьютера и программы minicom.

minicom - это программа для связи через последовательные устройства, которая используется для подключения к последовательной консоли. После нескольких этапов настройки, мы сможем получить доступ через SSH или напрямую через виртуальную консоль.

1. Перво-наперво...

Нам нужно удостовериться, что два компьютера соединены с помощью так называемого нуль-модемного кабеля. Другие типы последовательных кабелей работать не будут!

2. Установка Minicom

Для minicom имеются готовые пакеты в Debian и Ubuntu, так что нам нужно лишь выполнить команду:
# apt-get install minicom
3. Настройка minicom

В этом уроке последовательный порт используется для подключения к последовательной консоли на ttyS0. Вы можете получить список обнаруженных ядром устройств с помощью команды:
$ dmesg | grep ttyS
[ 12.282348] serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
[ 12.282928] 00:0c: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Теперь запустим minicom от имени пользователя root:
$ sudo minicom
Нажмите Ctrl-A O чтобы попасть в настройки последовательного порта и нажмите Enter, введите A и что устройство указывает на /dev/ttyS0, затем нажмите Enter, чтобы подтвердить.

Нажмите E и удостоверьтесь, что здесь стоит значение 115200, нажмите Enter, чтобы подтвердить. Снова нажмите Enter, чтобы вернуться к предыдущему экрану и, наконец, перейдите к пункту настройки "Save setup as dfl", нажмиет Enter чтобы подтвердить, Esc чтобы вернуться назад к первому экрану и нажмите Ctrl-A Q чтобы выйти.

Теперь перезапустите:
$ sudo minicom
И вы должны подключиться!

Как настроить консоль на последовательном порту в Ubuntu

Перевод статьи: How-To set up a serial console on Ubuntu

Этот урок проведёт вас через этапы, необходимые для настройки консоли на последовательном порту в Ubuntu Linux.

В отличие от других дистрибутивов, Ubuntu использует upstart вместо sysvinit и поэтому есть некоторые отличия этого урока от большинства уроков, которые вы можете найти в Интернете, описывающих настройку последовательной консоли.

Последовательная консоль становится необходимой, если она запущена на "безголовом" сервере (то есть не имеющим клавиатуры и экрана) или если вы не можете подключиться к серверу из-за неполадок в сети.

В этом уроке мы настроим последовательную консоль на сервере, компьютере к которому мы хотим получить доступ. Настройка клиента последовательной консоли описана в другой статье.

1. Проверка последовательных устройств

Чтобы найти устройства, доступные на компьютере, вы можете запустить:
$ dmesg | grep tty
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:0c: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
Из выведенного можно определить, что имеется один последовательный интерфейс (/dev/ttyS0). Возможно на вашем компьютере будет более одного интерфейса. В этом уроке будем считать, что мы используем первое устройство (ttyS0). Если вы используете второе устройство, вам нужно заменить ttyS0 на ttyS1.

2. Настройка последовательной консоли на сервере

На сервере мы настроим:
  • Последовательную консоль на ttyS0
  • Отправку загрузочных сообщений на последовательную консоль
  • Заставим Grub выводить сообщения на последовательную консоль
2.1. Последовательная консоль

Для настройки последовательной консоли нам потребуется создать новый файл /etc/event.d/ttyS0, чтобы порождать getty на последовательном устройстве. getty позаботится о выводе приглашения для ввода имени пользователя и пароля.

Отредактируем /etc/event.d/ttyS0 и добавим:
# ttyS0 - getty
#
# Служба сопровождает getty на ttyS0 начиная с момента
# запуска системы и до её остановки.
start on runlevel 2
start on runlevel 3
start on runlevel 4
start on runlevel 5
stop on runlevel 0
stop on runlevel 1
stop on runlevel 6
respawn
exec /sbin/getty -L 115200 ttyS0 vt102
Чтобы разрешить вход пользователю root (если вы включили учётную запись пользователя root на вашем компьютере) через последовательную консоль, вам нужно отредактировать файл /etc/securetty и добавить:
ttyS0
2.2. Заставим grub выводить сообщения в ttyS0

grub можно настроить на вывод сообщений в последовательную консоль. Отредактируйте меню grub и добавьте:
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1
terminal --timeout=10 serial console
В разделе до различных ядер. Это приведёт к тому, что grub будет отображаться на последовательной консоли и вы сможете управлять grub через последовательную консоль или загружаться с использованием другого ядра.

Если используется ttyS1, замените --unit=0 на --unit=1.

Также, чтобы сообщения о загрузке выводились на последовательную консоль, вам нужно добавить к строке вашего ядра следующее:
console=ttyS0,115200n8 console=tty0
Тогда строка ядра будет выглядеть следующим образом:
kernel /boot/vmlinuz-2.6.24-16-generic root=UUID=uuuuuu-iii3-dddd-uuuu-iiiiiddddd ro quiet splash console=ttyS0,115200n8 console=tty0
Теперь, при следующей перезагрузке вы сможете подключиться прямо к вашему компьютеру через последовательную консоль!

Как настроить консоль на последовательном порту в Debian

Перевод статьи: How-To set up a serial console on Debian

Этот урок проведёт вас через этапы, необходимые для настройки консоли на последовательном порту в Debian Linux.

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

Последовательная консоль становится необходимой, если она запущена на "безголовом" сервере (то есть не имеющим клавиатуры и экрана) или если вы не можете подключиться к серверу из-за неполадок в сети.

В этом уроке мы настроим последовательную консоль на сервере, компьютере к которому мы хотим получить доступ. Настройка клиента последовательной консоли описана в другой статье.

1. Проверка последовательных устройств

Чтобы найти устройства, доступные на компьютере, вы можете запустить:
$ dmesg | grep tty
serial8250: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
serial8250: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
00:09: ttyS0 at I/O 0x3f8 (irq = 4) is a 16550A
00:0a: ttyS1 at I/O 0x2f8 (irq = 3) is a 16550A
Из выведенного можно определить, что имеется два последовательных интерфейса (/dev/ttyS0 и /dev/ttyS1). В этом уроке будем считать, что мы используем первое устройство (ttyS0). Если вы используете второе устройство, вам нужно заменить ttyS0 на ttyS1.

2. Настройка последовательной консоли на сервере

На сервере мы настроим:
  • Последовательную консоль на ttyS0
  • Отправку загрузочных сообщений на последовательную консоль
  • Заставим Grub выводить сообщения на последовательную консоль
2.1. Последовательная консоль

Для настройки последовательной консоли нам потребуется отредактировать файл /etc/inittab, чтобы порождать getty на последовательном устройстве. getty позаботится о выводе приглашения для ввода имени пользователя и пароля.

Отредактируем /etc/inittab и добавим:
s0:2345:respawn:/sbin/getty -L 115200 ttyS0 vt102
прямо за блоком:
1:2345:respawn:/sbin/getty 38400 tty1
2:23:respawn:/sbin/getty 38400 tty2
3:23:respawn:/sbin/getty 38400 tty3
4:23:respawn:/sbin/getty 38400 tty4
5:23:respawn:/sbin/getty 38400 tty5
6:23:respawn:/sbin/getty 38400 tty6
Теперь запустим:
# init q
Чтобы заставить sysvinit перечитать его настройки и породить getty на /dev/ttyS0 .

Чтобы разрешить вход пользователю root через последовательную консоль, вам нужно отредактировать файл /etc/securetty и проверить, что в нём имеется:
ttyS0
2.2. Заставим grub выводить сообщения в ttyS0

grub можно настроить на вывод сообщений в последовательную консоль. Отредактируйте меню grub и добавьте:
serial --unit=0 --speed=115200 --word=8 --parity=no --stop=1 terminal --timeout=10 serial console
В разделе до различных ядер. Это приведёт к тому, что grub будет отображаться на последовательной консоли и вы сможете управлять grub через последовательную консоль или загружаться с использованием другого ядра.

Если используется ttyS1, замените --unit=0 на --unit=1.

Также, чтобы сообщения о загрузке выводились на последовательную консоль, вам нужно добавить к строке вашего ядра следующее:
console=ttyS0,115200n8 console=tty0
Тогда строка ядра будет выглядеть следующим образом:
kernel /boot/vmlinuz-2.6.18-6-686 root=/dev/sda1 ro console=ttyS0,115200n8 console=tty0
Теперь, при следующей перезагрузке вы сможете подключиться прямо к вашему компьютеру через последовательную консоль!

Установка Debian Etch из работающей системы, основанной на Debian

Перевод статьи: How To: Installing Debian Etch From a running Debian based system

Этот урок иллюстрирует каким образом вы можете установить Debian Etch и в общем любой дистрибутив, основанный на Debian из окружения chroot. Воспользовавшись этим способом вам не потребуется ни скачивать установочные диски, ни записывать их.

Это хороший способ понять, как работает система debian.

1. Введение

Долгое время с тех пор как я запустил debian на своей системе, я каким-то образом потерял её и вынужден был использовать 5G, которые остались на моём жёстком диске, для установки Debian Etch.

Я захотел установить её прямо из окружения Ubuntu Dapper. В прошлом использовать её было проще, поскольку можно было воспользоваться base-config, который проводил вас через процесс установки. Но недавно (2 месяца назад), вышел Debian Installer Etch beta 2, отрывок из новости о котором от 15 марта 2006 приведён ниже:
15 марта 2006

Команда Debian Installer счастлива представить второй предварительный релиз установщика для Debian GNU/Linux Etch.

Улучшения в этом выпуске установщика включают:

* base-config был отправлен на пенсию: установка теперь полностью выполняется до перезагрузки. Наконец, весь процесс установки пакетов Debian происходит на фоне дружественной полосы прогресса.
* ....
Что ж, установщик debian теперь работает с установочного компакт-диска и base-config был удалён из репозитория, что означает что я должен выполнить всю работу base-config'а вручную. Например настройка locale, console-data, часового пояса, сети и fstab.

2. Подготовка вашей системы

Первая вещь, которую вам нужно сделать, это подготовить раздел, на котором будет размещаться ваша новая система. Ваша файловая система может быть более или менее сложной (иметь отдельные разделы /boot, /usr, /var ...). В моём случае у меня было очень мало места, я создал раздел / на диске sda11 с типом файловой системы ext3 и раздел для каталога /home (поскольку я уже использую систему с Ubuntu Dapper), который находится на разделе /dev/sda5 и его тип файловой системы - reiserfs. Разделом для подкачки был тот, который использовался запущенной системой, имеющий имя sda9.

И так, приступаем, нам нужно отформатировать /, смонтировать / в нашу файловую систему и подготовить будущую файловую систему с помощью debootstrap, который является инструментом для развёртывания базовой системы Debian.

Приступим, откроем терминал и введём:
root@laptop:/# mkfs.ext3 /dev/sda11
root@laptop:/# mkdir /mnt/debian
root@laptop:/# mount /dev/sda11 /mnt/debian/
Файловая система готова и мы смонтировали её в /mnt/debian. Теперь нам нужно установить базовую систему с помощью debootstrap:
root@laptop:/# debootstrap etch /mnt/debian/ ftp://ftp.de.debian.org/debian/
I: Retrieving Release
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Found additional base dependencies: libdb4.2 libgnutls12 libreadline5 libsigc
++-2.0-0c2aopenbsd-inetd readline-common
...
...
I: Configuring netbase...
I: Configuring openbsd-inetd...
I: Base system installed successfully.
Готово! теперь мы сменим корневой каталог с помощью chroot (этот инструмент поставляется в пакете coreutils), chroot запускает команду или интерактивную оболочку в указанном корневом каталоге, чтобы проинформировать нашу новую систему о том что это за система, нам нужно смонтировать файловую систему /proc:
root@laptop:/# mount -t proc none /mnt/debian/proc
root@laptop:/# chroot /mnt/debian/
Будьте осторожны в настройке.

3. Установка вспомогательных пакетов и настройка новой системы

Теперь нам нужно установить некоторые дополнительные пакеты (например, ядро :D), настроить часовой пояс, разделы, имя узла, создать главного пользователя, определить новый пароль для пользователя root...
root@laptop:/# apt-get install locales console-data console-common
root@laptop:/# dpkg-reconfigure locales console-data
Введите подходящее для вашей системы значение. Установите ядро:
root@laptop:/# apt-get install initrd-tools
root@laptop:/# apt-get install linux-headers-2.6-686 linux-image-2.6.15-1-686
Заголовки Linux не нужны большинству пользователей, но поскольку я собираюсь скомпилировать модуль ядра для использования моей беспроводной сетевой карты, мне заголовки ядра нужны.

Вам может потребоваться установить полезные пакеты, вот хороший набор:
root@laptop:/# apt-get install usbutils pciutils bzip2 sysfsutils wireless-tools dhcp3-client resolvconf cpufreqd cpufrequtils acpid acpi
Теперь мы перейдём к настройке системы. Начнём с файла /etc/hosts, отредактировав и записав следующее:
# /etc/hosts
127.0.0.1 localhost
Зададим имя узла в файле /etc/hostname и добавим имя вашего узла. Вы можете захотеть настроить /etc/network/interfaces, чтобы сетевые интерфейсы настраивались автоматически, например:
iface lo inet loopback
iface eth0 inet dhcp
  wireless-essid XXXXXX
auto eth0
Мы покончили с сетью, теперь настроим часовой пояс:
# ln -sf /usr/share/zoneinfo/Zone/Town /etc/localtime
и с файловой системой, отредактируем файл /etc/fstab и добавим:
proc /proc proc defaults 0 0
/dev/sda11 / ext3 defaults,errors=remount-ro 0 1
/dev/sda5 /home reiserfs defaults 0 2
/dev/sda9 none swap sw 0 0
/dev/hda /media/cdrom0 iso9660 ro,user,noauto 0 0
Замените sdaX на подходящие для вашей системы значения.

Важное замечание: Вам нужно задать пароль пользователя root по умолчанию, или вы не сможете войти. Введите:
root@laptop:/# passwd
и определите ваш новый пароль.

4. Установка загрузчика (GRUB)

В моём случае я использую загрузчик из моей запущенной системы. Отредактируем /boot/grub/menu.lst и добавим в конец файла:
title Debian Etch, kernel 2.6.15-1-686 (on /dev/sda11)
root (hd0,10)
kernel /boot/vmlinuz-2.6.15-1-686 root=/dev/sda11 ro quiet splash
initrd /boot/initrd.img-2.6.15-1-686
savedefault
boot
Здесь вам тоже потребуется заменить sdaX на подходящие для вашей системы значения.

Теперь вы можете выйти из вашего изменённого корневого каталога и перезагрузиться в вашу новую систему. Вам всё ещё нужно установить и настроить Xorg.
root@laptop:/# exit
root@laptop:~# umount /mnt/debian/proc
root@laptop:~# umount /mnt/debian
root@laptop:~# reboot
5. Установка и настройка Xorg

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

Теперь установим x-сервер и x-клиент:
root@laptop:~#apt-get install xserver-common xserver-xorg
root@laptop:~# apt-get install x-window-system-core x-window-system
root@laptop:~# apt-get install x-window-system-core x-window-system
плюс те пакеты, которые вы хотите.

Откройте /etc/X11/xorg.conf и проверьте, что драйвер соответствует вашей видеокарте, проверьте раскладки клавиатуры и попытайтесь запустить X.
root@laptop:~# X
Если что-то не так, google будет вашим лучшим другом :).

Чтобы X работал правильно, вам нужно создать для себя обычную учётную запись. На моём разделе /home идентификатор пользователя uid и идентификатор группы gid равны 1000, поэтому мне нужно создать группу и пользователя с теми же идентификаторами:
root@laptop:~#addgroup --gid 1000 myuser
root@laptop:~# adduser --id 1000 --gid 1000 myuser
Запустим gdm, и войдём под вашей учётной записью обычного пользователя ;).

Теперь вам всё ещё нужно установить другие пакеты (xmms, mplayer, gaim...), но ваша система работает.

Счастливого пути.

Почтовые уведомления от cron-apt о доступных обновлениях пакетов

Перевод статьи: How-To: email notification upon available package updates with cron-apt

cron-apt - это инструмент, который запускается планировщиком задач cron через регулярные интервалы времени. Он проверяет обновления пакетов и, на выбор, выполняет некоторые действия.

cron-apt по умолчанию скачивает пакеты, но не устанавливает их.

Этот урок рассматривает установку cron-apt для отправки писем на указанный адрес при появлении возможности установки обновлений.

Одним из основных правил, для сохранения защищённости системы против программных эксплойтов, является её поддержание в актуальном состоянии.

Новые настольные дистрибутивы Linux включают программу, уведомляющую о доступности свежих обновлений визуально.

В неграфическом режиме, на серверах работающих в режиме 24/7, нужно отслеживать их вручную и запускать:
# apt-get update
# apt-get dist-upgrade
Эта простая задача может стать весьма обременительной, если вы администрируете большое количество систем.

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

Я не рекомендую устанавливать обновления автоматически, поскольку я предпочитаю видеть происходящее и в случае если что-то пойдёт не так, я смогу вмешаться.

В этом случае почтовые уведомления позволяют вам применять обновления своевременно.

1. Установка

На Ubuntu и Debian, cron-apt можно установить введя:
# apt-get install cron-apt
2. Настройка

Настройка cron-apt совершенно очевидна. Доступно большое количество возможностей, однако эта статья ограничивается описанием отправки уведомлений.

Главный настроечный файл - это /etc/cron-apt/config. Откройте и отредактируйте этот файл и удостоверьтесь, что переменная MAILTO настроена на тот почтовый адрес, на который вы хотите получать отчёты, а переменную MAILON установите в значение upgrade:
MAILTO="user@example.com"
MAILON="upgrade"
Также вы можете заменить значение MAILON на always, чтобы получать письма с отчётами при каждом запуске cron-apt.

3. Определение расписания запуска cron-apt

Поскольку cron-apt является заданием для cron, вы можете определить время запуска, отредактировав файл /etc/cron.d/cron-apt.

Настройка по умолчанию запускает cron-apt каждый день в 4 часа ночи.

Как настроить кэш репозитория с помощью apt-cacher

Перевод статьи: How To Set up a repository cache with apt-cacher

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

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

В этом случае имеется один компьютер, который называется repository-cache (кэш репозитория), этот компьютер будет работать в качестве кэша репозитория, в то время как остальные компьютеры в вашей сети будут пользоваться им, как обычным репозиторием.

1. Приступим

Как обычно, вам нужно установить необходимые пакеты на первом компьютере. Поэтому введите в терминале:
$ sudo apt-get install apt-cacher
Когда команда будет выполнена, пора перейти к файлу настройки /etc/apt-cacher/apt-cacher.conf

2. Настройка Apt-Cacher

2.1. apt-cacher.conf

И так, откроем главный файл конфигурации apt-cacher'а: /etc/apt-cacher/apt-cacher.conf и начнём редактировать его в соответствии с вашими настройками.

По умолчанию apt-cacher ожидает подключений на порту 3142. Вы можете поменять это значение на то, которое вам нужно.

allowed_hosts: по умолчанию все перечисленные здесь узлы имеют право использовать кэш репозитория. Вы можете изменить это значение, если вы хотите предоставить доступ только определённым узлам. В моём случае, я хочу разрешить доступ моей локальной сети 192.168.1.0/24 и локальному узлу (localhost - 127.0.0.1 и 127.0.1.1 на системах с ubuntu), поэтому я меняю значение следующим образом:
allowed_hosts=192.168.1.0/24, 127.0.1.1
Поскольку 127.0.0.1 разрешён всегда, не обязательно добавлять адрес 127.0.0.1.

generate_reports: Эта директива заставляет apt-cacher создавать ежедневный отчёт по эффективности вашего кэша. По умолчанию это 1, если вы хотите отключить его, установите его в 0.

path_map: Это любопытная директива. Здесь вы можете определить различные псевдонимы для различных узлов репозиториев. На моём компьютере с ubuntu edgy, моя директива path_map выглядит следующим образом:
path_map = debuntu repository.debuntu.org; ubuntu archive.ubuntu.com/ubuntu; ubuntu-updates archive.ubuntu.com/ubuntu; ubuntu-security security.ubuntu.com/ubuntu
Позвольте мне немного пояснить. Здесь я создал отображения в следующие имена:
  • debuntu в узел repository.debuntu.org
  • ubuntuand ubuntu-updates в узел archive.ubuntu.com/ubuntu
  • и ubuntu-security в узел security.ubuntu.com
Теперь, чтобы получить доступ к определённому репозиторию, нам требуется просто добавить псевдоним к нашему серверу с кешем репозиториев, например: компьютер_с_кэшем_репозитория:порт/псевдоним

Например, мы можем получить доступ к репозиторию debuntu через http://repository-cache:3142/debuntu и к репозиторию ubuntu secutiry через http://repository-cache:3142/ubuntu-security.

2.2. Включение apt-cacher'а

Чтобы запустить apt-cacher, его нужно включить из файла /etc/default/apt-cacher. Откроем файл /etc/default/apt-cacher и установим AUTOSTART в 1:
AUTOSTART=1
Теперь перезапустим apt-cacher:
$ sudo /etc/init.d/apt-cacher restart
Теперь apt-cacher запущен, время исправить файлы всех наших клиентов /etc/apt/sources.list на каждом узле в сети, где мы хотим использовать компьютер с кэшем репозитория.

3. Настройка файла sources.list клиентов и серверов

Настало время настроить на клиентских узлах файлы источников apt: /etc/apt/sources.list. Важно использовать кэш репозитория ткаже и на самом сервере, таким образом любые обновления, выполненные сервером, будут заполнять кэш.

Исходный /etc/apt/sources.list:
#репозиторий debuntu
deb http://repository.debuntu.org edgy multiverse
deb-src http://repository.debuntu.org edgy multiverse

#главный репозиторий ubuntu
deb http://archive.ubuntu.com/ubuntu/ edgy main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ edgy main restricted universe multiverse

#репозиторий обновлений ubuntu
deb http://archive.ubuntu.com/ubuntu/ edgy-updates main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ edgy-updates main restricted universe multiverse

#репозиторий обновлений безопасности ubuntu
deb http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse
deb-src http://security.ubuntu.com/ubuntu edgy-security main restricted universe multiverse
Чтобы использовать наш кэш репозитория, эти записи необходимо заменить на:
#репозиторий debuntu
deb http://repository-cache:3142/debuntu edgy multiverse
deb-src http://repository-cache:3142/debuntu edgy multiverse

#главный репозиторий ubuntu
deb http://repository-cache:3142/ubuntu edgy main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu edgy main restricted universe multiverse

#репозиторий обновлений ubuntu
deb http://repository-cache:3142/ubuntu-updates edgy-updates main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu-updates edgy-updates main restricted universe multiverse

#репозиторий обновлений безопасности ubuntu
deb http://repository-cache:3142/ubuntu-security edgy-security main restricted universe multiverse
deb-src http://repository-cache:3142/ubuntu-security edgy-security main restricted universe multiverse
Классно, теперь чтобы каждый каждый узел получал пакеты .deb из нашего репозитория, нужно запустить:
$ sudo apt-get update
на каждом узле.

4. Импорт существующих пакетов из /var/cache/apt/archives/ в репозиторий apt-cacher

Может случиться, что ваш сервер уже имеет большое количество пакетов, находящихся в локальном кэше репозитория: /var/cache/apt/archives/. apt-cacher содержит инструмент, позволяющий имортировать эти файлы в репозиторий apt-cacher'а.

Это большое количество полезных сценариев можно найти в каталоге /usr/share/apt-cacher/. Интересующий нас называется apt-cacher-import.pl. Для импорта файлов .deb из каталога /var/cache/apt/archives в репозиторий apt-cacher запустите:
$ sudo /usr/share/apt-cacher/apt-cacher-import.pl /var/cache/apt/archives
Его нужно запускать от имени пользователя root или файлы .deb могут не скопироваться в кэш репозитория.

Теперь каталог /var/cache/apt-cacher/packages/ должен пополниться целой кучей пакетов.

5. Получение отчётов об использовании вашего кэша репозитория

Если вы оставили значение директивы generate_reports равным 1, apt-cacher будет составлять отчёты по использованию кэша каждый день.

Вы можете получить к ним доступ по адресу: http://repository-cache:3142/report

Если вам нужно перегенерировать отчёт, запустите:
$ sudo /usr/share/apt-cacher/apt-cacher-report.pl
6. Заключение

apt-cacher - это простой и эффективный пакет, который одновременно экономит ваше время и пропускную способность канала при использовании нескольких компьютеров, работающих на одинаковом дистрибутиве, как это бывает в домашней сети или в компании.

четверг, 17 сентября 2009 г.

Postfix и Spamassassin: Как фильтровать спам

Перевод статьи: Postfix and Spamassassin: How to filter spam

Postfix - это популярный агент передачи почты (mail transport agent - MTA), используемый на многих системах Unix/Linux. В наше время сети переполнены спамом, но к счастью, существует способ отфильтровать их с помощью такой программы, как spamassassin.

Эта статья не рассматривает процесс установки postfix. Для этого вы можете обратиться к статье "Как запустить postfix с виртуальными доменами".

1. Начало

На этот момент у вас должен иметься работающий SMTP-сервер под управлением postfix. Потребуется пара пакетов, которые нужно установить: spamassassin и его клиент spamc.
$ sudo apt-get install spamassassin spamc
Пакет spamassassin содержит демон, который может быть вызван пользовательской программой, например procmail... но также может быть встроен в агент передачи почты, такой как postfix.

2. Использование spamassassin как самостоятельного демона

В этой части урока, мы запустим spamassassin под его собственным пользователем (по умолчанию в debian sarge - это root), поменяем некоторые настройки и заставим postfix использовать spamassassin в качестве фильтра содержимого на выходе очереди. Это означает, что содержимое проверяется фильтрами spamassassin после того, как postfix решил его доставить.

2.1. Настройка spamassassin

И так, теперь вы установили spamassassin из репозитория debian. С настройками по умолчанию spamassassin отключен, но при включении будет запускаться от имени пользователя root. Чтобы избежать этого, мы заведём особого пользователя и группу для spamassassin. Выполните следующие команды от имени пользователя root:
# groupadd -g 5001 spamd
# useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd
# mkdir /var/lib/spamassassin
# chown spamd:spamd /var/lib/spamassassin
Теперь нам нужно поменять некоторые настройки в файле /etc/default/spamassassin и удостовериться, что у вас получились следующие значения:
ENABLED=1
SAHOME="/var/lib/spamassassin/"
OPTIONS="--create-prefs --max-children 5 --username spamd --helper-home-dir ${SAHOME} -s ${SAHOME}spamd.log"
PIDFILE="${SAHOME}spamd.pid"
Таким образом мы настроили запуск демона spamd от пользователя spamd, создали его собственный домашний каталог (/var/lib/spamassassin/) и заставили его ввести журнал в файле /var/lib/spamassassin/spamd.log

2.2. Конфигурирование spamassassin

Теперь нам нужно задать spamassassin некоторые правила. Настройки по умолчанию вполне подходящие, однако вы можете захотеть слегка подправить их. Давайте отредактируем файл /etc/spamassassin/local.cf и приведём его к следующему виду:
rewrite_header Subject [***** SPAM _SCORE_ *****]
required_score 2.0
# Чтобы использовать _SCORE_ нам нужно установить report_safe в 0
# Если эта опция установлена в 0, у поступающего спама к заголовками будут добавлены
# записи "X-Spam-", но изменений в тело не вносится.
report_safe 0
# Включить систему Бэйс
use_bayes 1
use_bayes_rules 1
# Включить автообучение Бэйс
bayes_auto_learn 1
# Включить или выключить проверки сети
skip_rbl_checks 0
use_razor2 0
use_dcc 0
use_pyzor 0
Здесь мы указали spamassassin стандартные настройки spamd для перезаписи темы письма на [***** SPAM _SCORE_ *****], где _SCORE_ - это количество баллов, назначаемых spamassassin после различных тестов, только если действительное значение баллов выше или равно 2.0. Так, письма с баллами ниже 2 изменены не будут.

Чтобы позволить использование _SCORE_ в директиве rewrite_header, вы должны установить report_safe в 0.

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

В последнем разделе мы отключаем сотрудничающие сети, такие как pyzor, razor2 и dcc. Эти сотрудничающие сети ведут актуальный каталог известных контрольных сумм для писем, которые были определены как спам. Они могут быть интересны, но я не использую их здесь, поскольку я считаю, что spamassassin справляется со спамом достаточно хорошо, используя только эти правила.

Теперь запустим spamd следующей командой:
# /etc/init.d/spamassassin start
Мы почти закончили, нам осталось настроить postfix таким образом, чтобы он передавал все письма, которые нужно доставить в локальные почтовые ящики, в spamassassin.

3. Заставляем Postfix вызывать Spamassassin

Теперь нам нужно сообщить postfix о необходимости использовать spamassassin. В нашем случае spamassassin будет вызываться только единожды, когда postfix завершит обработку письма.

Чтобы сообщить postfix использовать spamassassin, мы отредактируем файл /etc/postfix/master.cf и заменим строку:
smtp inet n - - - - smtpd
на:
smtp inet n - - - - smtpd
  -o content_filter=spamassassin
и затем в конец файла master.cf, добавим:
spamassassin unix - n n - - pipe
  user=spamd argv=/usr/bin/spamc -f -e
  /usr/sbin/sendmail -oi -f ${sender} ${recipient}
и наконец, наш фильтр спама настроен, нам осталось только перезагрузить настройки postfix и всё должно быть готово.
# /etc/init.d/postfix reload
4. Заключение

Это один из возможных способов настройки, который позволяет фильтровать спам с помощью spamassassin и postfix.

Существуют другие способы сделать то же самое (на которых я остановлюсь в другой раз), например воспользоваться amavis, который использует spamassassin без необходимости использовать демон spamassassin (spamd).

Представленный вариант по прежнему отправляет все письма их получателям (хотя кто-то вроде меня предпочитает их отклонять и выбрасывать письма, помеченные как спам). Можно настроить правило в своём почтовом или веб-клиенте, фильтруя все письма содержащие тему "[***** SPAM" и перемещая их в нужное место в клиенте, так что вы сможете легко отделить их от вашей ценной почты, но в конце концов, если они здесь, то вам незачем удалять их, потому что в спаме иногда попадаются действительно важные письма.

В конце концов, знаменитые почтовые провайдеры, такие как yahoo, google, hotmail ... поступают так, пусть и у вас будут каталоги "Спам" и "Письма".

Надеюсь, что кому-то помог.

Postfix и Postgrey: Проактивный способ фильтрации спама

Перевод статьи: Postfix and Postgrey: A proactive approach to spam filtering

Серый список - это ещё один способ избежать переполнения вашего почтового ящика спамом. Известная программа для борьбы со спамом - это spamassassin, который фильтрует письма. Серый список не пытается заменить такие программы, он работает как мощный проактивный барьер, который уменьшает общее количество спама, получаемое вашим почтовым сервером.

1. Введение

Серый список - это хороший способ борьбы со спамом, основная идея которого состоит в том, что почтовые серверы спамеров не соответствуют спецификации стандартов RFC. Главная мысль состоит в том, что почтовый сервер должен пытаться доставить письмо позже, если его не удалось доставить сразу. Отправляя одновременно много писем, спамеры не могут тратить так много ресурсов на повторную отправку писем, если письма не могут быть доставлены сразу. Поэтому если письмо не может быть доставлено с первого раза, они не пытаются отправить его снова.

Основываясь на этой идее, серый список просто отклоняет любое письмо из недоверенного домена, выдавая код ответа 450, который означает "Я не могу ответить на ваш запрос прямо сейчас, пожалуйста, попробуйте позже".

Поскольку почтовый сервер спамера обычно не соответствует RFC, он не будет повторять попытки и поэтому вы не получите спам.

2. Postgrey

2.1. Введение

Postgrey - это сервер политики postfix, реализующий серый список.

Он действительно легко интегрируется в postfix и действительно эффективен.

Postgrey хранит записи-триплеты: IP_КЛИЕНТА / ОТПРАВИТЕЛЬ / АДРЕСАТ. Если этот триплет появился впервые или он впервые появился менее 5 минут назад, запись помещается в серый список, а письмо отбрасывается с сообщением о временной ошибке. Если тот же триплет появится через 5 минут и до истечения 35 дней, то письмо будет принято.
Отметим, что 5 минут и 35 дней - это значения по умолчанию. Позже я объясню, как их можно поменять.
2.2. Установка

Для Postgrey существуют готовые пакеты в основной поставке Debian/Ubuntu, их очень легко установить. Вам просто нужно запустить:
$ sudo apt-get install postgrey
На системах подобных Debian, postgrey работает "из коробки". По умолчанию он привязывается к интерфейсу локальной петли (127.0.0.1) на порт 60000. Поэтому, служба postgrey не доступна снаружи.

Теперь, нам нужно сообщить postfix, что он должен использовать сервер политики postgrey.

3. Настройка postfix

Как было сказано ранее, интегрировать postgrey в postfix действительно просто (вам потребуется postfix версии 2.1 или выше). Все необходимые настройки вносятся в /etc/postfix/main.cf. Откройте /etc/postfix/main.cf и добавьте check_policy_service inet:127.0.0.1:60000 в конец smtpd_recipient_restrictions. У вас должно получиться что-то вроде этого:
smtpd_recipient_restrictions = permit_mynetworks,
  permit_sasl_authenticated,
  reject_unauth_destination,
  check_policy_service inet:127.0.0.1:60000
Отметим, что ваши настройки могут быть другими.
Перезагрузим postfix:
$ sudo /etc/init.d/postfix reload
и как только вы это сделаете, вы получите работающую политику серого списка и почтовый сервер postfix начнёт временно отклонять поступающие письма. Вы увидите:
Nov 23 21:42:10 mymailserver postfix/smtpd[4256]: NOQUEUE: reject: RCPT from 
spammerrelay.com[xxx.xxx.xxx.xxx]: 450 <recipient@spammed.com>: Recipient
address rejected: Greylisted for 300 seconds (see http://isg.ee.ethz.ch/tools
/postgrey/help/spammed.com.html); from=<sender@spammer.com>
to=<recipient@spammed.com> proto=ESMTP helo=<spammerrelay.com>
Начиная с этого момента общее количество спама, достигшее вашего почтового ящика кардинально уменьшится.

Теперь, тем кто хочет подстроить postgrey, настало время заглянуть в него немного глубже.

4. Подстройка Postgrey

4.1. Файлы настройки Postgrey

Есть два главных файла в каталоге /etc/postgrey: whitelist_clients и whitelist_recipients.

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

Адреса клиентов должны быть указаны одним из следующих способов:
  • domain.addr : полностью определённое доменное имя
  • WWW.XXX.YYY.ZZZ : IP-адрес
  • /regex/ : регулярное выражение
В файле whitelist_recipients (белый список адресатов), вы можете указать список адресатов, на которых не распространяется действие серого списка.

Адреса получателей можно указать одним из следующих способов:
  • domain.addr : полностью определённое доменное имя
  • имя@ : каждое "имя" пользователя для любого домена будет обрабатываться как расширенный адрес, например имя+нечто@.*
  • name@domain : письма для name@domain как расширенный адрес
  • /regex/ : регулярное выражение
4.2. Опции демона postgrey

Ранее я упомянул о том, что postgrey подвергает письмо фильтрации по серому списку на 5 минут, если его триплет IP_КЛИЕНТА / ОТПРАВИТЕЛЬ / ПОЛУЧАТЕЛЬ встретился первый раз или если последний раз триплет встречался больше, чем 35 дней назад.

Так вот, эти настройки могут быть изменены при запуске демона postgrey. На системах подобных Debian, эти настройки находятся в /etc/default/postgrey.

По умолчанию этот файл содержит:
POSTGREY_OPTS="--inet=127.0.0.1:60000"
Теперь представим, что вы хотите блокировать письма по серому списку на 2 минуты, и позволить известному триплету проходить через серый список, если он удачно преодолел политику серого списка менее чем 20 дней назад. Тогда вам нужно воспользоваться следующими настройками:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=20"
Также, postgrey предлагает приятную возможность, которая позволяет помещать в белый список те триплеты, для которых более 5 раз (значение по умолчанию) были успешно приняты письма после прохождения политики серого списка и если клиент последний раз встретился до истечения срока --max-age.

Значение по умолчанию можно изменить с помощью опции --auto-whitelist-clients. Установив его в 0, вы отключите эту возможность.

Если вы захотите заменить это значение указанными выше, измените файл /etc/default/postgrey и укажите в опции --auto-whitelist-clients необходимое значение, например:
POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=120 --max-age=20 --auto-whitelist-clients=10"
5. Получение отчётов от postgrey

Postgrey отправляет статистику с помощью утилиты postgreyreport. С помощью postgreyreport вы сможете получить отчёт о триплетах, которые не прошли серый список (означает, что разница между первым и последним разом, когда они встретились, меньше --delay=N и поэтому они могут быть спамом).

Для получения отчёта вы можете воспользоваться следующей командной строкой:
# cat /var/log/mail.log | postgreyreport \
  --nosingle_line --check_sender=mx,a --show_tries \
  --separate_by_subnet=":===============================================================================================\n"
Она выведет нечто вроде следующего:
:===============================================================================================
unknown XXX.XXX.XXX.XXX
1 spammer1@spammer1.com user1@host1.com
1 spammer2@spammer2.com user2@host2.com
1 spammer3@spammer3.com user3@host3.com
:===============================================================================================
unknown YYY.YYY.YYY.YYY
1 spammer4@spammer4.com user4@domain1.com
:===============================================================================================
unknown ZZZ.ZZZ.ZZZ.ZZZ
1 spammer5@spammer5.com user1@host1.com
1 spammer6@spammer6.com user1@host1.com
1 spammer7@spammer7.com user2@host2.com
:===============================================================================================
6. Заключение

Postgrey действительно просто установить и вы получаете очень эффективно работающую систему сразу после её включения. Обратной стороной медали является то, что первое письмо от конкретного отправителя дойдёт с задержкой по меньшей мере на 5 минут (или на значение, указанное вами в настройках --delay).

Если это является для вас проблемой, вы вольны добавить в белый список /etc/postgrey/whitelist_clients доверенные домены отправителей.

Но в любом случае, даже если вы готовы ждать 5 минут, люди, с которыми вы часто обмениваетесь письмами, скоро попадут в автоматически наполняемый белый список и вы больше не будете терпеть задержки.

четверг, 10 сентября 2009 г.

Настройка кэширующего DNS-сервера BIND в связке с resolvconf

Опять же на работе понадобилось настроить кэширующий DNS-сервер BIND так, чтобы DNS-запросы сначала передавались провайдерским DNS-серверам (forwarders) и только в случае, если они не доступны, выполнялось самостоятельное рекурсивное решение DNS-запросов. DNS-серверы прописывать прямо в конфиг BIND не хотелось, хотелось чтобы он подхватывал их от PPPoE-подключения и Ethernet-подключения.

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

Сначала поставим пакеты resolvconf и bind9:
# aptitude install resolvconf bind9
Пропишем в настройках Ethernet-интерфейса провайдера опцию dns-nameservers 81.30.199.5 81.30.199.94.
Соответствующий кусок файла /etc/network/interfaces будет выглядеть примерно так:
# ufanet
auto eth0
iface eth0 inet static
  address xx.xx.xx.250
  netmask 255.255.255.252
  #gateway xx.xx.xx.249
  dns-nameservers 81.30.199.5 81.30.199.94
Для получения адресов DNS-серверов от другого провайдера по протоколу PPPoE, в соответствующий этому провайдеру файл настроек /etc/ppp/peers/bis добавим опцию usepeerdns.

Теперь создадим шаблон для раздела опций BIND в файле /etc/bind/named.conf.options:
options {
  directory "/var/cache/bind/";

  forward first;

  forwarders { };

  listen-on {
    127.0.0.1;
    xx.xx.xx.250;
    10.3.0.0/18;
  };
};
Проверим, что в файле /etc/default/bind9 установлена переменная RESOLVCONF=yes. Если она принимает значение no, исправьте её на yes.

Если сейчас перезапустить BIND, то будет создан файл /var/run/bind/named.options, содержащий следующее:
// named.conf fragment automatically generated by /etc/resolvconf/update.d/bind
// DO NOT EDIT THIS FILE.  Instead edit /etc/bind/named.conf.options .
options {
  forwarders { 81.30.199.5; 81.30.199.94; 10.3.1.4; };
  directory "/var/cache/bind/";
  forward first;
  listen-on {
    127.0.0.1;
    xx.xx.xx.250;
    10.3.0.0/18;
  };
};
А в файле /etc/resolv.conf можно будет увидеть следующее:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
То есть видно, что при запуске BIND или изменении DNS-настроек отрабатывают сценарии resolvconf, которые соответствующим образом изменяют эти файлы.

Чтобы настройки BIND брались из файла /var/run/bind/named.options нужно прописать его подключение в файле /etc/bind/named.conf, заменив директиву
include "/etc/bind/named.conf.options";
на директиву
include "/var/run/bind/named.options";
Теперь можно перезапустить BIND и он будет встраиваться в систему решения DNS-запросов таким образом, как мы этого и хотели.

Настройка PPTP-сервера

На работе возникла необходимость под Linux настроить PPTP-сервер для Windows-клиентов. На всякий случай решил описать пример настройки.

Ставим ppp и pptpd:
# aptitude install ppp pptpd
Настраиваем сам сервер pptpd, прописывая в его конфигурационном файле /etc/pptpd.conf:
option /etc/ppp/pptpd-options
logwtmp
localip 10.3.17.1
remoteip 10.3.17.2-254
Опция localip задаёт IP-адрес на локальной стороне создаваемых туннелей, опция remoteip - задаёт соответственно диапазон IP-адресов, которые будут выдаваться клиентам, в качестве адресов с их стороны.

Настроим pppd для туннелей, поднимаемых сервером pptpd. Зададим настройки в файле /etc/ppp/pptpd-options:
10.3.17.1:
name pptpd
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-dns 10.3.1.3
ms-dns 10.3.1.4
ms-wins 10.3.1.4
ms-wins 10.3.1.5
nodefaultroute
lock
nobsdcomp
idle 900
Первая опция задаёт IP-адрес локальной стороны туннеля (почему-то настройка, указанная в /etc/pptpd.conf не действует).

Опция name pptpd задаёт имя сервера. Оно будет использоваться для поиска записей в файле паролей (см. ниже).

Опции refuse-pap, refuse-chap, refuse-mschap, require-mschap-v2 отклоняют различные способы аутентификации, требуя использовать только аутентификацию по MS-CHAPv2.

Опция require-mppe-128 указывает на необходимость шифрования передаваемых по туннелю данных с помощью протокола MPPE с длиной ключа 128 бит.

Опции ms-dns 10.3.1.3 и ms-dns 10.3.1.4 задают адреса DNS-серверов, которые будут сообщены подключившемуся клиенту.

Опции ms-wins 10.3.1.4 и ms-wins 10.3.1.5 задают адреса WINS-серверов, которые будут сообщены подключившемуся клиенту.

Опция nodefaultroute заставляет pppd не устанавливать маршрут по умолчанию через подключившегося клиента.

Опция lock создаёт файл блокировки интерфейса, который позволяет избежать попыток использовать этот интерфейс другими соединениями, пока он используется.

Опция nobsdcomp отключает сжатие потока данных по алгоритму BSD.

Опция idle задаёт количество секунд простоя, по истечении которых простаивающее соединение будет отключено.

Теперь нужно прописать клиентов в файле паролей /etc/ppp/chap-secrets:
elvira          pptpd   "111111"                10.3.17.23
#kon_sv         pptpd   "passwd"                *
igor            pptpd   "paroli"                10.3.17.28
Символ решётки говорит о том, что данная запись отключена (закомментирована).

Символ звёздочки говорит о том, что этому клиенту будет выдан любой свободный адрес из диапазона 10.3.17.2-254, который указан в настройках pptpd.

Клиентам, для которых указан IP-адрес в последней колонке, всегда будут выдаваться этот IP-адрес.

Теперь перезапускаем PPTP-сервер, чтобы настройки вступили в силу:
# /etc/init.d/pptpd restart
Если хочется выполнять какие-то специфические для PPTP-клиента команды, то можно создать сценарии /etc/ppp/ip-up.d/pptp-clients и /etc/ppp/ip-down.d/pptp-clients, шаблон для которых представлен ниже:
#!/bin/sh

case "$PPP_IPPARAM" in
  "pptp-clients")
    # ваши команды
  ;;
  *)
    echo "No PPP_IPPARAM defined"
  ;;
esac
Теперь в файле /etc/pptpd.conf нужно прописать опцию noipparam, которая заставит pptp-сервер не передавать в качестве ipparam IP-адрес, с которого было установлено подключение.

Чтобы отличать pptp-клиентов от других PPP-подключений, добавим опцию ipparam в файл /etc/ppp/pptpd-options:
ipparam "pptp-clients"
В случае если ipparam будет равен pptp-clients, выполнятся указанные для этого случая команды. Например таким образом можно настраивать разрешающие правила в фаерволле. В том числе можно делать дополнительные проверки, идентифицируя клиента по IP-адресу внутри тоннеля или по логину, с которым клиент подключился.

Другие источники информации по этой теме:
  1. Настройка PPTP-сервера в Debian/Ubuntu
  2. Русский перевод man pppd(8) - демон протокола точка-точка (Point-to-Point Protocol Daemon)
  3. Русский перевод man pptpd(8) - PPTP VPN-демон
  4. Русский перевод man pptpd.conf(5) - конфигурация PPTP VPN демона
Последняя правка: 22-09-2009