Решение проблемы

Настройка Freebsd 10


В первой части мы установили свежую версию Freebsd 10.1. Теперь нам необходимо сделать некоторые минимальные системные настройки, которые позволят эффективно, удобно и в некотором смысле безопасно пользоваться сервером.

Содержание:

  • 1 Настройка SSH сервера
  • 2 Установка Midnight Commander
  • 3 Настройка ntp для синхронизации времени
  • 4 Установка и настройка ipfw
  • 5 Обновление портов
  • 6 Дополнительные материалы по Freebsd

Настройка SSH сервера

Настройка Freebsd 10

Перво наперво нужно настроить sshd для удаленного подключения. Если сейчас попробовать подключиться к серверу, то ничего не выйдет. Мы увидим окно приветствия, но залогиниться не получится. Это из-за того, что в системе у нас нет ни одного пользователя, кроме root. А этому пользователю по-умолчанию запрещено подключаться через ssh. Соответственно, у нас два пути, либо разрешить подключаться руту, либо добавить других пользователей. Сделаем и то, и другое. Сначала разрешаем пользователю root подключаться по ssh. Для этого редактируем файл /etc/ssh/sshd_config. Пока у нас голая система, воспользуемся для этого редактором ee. Открываем файл на редактирование:

# ee /etc/ssh/sshd_config

Находим строчку PermitRootLogin, раскомментируем ее и ставим напротив yes. По-умолчанию там стоит no.

Здесь же я рекомендую изменить стандартный порт ssh 22 на что-то более экзотическое. Делается это для того, чтобы роботы, которые постоянно сканируют интернет и пытаются залогиниться на серваки, остались не у дел. На 22 порт постоянно кто-то ломится с несуществующими учетками и подбирает пароли. Все это отражается в логах и может мешать. Сменив порт на нестандартный, мы частично избавляемся от этой проблемы. Ищем строчку со словом Port и меняем значение с 22, например, на 11222.

Сохраняем изменения и выходим из редактора. Теперь нам необходимо перезапустить sshd для принятия изменений. Делаем это командой:

# service sshd restart

Демон sshd перезапустится. Можно пробовать подключаться по ssh, должно получиться зайти под root.

Многие считают небезопасным подключаться удаленно под учетной записью рута. Это вопрос неоднозначный, все зависит от конкретной ситуации. Добавим одного пользователя для удаленного подключения. Воспользуемся командой:

# adduser

Заполняем необходимые данные пользователя. Обязательно в качестве добавочной группы укажите wheel. Если пользователя не добавить в эту группу, то он не сможет зайти потом рутом. После добавления пользователя, подключаемся им по ssh. После логина используем команду:

# su -l

Вводим пароль рута и оказываемся в учетной записи root.

Как подключаться и работать решайте для себя сами.

Установка Midnight Commander

Следующим шагом я всегда устанавливаю MC и делаю редактором по-умолчанию mcedit. Мне так удобно и проще делать дальнейшие настройки сервера. Установить можно как из портов, так и из пакетов. На вопрос, как лучше, однозначного ответа нет, каждый решает для себя сам. Я обычно MC ставлю из пакетов, а все остальное уже из портов. Почему именно так, да потому, что Midnight Commander ставится очень долго из портов, тянет кучу зависимостей, а у нас в настоящий момент порты даже не обновлены. На все про все уйдет минут 15-20. Так что я предпочитаю поставить сразу из пакетов. Делаем это командой:

# pkg install mc

Так как у нас система голая, увидим сообщение:

The package management tool is not yet installed on your system.

Do you want to fetch and install it now? [y/N]:

Соглашаемся. После установки pkg начнется установка MC. Перед этим будет выведен список зависимостей, отмечено, сколько места все это займет. Со всем соглашаемся и начинаем установку. После окончания запускаем файловый менеджер:

# mc

Если у вас вместо прямых линий крякозябры, то закрываем putty и в ее настройках меняем кодировку. Идем в Windows -> Translation и выбираем KOI8-U, сохраняем и заходим снова. Теперь все должно быть в порядке.

Дальше устанавливаем редактор по умолчанию mcedit. Если этого не сделать, то в качестве редактора будет выступать vi. Если вы случайно окажетесь в нем, то не сразу сможете банально выйти из него, я не говорю уже о том, что бы что-то там отредактировать и сохранить. Так что идем в домашнюю директорию пользователя, находим там файл .cshrc, открываем, ищем строку

setenv  EDITOR  vi

меняем vi на mcedit, сохраняем, закрываем.

Настройка ntp для синхронизации времени

Настройка Freebsd 10

