Воскресенье, 13 Май 2012 13:45

Настройка домашнего сервера, выполняющего роли веб-сервера, почтового сервера и фтп-сервера. Этап 1.

Автор
Оцените материал
(15 голосов)

Всем привет!

Сразу оговорюсь, что описанное здесь решение превосходно подойдёт и для использования в малых и средних организациях. А может, даже и в крупных... Улыбаюсь 

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

Ну, а для тех, кто заинтересовался, опишу то, что имеется:

- свой домен example.com с двумя DNS-записями вида:
   - www.example.com. A <ваш белый IP-адрес>
   - example.com. A <ваш белый IP-адрес>
- и записью MX вида:
   - example.com. MX 10 example.com.
- Также, очень желательно бы сделать ещё и PTR-запись для вашего домена у провайдера. Но мой провайдер, к сожалению, отказал мне в этом, как физическому лицу.
- Имеем небольшую квартиру, в которой не особо много места для дополнительного системника и для дополнительного источника шума.

Домен можно зарегистрировать на www.nic.ru. Там же, и сделать все нужные записи на DNS-сервере. От себя скажу, что там это всё делается очень быстро и очень удобно, даже если вы вообще в первый раз подобной процедурой занимаетесь.

Ну, а что касается железа, то оно должно было отвечать параметрам: компактный; бесшумный; непрожорливый; с некоторым запасом производительности для моих нужд. Я остановился вот на такой подборке:

http://www.nix.ru/autocatalog/motherboards_asustek/ASUS_E35M1I_E350_Hudson_M1_PCIE_DVI_SATA_MiniITX_2DDRIII_119243.html
http://www.nix.ru/autocatalog/memory_modules_corsair/Corsair_XMS3_TW3X4G1333C9A_DDRIII_4Gb_2Gb_PC310600_58601.html
http://www.nix.ru/autocatalog/ssd_kingston/SSD_SATA_6Gb_Kingston_SSDNow_V200_SV200S37A_64G_127007.html
http://www.nix.ru/autocatalog/cases_antec/DeskTop_Antec_ISK100_MiniITX_90W_115600.html

Решение действительно получилось весьма компактное и бесшумное. А также весьма сердитое для своих таких размеров. Твердотел потому, что мне хотелось получить ударостойкую систему. Потому как, это чудо будет стоять у меня на столе, и, возможно, его придётся двигать с места на место иногда. К сожалению, денег хватило лишь на 64-ёхгиговый. Но, в будущем, планирую поставить второй твердотел более внушительного объёма.

Операционную систему я для своего сервера выбрал FreeBSD. Почему именно её? Да потому, что мне так захотелось Улыбаюсь Хотя бы из-за того, что это мой первый сервер на FreeBSD, и ему всё равно когда-то суждено было быть.

Этап 1. Установка и общая подготовка сервера.

Сперва наперво, сразу хочу показать, как у меня расположен сервер, относительно домашней сети:

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

Скачиваем свежий дистрибутив FreeBSD. На мой момент, это была девяточка:

ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.0/FreeBSD-9.0-RELEASE-amd64-disc1.iso

И приступаем к установке. На этапе, когда установщик спрашивает: Would you like to set a non-default key mapping for your keyboard? Отвечаем yes и выбираем Russian koi8-r. Затем, система попросит указать имя нашего сервера. Я указал просто example.com (имя своего зарегистрированного домена). Потом установщик спросит, какие компоненты ставить. Выбираем lib32, ports и src. Далее, установщик спросит, как будем разбивать диск на партишены — жмём Manual и видим вот такую картинку:

Здесь я нажимаю кнопку Auto, а затем — кнопку Partition. Система нам покажет, как бы она разбила диск по умолчанию:

И вот здесь то я кое-что изменю. Для начала, удалю партишины ada0p2 и ada0p3. Затем, создам заново ada0p2, выбрав свой размер. И обязательно нажму кнопку Options при её создании:

 

для того, чтобы выбрать опцию TRIM, поскольку накопитель у меня твердотельный стоит:

Затем, добавляю своп-партишин ada0p3, делая его всего в один гигабайт:

Объясняю, почему именно так: Во-первых, чтобы выиграть хоть несколько дополнительных гигабайт свободного места. Во-вторых, на сервере у меня 4гб ОЗУ, коих должно хватить сполна для всех сервисов, поэтому не вижу необходимости в большом свопе.

После разбиения диска на партишены, нажимаем finish, а потом commit. Система начнёт устанавливаться. После установки, система попросит ввести пароль для root и предложит сконфигурировать подключение к сети, на что я соглашаюсь и ввожу свои сетевые реквизиты:

IP-адрес 192.168.0.100
маска 255.255.255.0
шлюз 192.168.0.1
ДНС 192.168.0.1

После конфигурирования сети, установщик спросит, настроены ли наши часы в БИОСе по всемирному координированному времени (UTC). В своём случае, я нажал no, поэтому установщик попросил меня указать мой часовой пояс.

Далее будет спрашиваться, какие демоны включить в автозагрузку. Я выбрал sshd и ntpd. А на дальнейший вопрос о том, хочу ли я, чтоб система создавала крашдампы при сбоях, я ответил отрицательно, ибо места на твердотеле итак мало.

Would you like to add users to the installed system now? Отвечаю положительно и создаю одного пользователя с банальным названием admin. Важный момент! Когда система задаст вот такой вопрос, о том, хотим ли мы пользователя включить в какие-либо дополнительные группы, то пишем группу wheel:

Включать пользователя в эту группу нужно для того, чтобы он потом смог принимать обличье root через команду su в удалённой сессии ssh. После создания пользователя установщик покажет окно с названием Final configuration, в котором выбираем exit. А на последующий вопрос, хотим ли мы что-то ещё вручную сконфигурировать в консоли, отвечаем отрицательно и перезагружаем машину. Во время перезагрузки на забудем зайти в БИОС и поставить загрузку с жёсткого диска.

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

Заходим в систему под root и выполняем вот такие команды:

portsnap fetch update
portsnap extract

Обновление портов займёт некоторое время. Ждём. Ну а потом, лично я, сразу же ставлю программы, без которых мне не комфортно — это midnight commander и nano. Ставим миднайт коммандер:

cd /usr/ports/misc/mc
make install clean

Опции сборки миднайт коммандера я оставляю по умолчанию (они итак почти все включены). Но! Миднайт коммандер, по зависимости, потянет установку такого важного компонента, как perl. И вот в опциях его сборки нам надо выставить вот такие опции:

Эти возможности будут нужны для нашего вэб-сервера nginx, который мы позже будем ставить. Подробнее об этом тут. Также, mc потянет за собой и ещё несколько зависимостей. Здесь я приведу скриншоты сборки лишь тех компонентов, где я менял опции сборки. Это:

После установки mc ставим консольный текстовый редактор nano:

cd /usr/ports/editors/nano
make install clean

Затем, перезагружаем систему командой reboot.

Кстати, у меня, при загрузке системы и после того, как появляется приглашение в консоль, выскакивает некая ругань, связанная с демоном ntpd. Вот сейчас, когда у нас есть mc, частично решим эту проблему. Найдём файл /etc/hosts и закомментируем в нём строчку:

# ::1 localhost localhost.my.domain

Потому как IPv6 в нашей системе всё равно не используется. Частично проблема решена потому, что мы ещё пока не отключили поддержку IPv6 в самом ядре. Этим и не только мы сейчас займёмся. Нам желательно бы оптимизировать настройки ядра на предмет отключения в нём не только IPv6, но и лишних драйверов. Также, включим в ядре поддержку фаервола, ибо какой же сервер без фаервола. Но сначала подстрахуемся и сохраним наше текущее ядро на тот случай, если тюнинг ядра не удастся. Делаем команду:

cp -Rp /boot/kernel /boot/kernel.good

Если вдруг тюнингованное ядро окажется нерабочим, то здесь описано, как загрузиться со старым ядром. Теперь, переходим в каталог /usr/src/sys/amd64/conf и находим файл GENERIC. Тут же, делаем его копию с каким-нибудь своим названием. Например, я сделал с названием mykernel. Затем, надо отредактировать свой файл. Самым первым делом находим вот эту строчку:

ident GENERIC

И меняем её на ваше имя ядра:

ident mykernel

Затем отключаем IPv6:

# options INET6

