Рекомендации по настройке сервера FreeBSD 12.0

После начальной настройки сервера мы рекомендуем вам выполнить некоторые дополнительные действия. Этот мануал охватывает некоторые примеры опциональных, но очень полезных конфигураций, среди которых:

  • настройка брандмауэра IPFW для блокировки большей части трафика.
  • настройка часового пояса сервера (это очень важно для правильной работы ваших программ).
  • NTP-синхронизация времени.
  • Создание swap-пространства (или подкачки).

Прежде чем приступить к выполнению мануала, нужно настроить среду сервера FreeBSD. Этот этап подробно описан в мануале Начало работы с FreeBSD.

1: Настройка брандмауэра IPFW

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

Система FreeBSD поставляется со встроенной поддержкой трёх отдельных брандмауэров, каждый из которых имеет свои преимущества и недостатки: это pf, ipfw и ipfilter. Здесь мы рассмотрим настройку самого простого и быстрого из них – ipfw. Это надежный stateful брандмауэр, написанный и поддерживаемый как часть FreeBSD.

Настройка базового брандмауэра

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

sudo sysrc firewall_enable="YES"

Каждый раз, когда вы запускаете sysrc для редактирования конфигураций, команда отображает ваши изменения:

firewall_enable: NO -> YES

Первая команда включает брандмауэр ipfw, добавляет его в автозагрузку и позволяет запускать его с помощью обычных команд service.

Запустите:

sudo sysrc firewall_quiet="YES"

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

Эта опция важна по двум факторам. Во-первых, скрипт конфигурации брандмауэра выполняется в текущей среде оболочки, не в фоновом режиме. Во-вторых, когда команда ipfw читает конфигурационный скрипт без флага quiet, она выводит каждую прочитанную строку на стандартный вывод. После вывода строки ipfw сразу же выполняет связанное с ней действие.

Большинство конфигурационных файлов брандмауэра сбрасывают текущие правила в начало скрипта. Если ipfw находит подобные строки без флага quiet, он немедленно сбрасывает все правила и возвращается к политике по умолчанию, которая в большинстве случаев блокирует все соединения. Если брандмауэр настраивается по SSH, соединение будет прервано, текущий сеанс закроется и брандмауэр перестанет обрабатывать правила, открывающие вам доступ к серверу – то есть вы заблокируете себя на собственном сервере. Флаг quiet помогает брандмауэру воспринимать и обрабатывать правила как набор, а не как отдельные, несвязанные правила.

После этих двух строк нужно добавить строки, управляющие поведением брандмауэра. Установите «workstation» в качестве типа брандмауэра:

sudo sysrc firewall_type="workstation"

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

Файл /etc/rc.conf также позволяет настраивать сервисы, доступ к которым необходим клиентам. Для этого нужны параметры firewall_myservices и firewall_allowservices.

Запустите следующую команду, чтобы открыть порты, через которые будет идти трафик. В данном случае нам нужны порты 22 (SSH-соединения) и 80 (HTTP). Если вы используете SSL, вам также нужно добавить порт 443.

sudo sysrc firewall_myservices="22/tcp 80/tcp 443/tcp"

Опция firewall_myservices содержит набор TCP-портов или сервисов (через пробел), которые должны быть доступны на вашем сервере.

Примечание: Сервисы можно указывать по имени. Все сервисы, чьи имена известны системе FreeBSD, перечислены в файле /etc/services. К примеру, показанную выше конфигурацию можно также задать следующим образом (результат будет таким же):

firewall_myservices="ssh http https"

Опция firewall_allowservices содержит список элементов, которые должны иметь доступ к перечисленным сервисам. Так вы можете ограничить доступ к вашим сервисам (из firewall_myservices) до определенных машин или диапазонов сети. Например, с помощью этой опции вы могли бы разместить на компьютере веб-контент для внутренней сети компании. Ключевое слово any значит, что доступ есть у всех IP-адресов.

sudo sysrc firewall_allowservices="any"

Опция firewall_logdeny вносит в лог /var/log/security все неудачные попытки доступа. Запустите:

sudo sysrc firewall_logdeny="YES"

Чтобы проверить все внесенные изменения, введите команду:

grep 'firewall' /etc/rc.conf

Эта часть файла /etc/rc.conf будет выглядеть так:

firewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
firewall_myservices="22 80 443"
firewall_allowservices="any"
firewall_logdeny="YES"

Примечание: Не забудьте отредактировать опцию firewall_myservices, добавив все сервисы, необходимые вашим клиентам.

Поддержка соединений UDP (опционально)

Все порты и сервисы, перечисленные в firewall_myservices в файле /etc/rc.conf, доступны для соединений TCP. Если некоторые сервисы должны работать по UDP, отредактируйте файл /etc/rc.firewall.

sudo vi /etc/rc.firewall

Ранее мы настроили тип брандмауэра – «workstation». Найдите в файле следующий раздел:

. . .
[Ww][Oo][Rr][Kk][Ss][Tt][Aa][Tt][Ii][Oo][Nn])
. . .

В этом блоке есть раздел, обрабатывающий установленные значения firewall_allowservices и firewall_myservices . Он выглядит так:

for i in ${firewall_allowservices} ; do
for j in ${firewall_myservices} ; do
${fwcmd} add pass tcp from $i to me $j
done
done

После этого раздела нужно указать все сервисы и порты, поддерживающие UDP.

${fwcmd} add pass udp from any to me port_num

