Воскресенье, 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 

Прочитано 14823 раз Последнее изменение Четверг, 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
На новой работе опыт очень пригодился потом.
Ответить
Антон
0 # Антон 14.09.2019 09:34
Перезвоните мне пожалуйста, 8 (999)529-09-18 Антон.
Ответить
Антон
0 # Антон 20.09.2019 14:25
Перезвоните мне пожалуйста по номеру. 8 (931) 979-09-12 Антон
Ответить
Molikep
0 # Molikep 21.10.2019 20:53
GO, also know as Igo, is an ancient game of strategy played with black and white stones. The objective is to claim the most territory by placing your stones on the intersections of the line-grid playing board. It’s simple yet complex and can sharpen your mind. Beginners to experts welcome. We can teach you if you’ve never played before.
Fluffy cat
Ответить
MarloLaf
0 # MarloLaf 09.11.2019 01:35
3 Sep 2019 Weve gathered some dos and donts for smart spending in school and Student discounts aside, the costs of eating out can add up quickly.
how to save money fast as a student
Ответить

Добавить комментарий

Защитный код
Обновить

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