А для активации фаервола добавляем в конец файла строчки:

# включить фаервол
options IPFIREWALL

# делать логи пакетов, для которых в правилах есть опция 'log'
options IPFIREWALL_VERBOSE

# Ограничение повторяющихся логов на случай атак типа флудинга.
options IPFIREWALL_VERBOSE_LIMIT=5

# включение перенаправления (проброса) пакетов.
options IPFIREWALL_FORWARD

# включение возможности NAT
options IPDIVERT

# Включение возможности ограничивать скорость трафика.
options DUMMYNET

# Почему-то, многие эту опцию включают. Но я не стал. Эта опция означает, что во время загрузки сервер будет открыт до тех пор, пока не включится фаервол.
# options IPFIREWALL_DEFAULT_TO_ACCEPT

Что касается остальных опций, относительно поддерживаемого железа, то тут у каждого будут свои настройки. Я стараюсь отключить всё лишнее. Хотя, кое-что, я думаю, можно отключить у всех, например, всё, что связано со звуком, firewire, usb wireless, да и вообще всё беспроводное отключить можно. Также и PCMCIA карты, флоппи, лишние raid-контроллеры.

Итак, после того, как всё-таки конфиг редактировать закончили, переходим в каталог /usr/src и там делаем команды:

make buildkernel KERNCONF=mykernel
make installkernel KERNCONF=mykernel

Когда ваше ядро соберётся и установится, то пока не спешите перезагружаться. Давайте сразу всё подготовим для фаервола. Во-первых, в файл /etc/rc.conf добавим строчки:

firewall_enable="YES"
firewall_type="/etc/ipfw.rules"
ipfw_enable="YES"

Потом создадим файл /etc/ipfw.rules вот с таким содержимым:

# сброс всех правил
-f flush

# разрешить любой доступ через интерфейс-петлю
add 00050 allow all from any to any via lo0

# разрешить любой исходящий трафик с сервера
add 00055 allow all from me to any

# разрешить прохождение пакетов со статусом 'установлен'
add 00075 allow tcp from any to any established

# разрешить весь ICMP-трафик
add 00100 allow icmp from any to any

# разрешить серверу обмениваться любым трификом со шлюзом
add 00150 allow all from 192.168.0.1 to me via em0

# Вот в этом правиле мы перечисляем открытые порты к нашему серверу. Можно заранее прописать всё нужное.
add 00170 allow tcp from any to me 22,10000,80,443,25,465,21 via em0

# Запретить всё остальное
add 10000 deny all from any to any

Примечание: em0 — эта так моя сетевуха назвалася в системе. Вот теперь перезагружаем сервер. Если ядро получилось работоспособное, то сервер нормально загрузится, и фаервол заработает.

Далее, я предлагаю русифицировать нашу систему. В этом мне помогла вот эта статья. Там перечислено несколько методов Но я выбрал для себя один. Для начала, находим в файле /etc/rc.conf строчку: keymap="ru.koi8-r.kbd" и сразу после неё добавляем ещё четыре:

scrnmap="koi8-r2cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"

Сохраняем изменения. Затем, надо внести изменения ещё в два файла. Сначала находим файл /etc/profile и добавляем в него строчки:

LANG=ru_RU.KOI8-R; export LANG
MM_CHARSET=KOI8-R; export MM_CHARSET

Потом находим файл /etc/csh.login и в него добавляем:

setenv LANG ru_RU.KOI8-R
setenv MM_CHARSET KOI8-R

После чего, перезагружаем систему и радуемся родному языку.

Примечание: для того, чтобы русские символы отображались корректно, вам нужно в своём ssh-клиенте, которым вы, в дальнейшем, будете подключаться к серверу, указать кодировку KOI8-R. Я, как линуховод, вначале съел собаку на этом этапе, позабыв, что в федоре у меня кодировка UTF-8. Но после того, как в konsole переключил кодировку на KOI8-R, всё стало нормально.

Продолжим. В дальнейшем нам понадобится одна наиполезнейшая программа под названием Webmin, ибо через неё многие вещи очень удобно делать. Поэтому установим webmin:

cd /usr/ports/sysutils/webmin
make install clean

После установки, запустим скрипт конфигурирования /usr/local/lib/webmin/setup.sh, который задаст кое-какие вопросы:

