Вступление
При настройке нового сервера FreeBSD существует ряд необязательных шагов, которые вы можете предпринять, чтобы перевести ваш сервер в более производительное состояние. В этом руководстве мы рассмотрим некоторые из наиболее распространенных примеров.
Мы рассмотрим, как настроить простой и простой в настройке межсетевой экран, который запрещает большую часть трафика. Мы также позаботимся о том, чтобы часовой пояс вашего сервера точно отражал его местоположение. Мы настроим опрос NTP, чтобы сохранить точное время сервера, и, наконец, покажем, как добавить дополнительное пространство подкачки на ваш сервер.
Прежде чем приступить к работе с этим руководством, необходимо войти в систему и настроить среду оболочки так, как вам нравится. Вы можете узнать, как это сделать, следуя th guide.
Как настроить простой брандмауэр IPFW
Первая задача, которую мы будем решать, это настройка простого брандмауэра для защиты нашего сервера.
FreeBSD фактически поддерживает три отдельных межсетевых экрана, каждый из которых имеет свои сильные и слабые стороны. Они называются + pf +
, + ipfw +
и + ipfilter +
. В этом руководстве мы будем использовать + ipfw +
, потому что мы можем легко приступить к работе с безопасным межсетевым экраном с сохранением состояния.
Настройка основного брандмауэра
Почти вся наша конфигурация будет размещена в файле + / etc / rc.conf
. Откройте этот файл с привилегиями + sudo +
в вашем редакторе:
sudo vi /etc/rc.conf
Внутри нам нужно будет добавить несколько разных строк, чтобы включить и контролировать работу брандмауэра + ipfw +
. Давайте начнем с основных правил. Добавьте их в конец файла:
. . .
firewall_enable="YES"
firewall_quiet="YES"
Как и следовало ожидать, в первой строке включается брандмауэр + ipfw +
, автоматически запускающий его при загрузке и позволяющий запускать его с помощью обычных команд + service +
.
Вторая команда говорит + ipfw +
не выводить что-либо в стандартный формат при выполнении определенных действий. Это может показаться вопросом предпочтений, но на самом деле это влияет на функциональность брандмауэра.
Два фактора объединяются, чтобы сделать это важным вариантом. Во-первых, сценарий настройки брандмауэра выполняется в текущей среде оболочки, а не в качестве фоновой задачи. Во-вторых, когда команда + ipfw +
читает сценарий конфигурации без флага “quiet”, она читает и выводит каждую строку, в свою очередь, в стандартный формат. Когда он выводит строку, он * немедленно * выполняет соответствующее действие.
Большинство файлов конфигурации брандмауэра сбрасывают текущие правила вверху скрипта, чтобы начать с чистого листа. Если брандмауэр + ipfw +
встречает строку, подобную этой, без флага тишины, он немедленно сбрасывает все правила и возвращается к своей политике по умолчанию, которая обычно запрещает все подключения. Если вы настраиваете брандмауэр через SSH, это приведет к разрыву соединения, закрытию текущего сеанса оболочки, и ни одно из следующих правил не будет обработано, что фактически заблокирует вас на сервере. Флаг молчания в основном позволяет брандмауэру обрабатывать правила как набор, а не реализовывать каждое из них по отдельности.
После этих двух строк мы можем приступить к настройке поведения брандмауэра:
. . .
firewall_type="workstation"
firewall_myservices="22 80"
firewall_allowservices="any"
firewall_logdeny="YES"
Сначала мы выбираем «рабочая станция» в качестве типа брандмауэра, который мы будем настраивать. Это межсетевой экран с отслеживанием состояния с хорошим поведением по умолчанию. Это также позволяет нам легко настраивать службы, к которым мы хотим, чтобы клиенты имели доступ, используя опции + firewall_myservices +
и + firewall_allowservices +
. Наконец, мы настраиваем + ipfw +
для регистрации любых соединений, которые запрещены настроенными правилами.
Параметр + firewall_myservices +
должен содержать список портов или служб TCP, разделенных пробелами, которые должны быть доступны на вашем сервере. Вы можете использовать порты, как у нас здесь (мы настроили порт 22 для нашего соединения SSH и порт 80 для обычного веб-сервера HTTP). Вы также можете использовать услуги по имени. Сервисы, которые FreeBSD знает по имени, перечислены в файле + / etc / services +
. Например, мы могли бы изменить вышеприведенное на что-то вроде этого:
firewall_myservices="ssh http"
Это будет иметь те же результаты. Если вы используете SSL на своем веб-сервере, обязательно добавьте в этот список либо порт + 443 +
, либо сервис + https +
.
Элементы списка + firewall_allowservices +
- это клиенты, которым должен быть разрешен доступ к предоставленным сервисам. Ключевое слово «любой» означает, что любой клиент может получить доступ к этим услугам. Если бы мы хотели ограничить число клиентов, которые могли бы подключаться к нашим услугам, мы могли бы сделать это здесь.
Опция + firewall_logdeny +
указывает + ipfw +
регистрировать все попытки подключения, которые запрещены, в файл, расположенный в + / 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 +
в файле + / etc / rc.conf +
, разрешают доступ для TCP-соединений. Если у вас есть сервисы, которые вы хотите предоставить, которые используют UDP, вам нужно отредактировать файл + / etc / rc.firewall +
:
sudo vi /etc/rc.firewall
Мы настроили наш брандмауэр на использование типа брандмауэра «рабочая станция», поэтому поищите раздел, который выглядит следующим образом:
. . .
[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 to me
В приведенном выше примере вы можете оставить ключевое слово «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 to me
Это позволит любому клиенту из сетевого диапазона + 192.168.2.0 / 24 +
получить доступ к DNS-серверу, работающему через стандартный порт 53. Обратите внимание, что в этом примере вы также хотели бы открыть этот порт для TCP-соединений, так как он используется DNS-серверами для более длинных ответов.
Сохраните и закройте файл, когда вы закончите.
Запуск брандмауэра
Когда вы закончите настройку, вы можете запустить брандмауэр, набрав:
sudo service ipfw start
Брандмауэр должен работать корректно, блокируя нежелательный трафик при подключении к разрешенным службам и портам. Этот брандмауэр запускается автоматически при каждой загрузке.
Мы также хотим настроить ограничение на количество отказов на 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 или местное время:
изображение: https: //assets.digitalocean.com/articles/freebsd_recommended/local_or_utc.png [FreeBSD UTC или местное время]
Выберите «Нет» здесь. Далее вам будет предложено выбрать регион мира, в котором расположен ваш сервер:
изображение: https: //assets.digitalocean.com/articles/freebsd_recommended/region.png [регион мира FreeBSD]
Вам нужно будет выбрать субрегион или страну следующим образом:
изображение: https: //assets.digitalocean.com/articles/freebsd_recommended/country.png [страна FreeBSD]
Наконец, выберите часовой пояс, подходящий для вашего сервера:
изображение: https: //assets.digitalocean.com/articles/freebsd_recommended/time.png [часовой пояс FreeBSD]
Подтвердите выбор часового пояса, который представлен на основе вашего выбора.
На этом этапе часовой пояс вашего сервера должен соответствовать выбранным вами вариантам.
Как настроить NTP, чтобы сохранить точное время
Теперь, когда на нашем сервере настроен часовой пояс, мы можем настроить NTP или сетевой протокол времени на нашем сервере. Это поможет синхронизировать время вашего сервера с другими пользователями по всему миру. Это важно для чувствительных ко времени взаимодействий клиент-сервер, а также для точного ведения журнала.
Опять же, мы можем включить службу NTP на нашем сервере, настроив файл + / etc / rc.conf +
. Откройте это с привилегиями + sudo +
:
sudo vi /etc/rc.conf
В этом файле добавьте следующую строку:
ntpd_enable="YES"
Нам также нужно добавить вторую строку, которая будет синхронизировать время на нашей машине с удаленными NTP-серверами при загрузке. Это необходимо, потому что это позволяет нашему серверу превышать нормальный предел дрейфа при инициализации. Наш сервер, вероятно, будет вне предела дрейфа при загрузке, потому что наш часовой пояс будет применен до запуска демона NTP, что сместит наше системное время:
ntpd_enable="YES"
Если бы у нас не было этой строки, наш демон NTP не работал бы при запуске из-за настроек часового пояса, которые искажали наше системное время до начала процесса загрузки.
Сохраните и закройте файл, когда вы закончите.
Вы можете запустить службу + ntpd +
, набрав:
sudo service ntpd start
Это сохранит время вашего сервера благодаря синхронизации с NTP-серверами, перечисленными в + / etc / ntp.conf +
.
Как настроить дополнительное пространство подкачки
На серверах FreeBSD, настроенных в DigitalOcean, 1 гигабайт пространства подкачки настраивается автоматически независимо от размера вашего сервера. Вы можете увидеть это, набрав:
sudo swapinfo -g
Это должно показать что-то вроде этого:
Device 1G-blocks Used Avail Capacity
/dev/gpt/swapfs 1 0 1 0%
Некоторым пользователям и приложениям может потребоваться больше места подкачки, чем это. Это легко сделать, добавив файл подкачки.
Первое, что нам нужно сделать, это выделить часть файловой системы для файла, который мы хотим использовать для подкачки. Мы будем использовать команду + truncate +
, которая может быстро выделить место на лету.
В этом руководстве мы поместим файл подкачки в + / swapfile +
, но вы можете использовать любое разумное расположение в файловой системе. Этот файл предоставит дополнительно 1 гигабайт пространства подкачки. Вы можете изменить это число, изменив значение, данное параметру + -s +
.
sudo truncate -s /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
После добавления строки в наш файл + / etc / fstab
мы можем активировать файл подкачки для сессии, набрав:
sudo swapon -aqL
Мы можем проверить, что файл подкачки теперь работает, снова используя команду + swapinfo +
:
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 и соответствующее пространство подкачки, ваш сервер можно использовать в качестве хорошей базы для будущих установок и служб.