В редакторе vi нужно нажать i, чтобы перейти в режим INSERT и вставить свой код. Затем сохраните и закройте файл, для этого нажмите Esc, введите :wq и нажмите Enter. В строке выше вы можете оставить ключевое слово any, если соединение должно быть доступно для всех клиентов. Если нет, вы можете заменить его определенным IP-адресом или диапазоном сети. port_num нужно заменить номером порта или именем сервиса, которые должны поддерживать соединения UDP. Например, если вы используете DNS-сервер, ваша запись будет выглядеть примерно так:

for i in ${firewall_allowservices} ; do
for j in ${firewall_myservices} ; do
${fwcmd} add pass tcp from $i to me $j
done
done
${fwcmd} add pass udp from 192.168.2.0/24 to me 53

Это разрешит любому клиенту из диапазона 192.168.2.0/24 получить доступ к DNS-серверу по порту 53. Обратите внимание, в таком случае нужно также открыть этот порт для TCP подключений.

Сохраните и закройте файл.

Запуск брандмауэра

Завершив настройку, запустите брандмауэр:

sudo service ipfw start

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

Теперь нужно настроить количество записей в логе для одного IP. Это предотвратит переполнение логов одним IP-адресом. Откройте файл /etc/sysctl.conf:

sudo vi /etc/sysctl.conf

В конец файла поместите следующую строку, которая ограничит количество записей до 5:

net.inet.ip.fw.verbose_limit=5

Сохраните и закройте файл. Данная настройка активируется после перезагрузки.

Чтобы применить эту настройку в текущей сессии, используйте команду sysctl без аргументов.

sudo sysctl net.inet.ip.fw.verbose_limit=5

Эта команда применит настройку в текущей сессии.

2: Настройка часового пояса сервера

Часовой пояс очень сильно влияет на производительность сервера, потому важно, чтобы он был настроен правильно. Это также нужно и для настройки NTP-синхронизации (о ней речь пойдёт в следующем разделе).

FreeBSD поставляется с инструментом tzsetup, который отвечает за настройку часового пояса. Запустите эту команду с правами sudo:

sudo tzsetup

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

Затем нужно указать страну или субрегион.

Примечание: Для навигации по меню используйте клавиши PAGE UP и PAGE DOWN. Если у вас на клавиатуре их нет, вы можете использовать FN+DOWN или FN+UP.

Затем выберите часовой пояс, в котором находится сервер. Подтвердите свой выбор.

Теперь сервер работает в выбранном часовом поясе.

3: Настройка NTP-синхронизации

Теперь на сервере настроен часовой пояс. После этого нужно настроить NTP (Network Time Protocol). Этот протокол позволяет синхронизировать внутренние часы сервера с всемирным временем. Это очень важно для поддержки чувствительных ко времени взаимодействий клиентов и серверов, а также для точного логирования.

Чтобы включить NTP, нужно отредактировать /etc/rc.conf. Запустите следующую команду, чтобы добавить нужную настройку в файл:

sudo sysrc ntpd_enable="YES"

Также нужно добавить в него строку для синхронизации часов с удаленными NTP-серверами при загрузке системы. Это позволяет серверу превышать нормальный предел дрейфа при инициализации. Скорее всего, ваш сервер будет вне предела дрейфа при загрузке, потому что ваш часовой пояс применяется до запуска демона NTP, что сместит системное время.

sudo sysrc ntpd_sync_on_start="YES"

Без этой строки NTP не сможет запуститься, поскольку настройки часового пояса исказят системное время.

Сохраните и закройте файл.

Запустите сервис ntpd:

sudo service ntpd start

Этот сервис будет синхронизировать время сервера с серверами NTP, перечисленными в файле /etc/ntp.conf.

4: Настройка swap-пространства

Чтобы проверить, есть ли на вашем сервере swap, введите:

sudo swapinfo -g

Вывод может выглядеть так:

Device          1G-blocks     Used    Avail Capacity
/dev/gpt/swapfs         1        0        1     0%

На этом сервере есть 1 Гб swap. Но некоторые приложения требуют большего объёма swap-пространства. Для этого используется swap-файл.

Сначала нужно выделить участок памяти для swap. Для этого используйте команду truncate.

В этом мануале swap-файл будет находиться в /swapfile; укажите своё место для этого файла в системе. Этот swap-файл выделит дополнительный 1 гигабайт для подкачки; чтобы задать другой объём, отредактируйте значение флага –s.

sudo truncate -s 1G /swapfile

Выделив пространство, заблокируйте доступ к файлу.

sudo chmod 0600 /swapfile

Затем смонтируйте файл и настройте его автоматическое монтирование при каждой загрузке:

echo "md99 none swap sw,file=/swapfile,late 0 0" | sudo tee -a /etc/fstab

Эта команда добавит в файл /etc/fstab строку:

md99 none swap sw,file=/swapfile,late 0 0

Теперь включите swap-файл при помощи команды:

sudo swapon -aqL

Убедитесь, что swap-файл работает, с помощью команды:

sudo swapinfo -g

Вы увидите дополнительное устройство (/dev/md99). Вывод будет выглядеть примерно так:

Device          1G-blocks     Used    Avail Capacity
/dev/gpt/swapfs         1        0        1     0%
/dev/md99               1        0        1     0%
Total                   2        0        2     0%

Этот файл будет автоматически монтироваться при каждом запуске системы.

Заключение

Теперь ваш сервер FreeBSD готов к работе, дальнейшие конфигурации зависят только от целей использования сервера. Брандмауэр, NTP-синхронизация и swap-пространство предоставляют более подготовленную к разработке среду, а также упрощают дальнейшую установку и настройку программ и сервисов.

Tags: , , ,