Log file directory [/var/log/webmin]: жмём энтер
Full path to perl (default /usr/bin/perl): жмём энтер
Web server port (default 10000): если надо, то порт можно изменить на другой подходящий. Я менять не стал.
Login name (default admin): здесь тоже на ваше усмотрение. Я оставил админа.
Login password: вводим пароль
Use SSL (y/n): вот здесь я ответил положительно. Вдруг когда-нибудь придётся заходить на сервер извне...

После завершения скрипта конфигурирования можно пользоваться вебмином зайдя вот так: https://192.168.0.100:10000. И не забудем в файл rc.conf добавить строчку:

webmin_enable="YES"

Также, не забудем и переключить вебмин на русский язык с локалью KOI8-R. Это делается в меню Webmin --> Webmin Configuration --> Language.

Следующее, что очень желательно сделать для общей подготовки сервера — это установить Apcupsd, чтобы сервер корректно выключался при отключении электричества. Вы же не забыли подключить сервер к ИБП? Установим apcupsd:

cd /usr/ports/sysutils/apcupsd
make install clean

Опции сборки я оставил по умолчанию. Не забываем в rc.conf добавить строчку:

apcupsd_enable="YES"

Затем, найдём файл конфигурации /usr/local/etc/apcupsd/apcupsd.conf и отредактируем некоторые строчки. На самом деле, конфигурирование apcupsd я уже описывал и в других своих статьях: тут и здесь. Но во FreeBSD надо будет внести несколько больше изменений в конфиг:

# Кабель, которым ИБП подсоединён к серверу.
UPSCABLE usb

# Тип ИБП
UPSTYPE usb

# этот параметр оставляем пустым
DEVICE

# уровень заряда батареи, при котором сервер начнёт выключаться
BATTERYLEVEL 10

# оставшееся время работы батареи, меньше которого сервер начнёт выключаться
MINUTES 8

# Подключаться к сервису apcupsd можно будет только с самого сервера. Позже, тут можно будет добавить свой рабочий комп, чтоб отслеживать отслеживать состояние ИБП.
NISIP 127.0.0.1

Последний момент, который тоже очень важен — это включение запуска fsck при старте сервера. К сожалению, я об этом узнал уже после того, как однажды у меня накрылась файловая система. И когда я начал гуглить в надежде найти спасение, то наткнулся вот на это статью:

http://myfreebsd.ru/overview/avtomaticheski-zapusk-fsck-y-pri-starte-freebsd

в которой сказано, что предохраняться то надо было заранее! Поэтому в файл /etc/rc.conf добавляем вот такие строчки:

fsck_y_enable="YES"
background_fsck="NO"

Вот на этом, думаю, общая подготовка сервера закончена. Перейдём ко второму этапу, в котором настроим веб-сервер и развернём болванку для сайта.

Этап 2. Настройка Mysql-сервера, вэб-сервера и развёртывание CMS-системы.

Перейти сразу на:
Этап 3
Этап 4 

Прочитано 23158 раз Последнее изменение Четверг, 24 Январь 2013 15:27

Комментарии  

денис
0 # денис 25.01.2013 05:42
здравствуйте Николай.....дабы не терять времени у меня вопрос если позволите-у вас действительно сервер или вы просто пишите статьи(рерайт),и второй если на первый ответ да все работает по этим статьям?(какойто промежуток времени)
Николай
+2 # Николай 27.01.2013 20:55
Да, у меня действительно свой сервер дома. Настроен именно по этой статье (про домашний сервер). Уже год работает. Я доволен.
Всё остальное, что тут написано -- тоже всё реально настроено/настраивалось, но уже у меня на работе.
Дмитрий
0 # Дмитрий 24.04.2013 12:41
Ну а что, цены на широкие каналы сейчас низкие да и железо дешёвое. Так что грех не поставить свой сервак дома. Получается очень выгодно по цене + огромный опыт.
Николай
0 # Николай 25.04.2013 14:52
На новой работе опыт очень пригодился потом.

You have no rights to post comments

Вы здесь: Home Мои статьи FreeBSD Настройка домашнего сервера, выполняющего роли веб-сервера, почтового сервера и фтп-сервера. Этап 1.