Минимально необходимый инструментарий для настройки мы получили, продолжаем работу. Чтобы время на сервере всегда было актуальным, его надо регулярно синхронизировать. Можно пойти двумя путями. Либо запускать через определенные промежутки времени утилиту ntpdate с ключами, либо настроить и запустить службу ntpd, которая будет постоянно работать и синхронизировать время. Более правильный вариант, использовать службу, но он чуть сложнее в настройке. Чтобы синхронизировать время через ntpdate, достаточно просто ввести команду:

# ntpdate -b europe.pool.ntp.org

и время будет синхронизировано. Можно запускать эту команду через cron с определенной периодичностью. Если у вас уже запущена служба ntpd, то ntpdate не сработает, выдаст ошибку:

the NTP socket is in use, exiting

Настроим в таком случае ntpd. Если она у вас уже запущена, то в файле /etc/rc.conf уже есть строчка

ntpd_enable="YES"

если ее нет, добавьте.

Дальше отредактируем файл /etc/ntp.conf В качестве серверов синхронизации укажем:

server 0.pool.ntp.org

server 1.pool.ntp.org
server 2.pool.ntp.org
server 3.pool.ntp.org

и добавим две строчки в конец:

driftfile /var/db/ntpd.drift

logfile /var/log/ntpd.log

Сохраняем, перезапускаем ntpd командой:

# killall ntpd && ntpd

Теперь наш сервер будет автоматически синхронизировать свое время.

Установка и настройка ipfw

Настройка фаервола сервера это тема отдельной статьи, тут я подробно останавливаться на этом не буду. Мы просто запустим фаервол на нашей freebsd 10, установим скрипт для безопасного редактирования правил. А дальше каждый уже сам по своему желанию сможет безопасно настраивать удаленно фаервол, не боясь потерять доступ к серверу.

Для работы ipfw необходимо либо пересобрать ядро с нужными функциями, любо подгружать модуль во время загрузки. Второй вариант проще и быстрее, воспользуемся им. Добавим в /etc/rc.conf строку:

firewall_enable="YES"

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

firewall_script="/usr/local/etc/ipfw/rc.firewall"

Идем в указанную папку и создаем файл следующего содержания:

#!/bin/sh -

fwcmd="/sbin/ipfw"
${fwcmd} -f flush
${fwcmd} -f queue flush
${fwcmd} -f pipe flush
${fwcmd} add allow ip from any to any

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

# ipfw show

В ответ получаем:

00100 115 15052 allow ip from any to any

65535 0 0 deny ip from any to any

На первом месте наше правило, которое все разрешает, на втором, запрещающее. Все пакеты попадают под первое правило. В Freebsd есть замечательный скрипт, с помощью которого можно безопасно настраивать ipfw. Работает он просто. Вы запускаете скрипт, редактируете правила, потом сохраняете их и принимаете изменения. Скрипт после применения правил выводит сообщение о том, что все ли в порядке, записываем правила или нет. Если вы где-то ошиблись и вас отключило от сервера, вы не сможете положительно ответить на вопрос. Скрипт ждет 30 секунд ответа и если его не получает, откатывается на предыдущую версию правил. Вы спокойно подключаетесь и смотрите, где ошиблись.

Копируем себе скрипт:

# cp /usr/share/examples/ipfw/change_rules.sh /usr/local/etc/ipfw_change_rules

и делаем его исполняемым:

# chmod 0700 ipfw_change_rules

Теперь можно экспериментировать. При запуске скрипта будет открываться файл с правилами ipfw. После сохранения файла и выхода из него, скрипт спросит, применить или нет новые правила. Дальше я уже описал его логику.

Обновление портов

Настройка Freebsd 10

Основные настройки сделали. Теперь подготовим нашу систему к установке софта. обновим дерево портов с помощью утилиты portsnap. При первом запуске используем команду:

# portsnap fetch extract

Утилита скачает и распакует порты в папку /usr/ports. Последующее обновление будет производиться командой:

# portsnap fetch update

Добавим ее в cron для регулярного обновления портов раз в сутки. Для этого идем в /var/cron/tabs и создаем там файл root.

# touch /var/cron/tabs/root

Файл должен быть следующего содержания:

SHELL=/bin/sh

PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
0 3 * * * portsnap cron

Обращаю внимание, что команда в планировщике записана не так, как мы запускали из консоли. Это сделано специально, чтобы не грузить сервера обновлений по крону в одно и то же время. Для обновления через планировщик используется специальная команда porsnap cron, которая делает небольшой случайный разброс по времени для обновления, чтобы все клиенты обновлялись в разное время, а не строго по часам.

На этом наша настройка системы закончена, переходим к следующей части, в которой займемся настройкой непосредственно компонентов web-сервера.


СМОТРИ ТАКЖЕ