Archive for the ‘ BSD ’ Category

Настройка DHCP сервера в FreeBSD 8.2

Теперь у меня дома завелся шлюзик на FreeBSD. Давно хотелось поиграться с фрей в плане шлюза для домашнего инета — вот и решился наконец.
Поскольку в пользовании домашних домочадцев немеряно девайсов которым нужен инет, решено поднять DHCP сервак, так как настраивать сеть вручную на куче девайсов както лениво.
Итак, за дело!

Сначала обновим порты. Для этого я использовал стандартную приблуду portsnap:

[root@gw ~]# portsnap fetch
[root@gw ~]# portsnap extract
[root@gw ~]# portsnap update

Переходим в директорию с портом DHCP сервера:

[root@gw ~]# cd /usr/ports/net/isc-dhcp41-server/

И начинаем сборочку

[root@gw ~]# make config install clean

В опциях я выбрал только DHCP_PARANOIA так как поддержка IPv6 и LDAP мне ненужны.
После сборки отредактировал конфиг до состояния:

[root@gw /usr/ports/net/isc-dhcp41-server]# grep -v ^# /usr/local/etc/dhcpd.conf

option domain-name "124.local";
option domain-name-servers 192.168.1.1;
local-address 192.168.1.1;
authoritative;

default-lease-time 7200;
max-lease-time 14400;

log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.10 192.168.1.30;
option routers 192.168.1.1;
}

host black {
hardware ethernet 00:1c:99:9e:b7:43;
fixed-address 192.168.1.13;
}

[root@gw /usr/ports/net/isc-dhcp41-server]#

И настраиваем автозагрузку сервиса при старте сервера с помощью таких опций в /etc/rc.conf

dhcpd_enable="YES"
dhcpd_conf="/usr/local/etc/dhcpd.conf"
dhcpd_ifaces="re0"
dhcpd_withumask="022"
dhcpd_chuser_enable="YES"
dhcpd_withuser="dhcpd"
dhcpd_withgroup="dhcpd"
dhcpd_chroot_enable="YES"
dhcpd_devfs_enable="YES"
dhcpd_rootdir="/var/db/dhcpd"

После этого вручную запускаем сервис командой

[root@gw ~]# /usr/local/etc/rc.d/isc-dhcpd start

И еще настраиваем логирование в отдельный лог
в конец syslog-овского конфмга /etc/syslog.conf добавляем вот такие строчки

local7.* /var/log/dhcpd.log

После этого создаем файлик /var/log/dhcpd.log командой

[root@gw ~]# touch /var/log/dhcpd.log

Перезапускаем syslog

[root@gw ~]# /etc/rc.d/syslogd restart

Осталось настроить только log rotation для dhcpd.log
Это уже на свое усмотрение.

FreeBSD & ISP. Проблема SASL авторизации

На FreeBSD стоит ISP Manager в котором настроена почта для предприятия. В качестве MTA — Postfix. Все бы хорошо да только авторизация SMTP чегото нивкакую работать нехотела без галочки в MTU «Авторизироваться сначала на POP а потом на SMTP», которой почемуто нету в Thunderbird.
Если тундру настроить на простую авторизацию по паролю то отправка не проходит, а в логах сервера вижу:

Aug  5 11:40:23 srv postfix/smtpd[10934]: warning: SASL authentication failure: no user in db
Aug  5 11:40:23 srv postfix/smtpd[10934]: warning: SASL authentication failure: no user in db
Aug  5 11:40:23 srv postfix/smtpd[10934]: warning: SASL authentication failure: Password verification failed
Aug  5 11:40:23 srv postfix/smtpd[10934]: warning: firma.com.ua[62.24.38.12]: SASL PLAIN authentication failed: authentication failure
Aug  5 11:40:23 srv postfix/smtpd[10934]: warning: SASL authentication failure: no user in db
Aug  5 11:40:23 srv postfix/smtpd[10934]: warning: SASL authentication failure: no user in db
Aug  5 11:40:23 srv postfix/smtpd[10934]: warning: firma.com.ua[62.24.38.12]: SASL LOGIN authentication failed: authentication failure

Как это глобально исправить незнаю. Для конкретного пользователя нашел решение. В консоли ручками задаем пароль который задан на чтение почты через админку ISP:

[black@srv:~]$ sudo saslpasswd2 -c user@my-domain.com.ua

После задания корректного пароля — Thunderbird стал нормально авторизироваться по SMTP и почта стала отправляться на ура.
Глобальное решение пока ищем ….

Установка VTUN в OpenBSD 4.6

Сегодня нарисовалась задача создать VTUN тунель с одного из удаленных шлюзов в офис. На удаленном шлюзе стоит OpenBSD 4.6. Раз плюнуть, было моей первой мыслью …. но не тут то было!

Засада номер раз! Моему удивлению небыло предела, когда оказалось что ни в портах, ни в пакаджах нету VTUN! Да уж, дает о себе знать розбалованость линуксом, где в репозитариях всякого барахла десятками тысяч лежит 🙂 Ну мы же не из робкого десятка поэтому меня это не остановило! Полез с офсайта качать сырци и компилить … но вот незадача. На ./configure вываливалась ошибка что нету библиотек lzo. Собрал из OpenBSD-шных портов archives/lzo версии 1.08 — таже фигня! Не видит хедеров хоть ты тресни! Пришлось снести с помощью make deinstall установленную из портов версию и играться со скачаной последней версией исходников lzo-2.05 с офсайта и сборкой руцями с помощью make. На удивление они собрались с первого пинка без каких либо проблем.

После этого еще раз пробуем запустить make vtun-a командой:

root@gw:~/vtun-3.0.2# ./configure --with-lzo-headers=/usr/local/include/lzo/ --with-lzo-lib=/usr/local/lib/

И в таком варианте configure отработал без ошибок!

Но вторая засада ожидала меня на следующем же шагу!

На команду make install кричит:

root@gw:~/vtun-3.0.2# make install
gcc -g -O2  -I/usr/include/openssl -I/usr/include/ssl -I/usr/include/ssl -I/usr/include/ssl  -c main.c
main.c: In function `main':
main.c:63: error: `VTUN_CONFIG_FILE' undeclared (first use in this function)
main.c:63: error: (Each undeclared identifier is reported only once
main.c:63: error: for each function it appears in.)
main.c: In function `write_pid':
main.c:217: error: `VTUN_PID_FILE' undeclared (first use in this function)
*** Error code 1

Stop in /root/vtun-3.0.2 (line 92 of /usr/share/mk/sys.mk).
root@gw:~/vtun-3.0.2#

Читать полностью

