После начальной настройки сервера настоятельно рекомендуется выполнить некоторые дополнительные действия. Это руководство охватывает рекомендуемые, но необязательные конфигурации, среди которых:
- Создание простого брандмауэра, который блокирует большую часть трафика.
- Настройка часового пояса.
- NTP-синхронизация времени.
- Добавление swap-пространства (или пространства подкачки).
Прежде чем приступить к выполнению руководства, нужно настроить среду оболочки сервера FreeBSD, что подробно описано в руководстве «Начало работы с FreeBSD 10.1».
Настройка брандмауэра IPFW
Сначала нужно настроить простой фаервол для защиты сервера от ненадёжного трафика.
Система FreeBSD поставляется с поддержкой трёх фаерволов, каждый из которых имеет свои преимущества и недостатки; это pf, ipfw и ipfilter. Данное руководство охватывает настройку самого простого и быстрого из них – ipfw.
Настройка базового брандмауэра
Почти все конфигурации фаервола находятся в файле /etc/rc.conf. откройте этот файл:
sudo vi /etc/rc.conf
В этот файл нужно добавить код для включения и управления фаерволом ipfw. Добавьте несколько основных правил в конец файла:
. . .
firewall_enable="YES"
firewall_quiet="YES"
Первая строка включает фаервол ipfw, отвечает за его автоматический запуск при загрузке системы и позволяет запускать его при помощи команды service.
Вторая строка отключает автоматический вывод ipfw. Это может сначала показаться вопросом предпочтений или требований сервера, но на самом деле это существенно влияет на функциональность брандмауэра.
Эта опция важна по двум факторам. Во-первых, сценарий конфигурации фаервола выполняется в текущей среде оболочки, не в фоновом режиме. Во-вторых, когда команда ipfw читает конфигурационный скрипт без флага quiet, она выводит каждую прочитанную строку в standard out. Выведя строку, ipfw сразу же выполняет соответствующее действие.
Большинство конфигурационных файлов брандмауэра сбрасывают текущие правила в начало сценария. Если фаервол ipfw находит такие строки без флага quiet, он немедленно сбрасывает все правила и возвращается к политике по умолчанию, которая, как правило, блокирует все соединения. Если брандмауэр настроен по SSH, соединение будет прервано, текущий сеанс оболочки закроется, и фаервол перестанет обрабатывать правила, открывающие вам доступ на сервер, то есть, вы будете заблокированы на собственном сервере. Флаг quiet помогает брандмауэру воспринимать и обрабатывать правила как набор (не как отдельные, несвязанные правила).
Затем нужно добавить строки, управляющие поведением фаервола:
. . .
firewall_type="workstation"
firewall_myservices="22 80"
firewall_allowservices="any"
firewall_logdeny="YES"
Первая строка задаёт workstation как тип фаервола (это довольно надёжное стандартное поведение). Опции firewall_myservices и firewall_allowservices позволяют без труда выбрать и настроить сервисы, доступ к которым необходим клиентам. Последняя опция вносит в логи все соединения, не прошедшие фаервол.
Опция firewall_myservices должна содержать набор TCP-портов или сервисов (через пробел), которые должны быть доступны серверу. В примере выше указаны порты 22 (SSH-соединения) и 80 (HTTP). Сервисы можно указывать по имени. Все сервисы, чьи имена известны системе FreeBSD, перечислены в файле /etc/services. К примеру, вышеприведённую конфигурацию можно также задать следующим образом:
firewall_myservices="ssh http"
Если на сервере используется SSL, добавьте в этот список порт 443 или сервис https.
Опция firewall_allowservices содержит список компонентов и клиентов, которые должны иметь доступ к перечисленным ранее портам и сервисам. Ключевое слово any значит, что доступ есть у всех клиентов. При помощи этой опции можно также заблокировать доступ некоторым клиентам.
Опция firewall_logdeny вносит в лог /var/log/security все неудачные попытки доступа.
Итак, полностью код, который нужно добавить в /etc/rc.conf, имеет следующий вид:
. . .
firewall_enable="YES"
firewall_quiet="YES"
firewall_type="workstation"
firewall_myservices="22 80"
firewall_allowservices="any"
firewall_logdeny="YES"
Примечание: Не забудьте отредактировать опцию firewall_myservices, добавив все сервисы, необходимые вашим клиентам.
Сохраните и закройте файл.
Соединения UDP
Все перечисленные в firewall_myservices порты и сервисы доступны для соединений 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
В этой строке также можно использовать ключевое слово 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
Такая команда применит данную настройку в текущей сессии.
Настройка часового пояса сервера
Правильно настроенный часовой пояс очень важен для производительности сервера и для настройки NTP-синхронизации (о которой речь пойдёт в следующем разделе).
Система FreeBSD поставляется с инструментом tzsetup, который отвечает за настройку часового пояса. Запустите с правами sudo следующую команду:
sudo tzsetup
На экране появится окно меню, которое спросит, как настроены аппаратные часы, по Гринвичу (UTC)или по местному времени.
Is this machine’s CMOS clock set to UTC? If it is set to local time or you don’t know, please choose NO here!
Выберите «No». Затем программа предложит выбрать регион, в котором находится сервер.
Также нужно указать страну или субрегион.
В завершение выберите часовой пояс, в котором находится сервер. Подтвердите свой выбор.
Теперь сервер работает в указанном часовом поясе.
Настройка NTP-синхронизации
Теперь часовой пояс настроен. После этого на сервере нужно настроить NTP (Network Time Protocol).Этот протокол позволяет синхронизировать внутренние часы сервера. Это очень важно для поддержки чувствительных ко времени взаимодействий клиентов и серверов, а также для точного журналирования.
Чтобы включить NTP, нужно отредактировать файл /etc/rc.conf.
sudo vi /etc/rc.conf
Добавьте в файл строку:
ntpd_enable="YES"
Также нужно добавить в него строку для синхронизации часов с серверами NTP при загрузке системы. Это позволит свести к минимуму влияние дрейфа.
ntpd_enable="YES"
ntpd_sync_on_start="YES"
Без этой троки демон NTP не сможет запуститься, поскольку настройки часового пояса исказят время системы.
Сохраните и закройте файл.
Запустите сервис ntpd:
sudo service ntpd start
Этот сервис будет синхронизировать часы сервера с серверами NTP, перечисленными в /etc/ntp.conf.
Настройка swap-пространства
Чтобы проверить, есть ли на сервере swap-пространство, введите:
sudo swapinfo -g
Вывод может выглядеть так:
Device 1G-blocks Used Avail Capacity
/dev/gpt/swapfs 1 0 1 0%
Но некоторые приложения требуют большего объёма swap-пространства. Для этого используется swap-файл.
Сначала нужно выделить участок памяти для swap. Для этого используйте команду truncate.
В этом руководстве swap-файл будет находиться в /swapfile; укажите своё место для этого файла в системе. Этот swap-файл будет предоставлять 1 гигабайт для подкачки; чтобы задать другой объём памяти, отредактируйте значение флага –s.
sudo truncate -s 1G /swapfile
Выделив пространство, запретите доступ к файлу.
sudo chmod 0600 /swapfile
Затем смонтируйте файл и настройте его автоматическое монтирование при загрузке:
sudo sh -c 'echo "md99 none swap sw,file=/swapfile,late 0 0" >> /etc/fstab'
Эта команда добавит в файл /etc/fstab следующую строку:
md99 none swap sw,file=/swapfile,late 0 0
После этого включите swap-файл при помощи команды:
sudo swapon -aqL
Убедитесь, что swap-файл работает, запустив команду:
sudo swapinfo -g
Вывод будет выглядеть примерно так:
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-пространство предоставляют более подготовленную к разработке среду, а также упрощают дальнейшую установку и настройку программ и сервисов.