Проблемка с правами после миграции на другой сервер ISP Manager-ом

После миграции на другой сервер ISP Manager-ом в почтовых логах то и дело появлялись строчки примерно такого содержания:

Jul 20 17:23:40 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:26:40 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:29:43 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:32:46 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:35:46 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:38:46 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:41:46 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:44:49 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:47:49 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:50:49 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)
Jul 20 17:54:07 server dovecot: POP3(mailuser@some.domain.ua): open(/home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log) failed: Permission denied (euid=1069(virtuser_1069) egid=1006(ISPUser) missing +r perm: /home/ISPUser/data/email/some.domain.ua/mailuser/mail/.imap/INBOX/dovecot.index.log)

В результате некоторых телодвижений в shell было выяснено что некорректно выставились права на домашние директории пользователям со старого сервера! Точнее неправильным был owner хомяка, группа стояла правильно! Для новосозданных все отлично, а со старыми лажа ….

Поскольку старых пользователей много и руками вбивать команду chown для каждого из них было совсем лениво — написал небольшой скриптик. Вот его содержание:

#!/usr/local/bin/bash
USERS=`ls /home/ISPUser/data/email/some.domain.ua`
for REAL_USER in $USERS
  do
    VIRTUSER=`grep "${REAL_USER}:" /etc/passwd |grep some.domain.ua |cut -d':' -f1`
    VIRTUSER_HOME=`grep "${REAL_USER}:" /etc/passwd |grep some.domain.ua |cut -d':' -f6`
    #   echo $VIRTUSER:ISPUser $VIRTUSER_HOME
    chown -R $VIRTUSER:ISPUser $VIRTUSER_HOME
done

Перед непосредственным использованием сего скриптика рекомендую сначала закоментить строчку с chown и разкоментить ту которая выше с echo — она показывает собственно что будет делать chown. Если ее вывод вас устраивает — возвращайте в изначальное состояние и используйте на здоровье 🙂
У меня скрипт отработал за несколько секунд, и полностью справился со своей задачей! Проблемка решена!

Осталось только пожелать удачных переездов 🙂

OpenBSD — Настраиваем Sendmail MTA в режиме Smart Relay

Статья из серии статей о настройке сервера для небольшого офиса на OpenBSD.

На этот раз коротко опишу о том как подымал MTA (Mail Transfer Agent, подробнее смотри тут) для своего офиссервера работающего на OpenBSD. Сначала стоит упомянуть некоторую предысторию, в результате которой, наш доблесный провайдер Cyfra, заблочил нам 25 порт целяком и полностью, оставив лиш небольшую «лазейку в мир» в виде своего SMTP сервака — smtp.uatele.com. Да собственно предистория то банальность в совершенном виде — поймался на одной из офисных машинок какойто троянчик mailware, который розсылал чего непопадя куда ему только вздумается. С ним конечно коекак пытался справиться SAV 10 — но получалось у него неахти как хорошо. Изза чего, как нам сказала техподдержка цифры, на нас накатали телег (полагаю, в письменном виде) несколько уважаемых в инете контор 🙂

Зараженная машинка в таком вот виде проработала всегото с полдня, наверное — но выход в инет по 25-му порту нам таки заблочили 🙁 Ну да фигня то все! Остался цифровский SMTP — через него можно слать 🙂

Итак, начальные данные такие:

  • Шлем через SMTP провайдера — в нашем случае smtp.uatele.com
  • Необходимо учесть что у сервера smtp.uatele.com есть свои ограничения:
  1. Максимальные размер письма — 8 Метров
  2. Максимальное количество получателей — 15 человек
  • «Слушаем» только на внутресетевом интерфейсе сервера
  • Настроить автозапуск MTA при старте системы

Вроде все! Вперед 🙂

MTA по умолчанию в OpenBSD является Sendmail. По умолчанию значит что он идет в стандартной поставке дистра. Первым что я подумал, когда узнал об этом, было нечто такое: «Этот поросший мхом MTA годится только для пугания одминов-новичков своими конфигами и логами — и больше ниначто!». Но всетаки решил покрутить его для успокоения совести, мол все равно ничего с ним не получится — в итоге поставлю чтото более удобоваримое. Но поглядев в умолчательный конфиг, с удивлением обнаружил, что он какбудто под меня скроен. Задача то у меня совсем тривиальная — такчто править пришлось всегото пару-тройку строчек! И результат для тестирования получился уже спустя полчасика. Вот несколько движений которые сделал я для настройки под свою задачку Sendmail:

Идем в /usr/share/sendmail/cf — именно там лежат заготовочки на все случаи жизни 🙂

root@gw:~ # cd /usr/share/sendmail/cf/

Тут лежат примеры конфигов под разные задачи. Все они доступны только для чтения. Мне понравился конфиг openbsd-proto.mc — поэтому решил использовать его. Сначала сделал его доступным для редактирования коммандой:

root@gw:/usr/share/sendmail/cf# chmod u+w openbsd-proto.mc

После этого открываем конфиг для редактирования (я для этой цели использую ранее установленный vim)

root@gw:/usr/share/sendmail/cf# vim openbsd-proto.mc

С самого начала файла, после опции OSTYPE идет настройка SMART_HOST — это какраз то что нам нужно прописать чтобы наш mail-server отправлял поступающую ему почту через сервер провайдера. Поэтому розкомментируем ее и вписываем SMTP сервер провайдера. У меня вышло так:

OSTYPE(openbsd)dnl
dnl
dnl If you have a non-static IP address you may wish to forward outgoing mail
dnl through your ISP's mail server to prevent matching one of the dialup
dnl DNS black holes.  Just uncomment the following line and replace
dnl mail.myisp.net with the hostname of your ISP'
s mail server.
dnl
define(`SMART_HOST', `smtp.uatele.com')dnl
dnl

Теперь идем ниже до строчки которая начинается опцией DAEMON_OPTIONS — тут указывается где наш MTA будет слушать подключения клиентов. В умолчательном конфиге указан адрес 0.0.0.0 для IPv4 клиентов и :: для IPv6. И еще какието строчки непонятные, короче всего 4 — вот так они выглядят по умолчанию:

DAEMON_OPTIONS(`Family=inet, Address=0.0.0.0, Name=MTA')dnl
DAEMON_OPTIONS(`Family=inet6, Address=::, Name=MTA6, M=O'
)dnl
DAEMON_OPTIONS(`Family=inet, Address=0.0.0.0, Port=587, Name=MSA, M=E')dnl
DAEMON_OPTIONS(`Family=inet6, Address=::, Port=587, Name=MSA6, M=O, M=E'
)dnl

Нам же нужно заставить sendmail слушать только 127.0.0.1 и внутресетевой интерфейс ip которого 192.168.100.2. Поэтому я из этих четырех строчек сделал 2 те что мне надо — получилось вот так:

DAEMON_OPTIONS(`Family=inet, Address=192.168.100.2, Port=25, Name=MTA')dnl
DAEMON_OPTIONS(`Family=inet, Address=127.0.0.1, Port=25, Name=MTA'
)dnl

Ниже еще есть опция где можно прописать сеть клиентов которым разрешено подключаться. Вот что по умолчанию:

dnl Use either IPv4 or IPv6 for outgoing connections.
dnl
CLIENT_OPTIONS(`Family=inet, Address=0.0.0.0')dnl
CLIENT_OPTIONS(`Family=inet6, Address=::'
)dnl
dnl

Тоесть розрешено всем как IPv6 так и IPv4 адресам. Но у меня sendmail должен обслуживать только IPv4 сеть, такчто я исправил на такое:

dnl Use either IPv4 or IPv6 for outgoing connections.
dnl
CLIENT_OPTIONS(`Family=inet, Address=0.0.0.0')dnl
dnl CLIENT_OPTIONS(`Family=inet6, Address=::'
)dnl
dnl

И в конце файла (где закончились строки начинающиеся с dnl) добавил опцию ограничения максимального размера сообщения и максимального количества получателей:

dnl
dnl Max Message Size dnl
define(`confMAX_MESSAGE_SIZE', `8000000')
dnl Max Recipients per Message dnl
define(`confMAX_RCPTS_PER_MESSAGE', `15')
dnl Enforce valid Message-Id to help stop spammers.
dnl

Стоит заметить что размер указан в байтах, такчто реально 8000000 меньше чем 8M 🙂

Вот и все! Проще не придумаеш 🙂 Теперь этот конфиг нужно собрать. Для этого используется стандартная приблуда — make

Делается в этой же директории примерно так (указанием цели сборки служит имя файла конфигурации sendmail с разширением cf):

root@gw:/usr/share/sendmail/cf# make openbsd-proto.cf

В результате успешной работы этой команды у вас появится тут же готовый конфиг для sendmail с названием openbsd-proto.cf

Я переместил его в директорию /etc/mail и обозвал office.cf

root@gw:/usr/share/sendmail/cf# mv openbsd-proto.cf /etc/mail/office.cf

На этом настройку и сборку главного конфига Sendmail MTA считаю законченой для своей задачи 🙂

Теперь осталось разобраться с запуском sendmail. На самом деле розбираться тут особо нечего — просто запускаем из рутовой консоли командой:

root@gw:~ # sendmail -L sm-mta -C/etc/mail/office.cf -bd -q30m

И тоже самое добавляем в /etc/rc.conf.local для автоматического старта sendmail во время загрузки системы:

root@gw:~ # grep -i sendmail /etc/rc.conf.local

sendmail_flags="-L sm-mta -C/etc/mail/office.cf -bd -q30m"

Ну вот и автозапуск sendmail одолели!

Пробуем настроить любимый Mail-клиент на одном из компов внутрисети. Данные POP3/IMAP используем любого доступного/нужного mail-сервера, а вот в качестве SMTP-сервера прописываем свой 192.168.100.2. Принимать смог сразу, а вот с отправкой лажа — ошибка 550 (Relaying Denied!) 🙂 Эта ошибка вполне предсказуема. Нужно просто подправить файлик /etc/mail/access до такого вида:

root@gw:~# cat /etc/mail/access
# $OpenBSD: access,v 1.1 2003/09/23 21:37:11 millert Exp $
#
# sendmail(8) access database.  Rebuild by running as root:
#   makemap hash /etc/mail/access < /etc/mail/access
#
# See /usr/share/sendmail/README for a description of this file
# under the "access_db" feature.
#
192.168.100     RELAY
root@gw:~#

Тоесть просто добавляем в конец строчку 192.168.100     RELAY которая розрешает релейную передачу писем через наш сервер из сети 192.168.100.0/24

Обновить базу данных access можно и нужно командой:

root@gw:/etc/mail# makemap hash /etc/mail/access < /etc/mail/access

После этого необходимо передернуть сэндмыло:

root@gw:/etc/mail# kill -HUP `head -1 /var/run/sendmail.pid`

Теперь все что мы задумали — должно работать как надо. Сразу после запуска — не стесняемся! Тестим по полной программе! Про себя могу сказать — работает уже полгода без нареканий как с моей, так и со стороны пользователей 🙂

Всем удачи — и поменьше спама в MTA!!!

Установка и настройка Apache + MySQL-Server + PHP5 в OpenBSD

Чегото захотелось мне посмотреть как будет работать Drupal на OpenBSD. Даже незнаю с чего бы это … но всеже! Захотелось так захотелось. Темболее что задача нетакая уж сложная 🙂  Итак, вперед в консоль и с песней в колонках!

Для начала надо настроить apache потом php5, потом mysql-server ну и потом уже поставить Drupal на всю эту связку.

Начнем сначала:

apache — версия 1.3 поставляется с OpenBSD по дефолту, тоесть в системе он уже есть, надо только уговорить его запускаться. Для этого добавляем запись такого вида в /etc/rc.conf.local:

root@openek:~# echo 'httpd_flags=""' >> /etc/rc.conf.local
root@openek:~#

Все! При следующей загрузке у нас стартонет apache автоматом. Имейте также в виду что по умолчанию он будет chroot-иться в /var/www — не забывайте что мы попали в консоль системы где все секюрно от рождения. Главное не нарушить гармонию безопасности этого точно слаженного организма своими шальными рученками 😉 . Едем дальше!

php5 — можно поставить из пакетов или собрать самому. Машинка мне для экспериментов перепала неособо шустрая — поэтому решил ставить из пакетов (чтобы полдня не ждать пока соберется 🙂 ) Сделал вот так:

root@openek:~# pkg_add php5-core

В ответ на это через минуту получил ответ что мол пакет установлен, а для того чтобы php5 заработал в apache2 надо создать такой вот симлинк (я сделал именно так):

root@openek:~# ln -sf /var/www/conf/modules.sample/php5.conf /var/www/conf/modules/php5.conf

Учитывая что apache у нас работает в chroot /var/www и то что для работы с upload фалами PHP нужна директория tmp нужно ее создать. Делается очень просто:

root@openek:~# mkdir /var/www/tmp

И роздаем права 777 на нее:

root@openek:~# chmod 777 /var/www/tmp

В итоге после перезагрузки получил работающие apache и php5 🙂 В чем убедился используя простенький php скриптик который сделал вот так:

root@openek:~# echo '<?php phpinfo(); ?>' > /var/www/htdocs/test.php

После чего перешел браузером lynx по ссылке http://127.0.0.1/test.php вот так:

root@openek:~# lynx http://127.0.0.1/test.php

и увидел кучу инфы про php и apache. Короче работает! Совсем же просто 🙂 Аж поражает 😀

Дальше занялся базой данных.

mysql-server — поставил тоже из пакетов командочкой:

root@openek:~# pkg_add -v -i mysql-server

Рекомендации о том что делать после установки даны в файле /usr/local/share/doc/mysql/README.OpenBSD

Я не особый спец по части баз данных — поэтому сделал как там написано. Сначала утсановил дефолтную базу выполнив:

root@openek:~# /usr/local/bin/mysql_install_db

После этого рекомендуют настроить mysql — и главный конфиг для этого дела /etc/my.cnf Я там особо ничего не трогал — только поправил чтобы mysqld слушал подключения на 127.0.0.1 и путь к сокету 🙂
Важно!!!
Если хотим чтобы apache так и запускался в chroot /var/www то нужно изменить путь к сокету mysql-server (не исключаю возможность отделаться sym/hard линком — но у меня этот трюк не получился).
Для этого исправил вот этот кусочек в файле /etc/my.cnf :

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/run/mysql/mysql.sock

на вот такое …. точнее добавил четкое указание где слушать подключения (bind-address) и поменял путь к сокету для того чтобы apache мог спокойно работать в chroot напару с mysql-server

# The MySQL server
[mysqld]
bind-address  = 127.0.0.1
port          = 3306
socket        = /var/www/var/run/mysql/mysql.sock

Дальше (опять же все по доке) добавил в конец файла /etc/login.conf такие строчки:

mysql:\
    :openfiles-cur=1024:\
    :openfiles-max=2048:\
    :tc=daemon:

После этого выполнил от рута:

root@openek:~# cap_mkdb /etc/login.conf

И, наконец, добавил такие строчки в /etc/rc.local для автозапуска mysql-server при загрузке системы:

if [ -x /usr/local/bin/mysqld_safe ] ; then
 su -c mysql root -c '/usr/local/bin/mysqld_safe > /dev/null 2>&1 &'
 echo -n ' mysql-server'
fi

Ну и для того чтобы связать php5 и MySQL конечно же нужен пакетик php5-mysql. Ставим из пакетов:

root@openek:~# pkg_add -v -i php5-mysql
parsing php5-mysql-5.2.10
Dependencies for php5-mysql-5.2.10 resolve to: mysql-client-5.0.83, php5-core-5.2.10
found libspec lib/mysql/mysqlclient.19.0 in package mysql-client-5.0.83
found libspec m.5.0 in /usr/lib
found libspec stdc++.47.0 in /usr/lib
php5-mysql-5.2.10: complete
--- php5-mysql-5.2.10 -------------------
You can enable this module by creating a symbolic
link from /var/www/conf/php5.sample/mysql.ini to
/var/www/conf/php5/mysql.ini.

ln -fs /var/www/conf/php5.sample/mysql.ini \
/var/www/conf/php5/mysql.ini

root@openek:~#

И для того чтобы заставить работать php5-mysql делаем как нас просят:

root@openek:~# ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini

После этого я перезагрузил машинку командой

root@openek:~# shutdown -r now

Ну вот связка Apache + PHP5 + MySQL готова принимать мой любимый CMS Drupal 🙂

В процессе установки Drupal-овский интсаллер порекомендовал поставить еще и php5-mbstring. Опять же поставил без особых трудностей из пакетов. Вот так:

root@openek:~# pkg_add -v -i php5-mbstring

Потом сделал симлинк для того чтобы включить модуль в PHP5

root@openek:~# ln -fs /var/www/conf/php5.sample/mbstring.ini /var/www/conf/php5/mbstring.ini

И наконец, перегрузил apache для того чтобы применить изминения 🙂

root@openek:~# apachectl restart

Дальше можно просто устанавливать Drupal. Как это делается — прекрасно описано в INSTALL.txt файле который есть в архиве с Drupal — такчто розписывать установку самомго CMS — нету смысла.

P.S. Данная статья сгодится также любому кто захочет подготовить сервер к установке таких web-движков как WordPress, Joomla, DLE и тд.

Дерзайте! Всем удачи 🙂

OpenBSD — Настраиваем named в режиме Forwarding

Все что нам нужно для нормальной работы named в OpenBSD присутствует сразу после установки. Ничего я не доустанавливал — только чуток подправил конфиг «под себя» и named заработал как миленький 🙂

Сразу оговорюсь, что нужды у меня были весьма скромные — просто заставить работать named в режиме forwarding на DNS-сервера провайдера (в данном случае Cyfra).

Все что касается named в OpenBSD находится в директории /var/named. Переходим под root и идем туда:

root@gw:~# cd /var/named/
root@gw:/var/named#

Теперь смотрим что у нас тут есть:

root@gw:/var/named# ls -l
total 24
drwxr-xr-x  2 root  wheel  512 Mar 17 18:52 dev
drwxr-x---  2 root  named  512 Feb 14 00:16 etc
drwxr-xr-x  2 root  wheel  512 Jul 10  2009 master
drwxrwxr-x  2 root  named  512 Jul 10  2009 slave
drwxr-xr-x  2 root  wheel  512 Jul 10  2009 standard
drwxrwxr-x  2 root  named  512 Jul 10  2009 tmp
root@gw:/var/named#

Думаю понятно каждому что для настройки named надо идти в директориб etc — так и делаем:

root@gw:/var/named# cd etc/
root@gw:/var/named/etc#

Смотрим что за конфиги у нас тут есть:

root@gw:/var/named/etc# ls -l
total 28
-rw-r-----  1 root  named  1561 Jul 10  2009 named-dual.conf
-rw-r-----  1 root  named  1348 Jul 10  2009 named-simple.conf
-rw-r-----  1 root  named  1472 Feb 14 00:15 named.conf
-rw-r-----  1 root  named    77 Jan 16 09:35 rndc.key
-rw-r--r--  1 root  wheel  3002 Jul 10  2009 root.hint
root@gw:/var/named/etc#

Итак видим главный конфиг — named.conf Открываем его для редактирования любимым редактором, мне нравится vim:

root@gw:/var/named/etc# vim named.conf

И добавляем то что нам нужно для того чтобы named смог:

  • работать в режиме forwarding
  • принимал запросы от нашего сервера и клиентов из внутрисети

У меня после внесенных правок конфиг приобрел такой вид:

root@gw:/var/named/etc# cat named.conf
// $OpenBSD: named-simple.conf,v 1.9 2008/08/29 11:47:49 jakob Exp $
//
// Example file for a simple named configuration, processing both
// recursive and authoritative queries using one cache.

// Update this list to include only the networks for which you want
// to execute recursive queries. The default setting allows all hosts
// on any IPv4 networks for which the system has an interface, and
// the IPv6 localhost address.
// Для удобства создаем группу в которую входит сам сервер и клиенты внутрисети
acl clients {
127.0.0.1;
192.168.100.0/24;
};

options {
version "";     // Удаляем данные об версии named в ответах

listen-on    { 192.168.100.2; 127.0.0.1; }; // "слушаем запросы" только тут
listen-on-v6 { none; }; // Отрубаем IPv6

empty-zones-enable yes;
allow-query { clients; }; // Розрешаем запросы для нашей группы clients
allow-recursion { clients; }; // Розрешаем рекурсивные запросы для clients
forward first; // Запросы перенаправляем на DNS сервера провайдера Cyfra
forwarders { 62.80.160.130; 62.80.160.140; }; // Cyfra-вские DNS - servers
};

logging {
category lame-servers { null; };
};

// Standard zones
//
zone "." {
type hint;
file "etc/root.hint";
};

zone "localhost" {
type master;
file "standard/localhost";
allow-transfer { localhost; };
};

zone "127.in-addr.arpa" {
type master;
file "standard/loopback";
allow-transfer { localhost; };
};

zone "0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" {
type master;
file "standard/loopback6.arpa";
allow-transfer { localhost; };
};

include "/etc/rndc.key";

// Master zones
//
//zone "myzone.net" {
//      type master;
//      file "master/myzone.net";
//};

// Slave zones
//
//zone "otherzone.net" {
//      type slave;
//      file "slave/otherzone.net";
//      masters { 192.0.2.1; [...;] };
//};
root@gw:/var/named/etc#

Чтобы управлять named-ом с помощью утилитки rndc — необходимо вставить такой вот код в конфиг:

include "/etc/rndc.key";

Иначе rndc будет ругаться на отсутствие ключа.

С настройкой закончили 🙂 Ну какбы! Непомешает и проверить правильность конфига. Для проверки конфига named есть специальный скриптик — named-checkconf. Использовать его очень просто:

root@gw:~# named-checkconf /var/named/etc/named.conf
root@gw:~#

Если в ответ на такую команду тишина — значит все путем, конфиг не содержит синтаксических ошибок и может быть использован. Это не означает что он будет работать так как вы задумали, но дает уверенность что named с ним запустится 🙂

Запускаю named командочкой:

root@gw:/var/named/etc# named -4

Для того чтобы он автоматически запускался при старте сервера добавляем в /etc/rc.conf.local такую строчку:

root@gw:/var/named/etc# grep -i named /etc/rc.conf.local
### Enable Named ###
named_flags="-4"
root@gw:/var/named/etc#

Вот и все 🙂 Как видите — проще простого. Работает исправно и стабильно — пока глюков не наблюдал 🙂

Всем удачи!

Настройка PF — nat + firewall

Статья из серии статей о настройке сервера для небольшого офиса на OpenBSD.

Захотелось вот настроить на старенькой машинке маршрутизатор для небольшой дружественной компании. Парк машин (читай, количество клиентов) около 20-30 штук. Такчто особой вычислительной мощи от компа и не требуется. Конечно же вопрос о выборе системы тоже обдумывался. Самым весомым аргументом в выборе было личное любопытство к пакетному фильтру PF. Вот чтото захотелось мне его пощупать. Много всякого слышал о pf, кто хвалит, кто ругает … почитал немного в инете разные тематические форумы, посмотрел как люди делают … и тд.- вот и загорелся желанием и сам опробовать в действии сей продукт. Да и начальник о pf лестно отзывался — мол просто настраивается и работает стабильно. Ну ладно, раз так — значит буду пробовать! Но тут еще засада с выбором OS, pf то есть в нескольких операционках! Точнее во всех семейства BSD 🙂 Правда, после того как я узнал что PF был разработан как сетевой фильтр именно для OpenBSD, выбор был сделан именно в пользу опёнка.
Как, что и куда крутить — инфы в инете скопилось навалом. Но всеже с самого начала очень рекомендую почитать на официальном сайте OpenBSD очень хорошее FAQ по PF Львиная часть, кстати, на русском 🙂 Почитали? Тогда начнемс!

Итак, что имеем вначале:

  • весьма скромная железка в духе Celeron 1GHz, RAM 256M, HDD 40G
  • установил на нее OpenBSD 4.6 — тоесть с OS тоже понятно 🙂
  • набор политик безопасности
  • соображения по обеспечению оптимальной работы с каналом internet
  • машину внутри сети с windows для которой нужны будут некоторые «плюшки»
  • желание разобраться с новым для меня инструментом — PF

Для простоты изложения назову основных участников конфигурации:

gw — наш сервер с OpenBSD
win2k3 — виндосервер внутри сети на который админам надо дать доступ из инета
clients — остальные клиенты внутри сети
admins — ip или DNS адреса машин админов (дом/работа) которым нужен доступ на gw
Что хотим получить:

— Политики:

  • «натим» только нужные нам протоколы — tcp,udp,icmp
  • по smtp пускаем общаться с сервером провайдера только gw и win2k3
  • по smtp clients могут общаться только с gw
  • для admins необходимо пробросить RDP и VNC порты на win2k3
  • максимально закрыться от доступа со стороны internet
  • подбирающих пароли к ssh  — банить (желательно средствами pf)
  • предусмотреть защиту от DDoS

— Некоторые соображения по оптимизации работы всех клиентов с каналом доступа в internet:

необходимо настроить QoS для того чтобы, при всем желании один или пара клиентов, не смогли «занять весь канал» закачкой какогото фильма, не давая остальным отправить/почитать почту.

Главный конфигурационный файл pf в OpenBSD находится обычно тут: /etc/pf.conf

Вот что я туда накалякал:

root@gw:~# cat /etc/pf.conf
#
# Remember to set net.inet.ip.forwarding=1 and/or net.inet6.ip6.forwarding=1
# in /etc/sysctl.conf if packets are to be forwarded between interfaces.
INET_IF = "tun0"
LAN_IF = "rl0"
NAT_PROT = "{tcp, udp, icmp}"
WIN_2K3 = "192.168.0.10"
CYFRA_SMTP = "smtp.uatele.com"
ICMP_TYPE = "{echoreq, unreach}"
####   <== We need some Tables ==> ####
table <admins> const {99.55.66.22, 66.44.88.22, 93.51.57.66}
table <rfc1918> const {127.0.0.0/8, 192.0.2.0/24, 172.16.0.0/12, 169.254.0.0/16, 0.0.0.0/8, 240.0.0.0/4}
table <bruteforce> persist

set skip on lo0         # Skip All Rules For lo Interface
set block-policy return # Policy for icmp
set timeout { frag 10, tcp.established 3600 } # timeout policy for TCP sessions
set loginterface $INET_IF
set loginterface $LAN_IF

altq on $INET_IF cbq bandwidth 4Mb queue \
{ main, smtp, admin, ssh, ack, icmp }
  queue main  bandwidth 63% priority 2 cbq(default borrow red)
  queue smtp  bandwidth 10% priority 3 cbq(borrow red)
  queue admin bandwidth 8%  priority 4 cbq(borrow red)
  queue ssh   bandwidth 8%  priority 5 cbq(borrow red)
  queue ack   bandwidth 6%  priority 6 cbq(borrow red)
  queue icmp  bandwidth 4%  priority 0 cbq
#altq on $INET_IF bandwidth 960Kb hfsc queue { ack, dns, admin, ssh, main, mail, icmp }
#  queue ack        bandwidth 30% priority 8 qlimit 500 hfsc (realtime 20%)
#  queue dns        bandwidth  5% priority 7 qlimit 500 hfsc (realtime  5%)
#  queue admin      bandwidth 10% priority 6 qlimit 500 hfsc (realtime  7%)
#  queue ssh        bandwidth 10% priority 6 qlimit 500 hfsc (realtime 10%) {ssh_login, ssh_bulk}
#   queue ssh_login bandwidth 50% priority 6 qlimit 500 hfsc
#   queue ssh_bulk  bandwidth 50% priority 5 qlimit 500 hfsc
#  queue main       bandwidth 30% priority 5 qlimit 500 hfsc (realtime 20% default)
#  queue mail       bandwidth 10% priority 3 qlimit 500 hfsc (realtime  5%)

#  queue icmp       bandwidth  5% priority 2 qlimit 500 hfsc (realtime  5%)
##### <== Main Rule For NAT ==> #####
nat on $INET_IF proto $NAT_PROT from $LAN_IF:network to any -> ($INET_IF)

##### <== Redirect VNC and RDP to WIN2K3 ==> #####
rdr pass on $INET_IF proto tcp from  to ($INET_IF) port {5900, 3389} -> $WIN_2K3
#####<== By Default Block All ==> #####
block log on { $INET_IF, $LAN_IF } all
#block in quick log from urpf-failed                             # PF Spoofing proteCt!!!
#antispoof log quick for { lo0, $INET_IF, $LAN_IF } inet # PF Spoofing protect IPv4
block log quick from <bruteforce>                              # Block ssh bruteforcers

##### <== Block Not Routable  Networks ==> #####
block drop in quick log on $INET_IF from <rfc1918> to any
block drop out quick log on { $INET_IF , $LAN_IF } from any to <rfc1918>

##### <== For Redirected Ports ==> #####
pass out quick on $LAN_IF proto {tcp,udp} from <admins> to $WIN_2K3 port {5900, 3389}
##### <== Rules for 25 PORT ==> #####
pass in quick log on $LAN_IF inet proto tcp from $WIN_2K3 to $CYFRA_SMTP port 25 queue (smtp, ack)
pass in quick log on $LAN_IF inet proto tcp from $LAN_IF:network to $INET_IF port 25 queue (smtp, ack)
pass in quick log on $INET_IF inet proto tcp from { $CYFRA_SMTP <admins> } to $INET_IF port 25 queue (smtp, ack)
block in quick log on $LAN_IF inet proto tcp from any to ! $LAN_IF port 25
block out quick log on $INET_IF proto tcp from $INET_IF to ! $CYFRA_SMTP port 25
##### <=== For LanNetwork ===> #####
pass in on $LAN_IF from $LAN_IF:network to any
##### <=== For PFStat ===> #####
pass in on $INET_IF inet proto tcp from <admins> to port 80 queue (admin, ack)
##### <=== VPN RULES ===> #####
pass in on $INET_IF inet proto tcp from <admins> to port pptp queue (admin, ack)
pass in on $INET_IF proto gre from <admins> to any queue (admin, ack)
pass out on $LAN_IF inet from 192.168.0.200/30 to $LAN_IF:network queue (admin, ack)
pass out on $LAN_IF inet from tun to $LAN_IF:network
##### <== SSH RULES ==> #####
pass in quick on $INET_IF inet proto tcp from <admins>  to $INET_IF port 22 queue (ssh, ack) modulate state
pass in on $INET_IF inet proto tcp from any to $INET_IF port 22 queue (ssh, ack) synproxy state \
(max-src-conn 10, max-src-conn-rate 5/30, overload <bruteforce> flush global)

##### <== Pass OUT ==> #####
pass out on $INET_IF inet to any queue (main, ack) modulate state
##### <== Pass ICMP ==> #####
pass log inet proto icmp all icmp-type $ICMP_TYPE queue icmp
root@gw:~#

Понятие о том что здесь написано приходит после прочтения FAQ по PF . А вообще, благодаря очень простому синтаксису и принципу работы, правила pf читаются очень легко 🙂

Более подробно остановлюсь, разве что, на ssh правилах. Последнее время розвелось много всяких паскудных ботов, которые подбирают пароли для входа по всему чем можно войти 😀 Приходится както защищаться от километровых failed — ов в логах 🙂 Вот один из вариантов для ssh:

#####<== SSH RULES ==> #####
pass in quick on $INET_IF inet proto tcp from <admins>  to $INET_IF port 22 queue (ssh, ack) modulate state
pass in on $INET_IF inet proto tcp from any to $INET_IF port 22 queue (ssh, ack) synproxy state \
(max-src-conn 10, max-src-conn-rate 5/30, overload  flush global)

Первое правило — пропускаем тех кто в таблице admins без всяких там приколов.

Второе — пропускаем из инета на порт 22 всех но с ограничениями:

  • max-src-conn 10 — не более 10 state с одного ip
  • max-src-conn-rate 5/30 — не более 5 соединений в течении 30 секунд

Все кто превысил данные лимиты, помещаются в таблицу bruteforce и блокируются правилом

block log quick from <bruteforce>             # Block ssh bruteforcers

Для очистки этой таблицы использую такую вот командочку, которую засунул в cron и выполняю раз в час:

admin@gw:~$ sudo crontab -l |grep -i brute
#### <- For clean entries from table SSH BRUTEFORCES older than 1 hour ! -> ####
59      *       *       *       *       /sbin/pfctl -t bruteforce -T expire 86400
admin@gw:~$

В процессе отладки наш лучший друг, товарищ и брат — tcpdump, который может слушать как реальные интерфейсы, так и интерфейс pflog0 на котором видно те пакеты, которые логируются (слово log в правиле какраз для этого). Использование снифера с такими опциями:

root@gw:~# tcpdump -n -e -ttt -i pflog0
tcpdump: listening on pflog0, link-type PFLOG
Mar 16 22:12:22.963961 rule 1/(match) block in on rl0: 0.0.0.0.68 > 255.255.255.255.67: xid:0x52525230 secs:39663 flags:0x8000 [|bootp] [ttl 1]
^C
1 packets received by filter
0 packets dropped by kernel
root@gw:~#

очень информативно рассказывает о судьбе пакетов. В данном примере мы видим что пакет заблочен (block) первым правилом (rule 1) на внутресетевом интерфейсе (rl0) ну и source/destination пакета — 0.0.0.0.68 > 255.255.255.255.67 (в конце после четвертого октета, после точки, показан номер порта источника/назначения соответственно)

Ну вот какбы и все 🙂 Пакетики натятся, клиенты довольные сидят в инете 🙂 А админы пьют пиво и закусывают рыбкой …. все удачи!

Соединяем сети между Debian и OpenBSD средствами OpenVPN

Без всяких вступлений и тп перейду сразу к делу! Соединяю 2 маршрутизатора. Один под управлением OpenBSD 4.6, а второй с Debian Lenny.
Задача:
увидеть внутреннюю сеть за сервером OpenBSD

Настройки сети на OpenBSD:

root@openek:~# ifconfig
lo0: flags=8049 mtu 33200
priority: 0
groups: lo
inet 127.0.0.1 netmask 0xff000000
inet6 ::1 prefixlen 128
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
xl0: flags=8843 mtu 1500
lladdr 00:50:04:00:44:8d
description: INET
priority: 0
groups: egress
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet6 fe80::250:4ff:fe00:448d%xl0 prefixlen 64 scopeid 0x1
inet 10.0.1.111 netmask 0xffffff00 broadcast 10.0.1.255
nfe0: flags=8843 mtu 1500
lladdr 00:13:8f:9a:c4:52
description: LAN
priority: 0
media: Ethernet autoselect (100baseTX full-duplex)
status: active
inet 192.169.100.2 netmask 0xffffff00 broadcast 192.169.100.255
inet6 fe80::213:8fff:fe9a:c452%nfe0 prefixlen 64 scopeid 0x2
enc0: flags=0<> mtu 1536
priority: 0
pflog0: flags=141 mtu 33200
priority: 0
groups: pflog
root@openek:~#

За OpenBSD есть клиенты, тестить будем на некоем 192.169.100.10 — тоесть всеми силами пытаемся попасть в сетку 192.169.100.0/24 и в частности …. проверить работоспособность соединения на некоей внутресетевой машине 192.169.100.10

Убедимся что машинка видна с OpenBSD сервера:

root@openek:~# ping 192.169.100.10
PING 192.169.100.10 (192.169.100.10): 56 data bytes
64 bytes from 192.169.100.10: icmp_seq=0 ttl=128 time=0.282 ms
64 bytes from 192.169.100.10: icmp_seq=1 ttl=128 time=0.287 ms
64 bytes from 192.169.100.10: icmp_seq=2 ttl=128 time=0.261 ms
--- 192.169.100.10 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.261/0.276/0.287/0.022 ms
root@openek:~#

Итак, подготавливаем все необходимое для создания VPN на OpenBSD.

  • конечно же должно быть включено forwarding …. на всяк случай проверяем:
root@openek:/etc/openvpn# sysctl |grep forward
net.inet.ip.forwarding=1
net.inet.ip.mforwarding=0
net.inet6.ip6.forwarding=0
net.inet6.ip6.mforwarding=0
root@openek:/etc/openvpn#

Если не включено (net.inet.ip.forwarding=0) то разкомментировать эту опцию в /etc/sysctl.conf  и присвоить значение 1. После перезагрузки опция применится. Без перезагрузки эта опция включается от рута командой:

root@openek:/etc/openvpn# sysctl net.inet.ip.forwarding=1
net.inet.ip.forwarding: 1 -> 1
root@openek:/etc/openvpn#
  • OpenVPN я собирал из исходников (если необходимо — установите/обновите порты!)
root@openek:~# cd /usr/ports/net/openvpn
root@openek:/usr/ports/net/openvpn# make install clean
  • Создал директорию для конфигов и ключей /etc/openvpn
root@openek:~# mkdir /etc/openvpn
  • Перешел в эту директорию и сгенерил ключ для авторизации:
root@openek:~# cd /etc/openvpn

root@openek:/etc/openvpn# openvpn --genkey --secret /etc/openvpn/auth.key

Ключ должен получиться в таком духе:

root@openek:/etc/openvpn# cat auth.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
4e36924d67c8c75df3481776cafc1214
6f9d1ca10858ef708c05d7ef437b7f94
5c0d5d012c1c1467f20355448752e08f
6e64ed241898b6b345e3e75efb64fe76
4224b349bea70c341900ff2b3c259232
5a816deaa7ce3c7dece4edd42edc5585
294e941550b5eb14a6aabf0ba56c9edb
cbea81590f3fdf29b5867eda66b43175
5a8db2d381b027e977e17b76ee215777
fc360af042c515f916634751f9e021e6
7cbc386ac9a71d24cef5127c697a3087
e6702d813c12da1c48d49724b968f7a8
1b910bf4e4f8347df773d2de8d35c988
d0bdec0c80e093a8c8e7f6b5aa41ec4c
d99b2fd1882ec4f83ed8ef1866c74950
84816d6338662618eb72da9506eab493
-----END OpenVPN Static key V1-----
root@openek:/etc/openvpn#
  • рихтуем конфиг до вида:
root@openek:/etc/openvpn# cat openbsd-debian.conf
proto udp
dev tun3
port 5000
comp-lzo
ping 15
verb 3
user _openvpn
group _openvpn
remote 10.0.1.13
ifconfig 10.3.0.2 10.3.0.10
#route 192.168.0.0 255.255.255.0 10.3.0.10
secret /etc/openvpn/auth.key
auth MD5
cipher DES-CBC
tun-mtu 1500
root@openek:/etc/openvpn#

Добавляем в /etc/rc.local такие строчки для автоматического поднятия туннеля OpenVPN:

### <- VPN to Debian -> ###
if [ -x /usr/local/sbin/openvpn ]; then
echo -n ' OpenVPN to Debian'; (sleep 3; /usr/local/sbin/openvpn --config /etc/openvpn/openbsd-debian.conf) &
fi

Ну все …. OpenBSD готов принимать гостей 🙂

Подготавливаем Debian для коннекта к OpenBSD

  • Устанавливаем OpenVPN
black:~# apt-get install openvpn
  • Добавляем пользователя openbsd
black:~# useradd openvpn -s /usr/sbin/nologin
  • Рихтуем конфиг по образу и подобию только что настроенного в OpenBSD
black:/etc/openvpn# cat debian-openbsd.conf
proto udp
dev tun
port 5000
comp-lzo
ping 15
verb 3
user openvpn
group openvpn
remote 10.0.1.111
ifconfig 10.3.0.10 10.3.0.2
route 192.169.100.0 255.255.255.0 10.3.0.2
secret /etc/openvpn/auth.key
auth MD5
cipher DES-CBC
tun-mtu 1500
black:/etc/openvpn#
  • После этого копируем ключ auth.key на Debian любым доступным вам способом. Я закинул с OpenBSD на Debian простым scp. Так как у меня открыто ходка на Debian по ssh под root то закидывал прямо в директорию /etc/openvpn
root@openek:~# scp /etc/openvpn/auth.key root@10.0.1.13:/etc/openvpn
  • Перезапускаем сервис openvpn
black:~# /etc/init.d/openvpn restart

Проверяем что поднялся интерфейс:

black:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:11:2f:63:15:1e
inet addr:10.0.1.13  Bcast:10.0.1.255  Mask:255.255.255.0
inet6 addr: fe80::211:2fff:fe63:151e/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:169731145 errors:0 dropped:0 overruns:0 frame:0
TX packets:106196175 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3414915304 (3.1 GiB)  TX bytes:1627861190 (1.5 GiB)
Interrupt:17 Base address:0xc400

lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:3684864 errors:0 dropped:0 overruns:0 frame:0
TX packets:3684864 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:925925961 (883.0 MiB)  TX bytes:925925961 (883.0 MiB)

tun0 Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.3.0.10  P-t-P:10.3.0.2  Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
RX packets:2 errors:0 dropped:0 overruns:0 frame:0
TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:168 (168.0 B)  TX bytes:168 (168.0 B)

black:~#

Пингуем сервер OpenBSD по адресу туннеля:

black:~# ping 10.3.0.2
PING 10.3.0.2 (10.3.0.2) 56(84) bytes of data.
64 bytes from 10.3.0.2: icmp_seq=1 ttl=255 time=0.923 ms
64 bytes from 10.3.0.2: icmp_seq=2 ttl=255 time=0.710 ms
64 bytes from 10.3.0.2: icmp_seq=3 ttl=255 time=0.904 ms
^C
--- 10.3.0.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.710/0.845/0.923/0.101 ms
black:~#

И, наконец, пингуем машину из внутрисети за OpenBSD

black:~# ping 192.169.100.10
PING 192.169.100.10 (192.169.100.10) 56(84) bytes of data.
64 bytes from 192.169.100.10: icmp_seq=1 ttl=127 time=1.08 ms
64 bytes from 192.169.100.10: icmp_seq=2 ttl=127 time=0.936 ms
64 bytes from 192.169.100.10: icmp_seq=3 ttl=127 time=0.975 ms
^C
--- 192.169.100.10 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2009ms
rtt min/avg/max/mdev = 0.936/0.997/1.080/0.060 ms
black:~#

При любых проблемах со связью, не забывайте о настройках pf/iptables …. может чегото залочили???

Удачи!

Подключение к Cyfra по PPPoE в OpenBSD

Давно хочу написать цикл статей под общим названием «Сервер для малых офисов на OpenBSD». В нем более-меее подробно постараюсь описать процессы настройки следующих сервисов:

Положу начало маленькой но очень важной статейкой из будущего цикла. Важность врятли можно оспорить, ведь если у офиса нету интернета, зачем тогда все остальное? Ну я конечно утрирую, можно решать и другие задачи … файлопомойка например или еще чтото местного масштаба. Но учитывая особенности небольших офисов, уклон беру на то, что один сервер предоставляет если не все, то 80-90% необходимого вычислительного функционала. И очень много из этого самого функционала тесно связана с доступом в интернет. Ну чтож … тогда вперед! В моем случае провайдером выступает Cyfra Настроить подключение оказалось совсем несложно. Начнем сначала, с настройки ppp.

В /etc/ppp/ppp.conf добавляем такие строчки (напомню что в этом файле очень важно соблюдать форматирование: название подключения начинается с начала строчки, его параметры — с пробела)

cyfra:
 set device "!/usr/sbin/pppoe -i sk0"
 disable acfcomp protocomp
 set mtu max 1492
 set speed sync
 enable lqr
 set lqrperiod 5
 set cd 5
 set authname _my_cyfra_login_
 set authkey _my_cyfra_password_
 set dial
 set login
 set timeout 0
 enable dns
 enable mssfixup
 add default HISADDR

sk0 — сетевой адаптер в который воткнут шнурок от провайдера 🙂

Ну все! Подключение настроено 🙂 Можно сразу протестить. В консоли из под рута набираем:

root@gw:~# ifconfig -ddial cyfra

Если все пойдет нормально — то вывалится пару строчек в консоль и подключится 🙂 Если чтото не получается — тут уж в каждой ситуации подход индивидуальный. Разобраться несложно, главное сначала проверить физику, уточнить у провайдера о состоянии аккаунта … ну и почитать доки по ppp на крайняк.

Чтобы соединение подымалось автоматически, добавляем несколько строчек примерно такого содержания в /etc/rc.local

echo -n ' Starting PPPoE'
ppp -ddial cyfra
sleep 25

Пробуем перезагрузиться и проверить все ли сработает так как надо 🙂 Также не забываем о применении правил pf  — я подымаю  фаервол после поднятия соединения с Цифрой. Делается это созданием файла /etc/ppp/ppp.linkup с таким содержимым:

root@gw:~# cat /etc/ppp/ppp.linkup
MYADDR:
 !bg sh -c "/sbin/pfctl -e -f /etc/pf.conf"
root@gw:~#

В результате получаем работающее соединения, которое стартует с системой. И работающий firewall, который подымается только после поднятия инета. Наслаждаемся тихой и безглючной работой замечательной OS OpenBSD 😉

Удачи!