Как защитить FreeBSD с помощью PF Firewall

Из этого туториала вы узнаете, как защитить свой сервер FreeBSD с помощью брандмауэра OpenBSD PF. Мы предполагаем, что у вас есть чистая установка FreeBSD, развернутая Vultr без добавления пользователей. Помимо конфигурации брандмауэра мы сделаем еще кое-что, что также усилит безопасность нашего сервера FreeBSD. Перед настройкой брандмауэра мы установим несколько пакетов, поскольку установка FreeBSD по умолчанию поставляется с минимальным набором инструментов и пакетов (что правильно), чтобы нам было легче работать.

Оболочка по умолчанию во FreeBSD /bin/sh. Это базовая оболочка без функций автозаполнения. Мы будем использовать что-то лучше. Мы установим zsh.

Сначала установите эти пакеты:

# pkg install zsh gnuls
The package management tool is not yet installed on your system.
Do you want to fetch and install it now? [y/N]: y
Bootstrapping pkg from pkg+http://pkg.FreeBSD.org/freebsd:10:x86:64/latest, please wait...
...

GNULS - это lsпрограмма из Linux. Мы просто хотим иметь одну и ту же lsкоманду в Linux и FreeBSD.

Добавьте обычного пользователя в систему: (замените john своим именем пользователя и не забудьте добавить пользователя в группу wheel)

# adduser
Username: john
Full name: John Doe
Uid (Leave empty for default): 
Login group [john]: 
Login group is john. Invite john into other groups? []: wheel
Login class [default]: 
Shell (sh csh tcsh zsh rzsh nologin) [sh]: zsh
Home directory [/home/john]: 
Home directory permissions (Leave empty for default): 
Use password-based authentication? [yes]: 
Use an empty password? (yes/no) [no]: 
Use a random password? (yes/no) [no]: 
Enter password: 
Enter password again: 
Lock out the account after creation? [no]: 
Username   : john
Password   : *****
Full Name  : John Doe
Uid        : 1001
Class      : 
Groups     : john wheel
Home       : /home/john
Home Mode  : 
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (john) to the user database.
Add another user? (yes/no): no
Goodbye!

Создайте файл конфигурации zsh:

# ee /home/your-username/.zshrc

Скопируйте это в ваш файл .zshrc:

PS1="<%U%m%u>$[%B%1~%b]%(#.#.$) "

bindkey -e
alias su='su -m'
alias du='du -h -d0'
alias df='df -h'
alias l=less
alias ll='gnuls --color=always -l'
alias ls='gnuls --color=always'
alias pkg_ver='pkg version -v -l "<" | > upgrade'

export EDITOR=ee

autoload -U colors && colors
autoload -U promptinit && promptinit
autoload -U compinit && compinit

# History settings
SAVEHIST=1000
HISTSIZE=1000
HISTFILE=~/.history
setopt histignoredups appendhistory

Запустите эту команду: (замените john на ваше имя пользователя)

chown john:john /home/john/.zshrc

Теперь войдите на сервер FreeBSD под своим именем пользователя и измените пароль root по умолчанию:

<vultr>[~]$ su
Password:
<vultr>[~]# passwd 
Changing local password for root
New Password:
Retype New Password:
<vultr>[~]# 

Нам не нужен sendmail. Остановите и отключите этот сервис:

<vultr>[~]# /etc/rc.d/sendmail stop
Stopping sendmail.
Waiting for PIDS: 7843.
sendmail_submit not running? (check /var/run/sendmail.pid).
Stopping sendmail_msp_queue.
Waiting for PIDS: 7846.

Далее мы изменим наш файл rc.conf, чтобы он выглядел более естественным:

# ee /etc/rc.conf

Измените это, чтобы выглядеть так:

#----------- NETWORKING ------------------------------------------------#
hostname="ceph.domain1.com" # replace ceph.domain1.com with your domain
ifconfig_vtnet0="dhcp"
static_routes=linklocal
route_linklocal="-net 169.254.0.0/16 -interface vtnet0"

#--------- SERVICES BSD LOCAL ----------------------------------------#
sshd_enable="YES"
ntpd_enable="YES"

#pf_enable="YES"
#pf_rules="/etc/firewall"
#pf_flags=""
#pflog_enable="YES"              
#pflog_logfile="/var/log/pflog"  
#pflog_flags=""    

sendmail_enable="NONE"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

Редактировать /etc/hostsфайл:

# ee /etc/hosts

Добавьте свой IP-адрес и имя хоста:

::1                     localhost localhost.ceph ceph
127.0.0.1               localhost localhost.ceph ceph
108.61.178.110          ceph.domain1.com       ceph

Установить часовой пояс:

# bsdconfig

По возможности отключайте удаленный доступ для пользователя root. Большинство атак на SSH пытаются получить доступ через учетную запись пользователя root. Всегда подключайтесь с вашим именем пользователя, а затем suс правами root. Только пользователи из wheelгруппы могут suполучить root права. Вот почему мы добавили нашего пользователя в группу wheel.

Отключить root-логин:

# ee /etc/ssh/sshd_config

Раскомментируйте эту строку:

PermitRootLogin no

Перезагружать:

# reboot

После завершения перезагрузки вы увидите следующее сообщение в консоли Vultr:

time correction of 3600 seconds exceeds sanity limit (1000); set clock manually to
correct UTC time.

Вот почему мы должны исправить часы вручную. Выполните следующие команды, suчтобы получить root права:

$ su
Password:
# ntpdate 0.europe.pool.ntp.org

Теперь мы собираемся настроить брандмауэр. OpenBSD PF включен в ядро ​​FreeBSD, поэтому вам не нужно устанавливать какие-либо пакеты.

С помощью eeредактора создайте файл /etc/firewall:

# ee /etc/firewall

Вставьте это: (замените любые IP-адреса вашими)

#######################################################################
me="vtnet0"                
table <bruteforcers> persist    
table <trusted> persist file "/etc/trusted"
icmp_types = "echoreq"          
junk_ports="{ 135,137,138,139,445,68,67,3222 }"
junk_ip="224.0.0.0/4"           

set loginterface vtnet0           
scrub on vtnet0 reassemble tcp no-df random-id

# ---- First rule obligatory "Pass all on loopback"
pass quick on lo0 all           

# ---- Block junk logs
block quick proto { tcp, udp } from any to $junk_ip 
block quick proto { tcp, udp } from any to any port $junk_ports

# ---- Second rule "Block all in and pass all out"
block in log all                
pass out all keep state         

############### FIREWALL ###############################################
# ---- Allow all traffic from my Home
pass quick proto {tcp, udp} from 1.2.3.4 to $me keep state

# ---- block SMTP out 
block quick proto tcp from $me to any port 25

# ---- Allow incoming Web traffic
pass quick proto tcp from any to $me port { 80, 443 } flags S/SA keep state

# ---- Allow my team member SSH access 
pass quick proto tcp from 1.2.3.5 to $me port ssh flags S/SA keep state

# ---- Block bruteforcers
block log quick from <bruteforcers>

# ---- Allow SSH from trusted sources, but block bruteforcers
pass quick proto tcp from <trusted> to $me port ssh \
flags S/SA keep state \
(max-src-conn 10, max-src-conn-rate 20/60, \
overload <bruteforcers> flush global)

# ---- Allow ICMP 
pass in inet proto icmp all icmp-type $icmp_types keep state
pass out inet proto icmp all icmp-type $icmp_types keep state

Создать /etc/trustedфайл. В этом файле мы разместим IP-адреса, которым «доверяем».

# ee /etc/trusted

Добавьте несколько IP-адресов:

# Hosting
1.2.0.0/16

# My friends
1.2.4.0/24

Теперь некоторые объяснения. Нежелательные порты и нежелательные IP-адреса - это только некоторые порты / IP-адреса, которые мы не хотим видеть в журналах. Мы сделали это с этим правилом:

# ---- Block junk logs
block quick proto { tcp, udp } from any to $junk_ip 
block quick proto { tcp, udp } from any to any port $junk_ports

Это просто настройки по умолчанию, и вам не нужно об этом беспокоиться:

icmp_types = "echoreq"                                            
set loginterface vtnet0           
scrub on vtnet0 reassemble tcp no-df random-id
pass quick on lo0 all
block in log all                
pass out all keep state

Это правило блокирует исходящий SMTP-трафик с вашего сервера (который используется по умолчанию в Vultr).

# ---- block SMTP out 
block quick proto tcp from $me to any port 25

За исключением того, bruteforcersчто все остальное довольно просто.

# ---- Allow SSH from trusted sources, but block bruteforcers
pass quick proto tcp from <trusted> to $me port ssh \
flags S/SA keep state \
(max-src-conn 10, max-src-conn-rate 20/60, \
overload <bruteforcers> flush global)

Bruteforcers просто говорит: «Разрешить с <доверенных> IP-адресов порт 22, но с одного исходного IP можно установить только 10 одновременных подключений». Если это больше 10, заблокируйте этот IP и поместите его в таблицу bruteforcers. То же самое касается правила 20/60. Это означает максимум 20 подключений за 60 секунд.

Включить брандмауэр:

# ee /etc/rc.conf

Раскомментируйте эти строки:

pf_enable="YES"
pf_rules="/etc/firewall"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""

Перезагружать:

# reboot 

Если вы все сделали правильно, то сможете войти и брандмауэр будет включен. Вам не нужно перезагружаться каждый раз, когда вы меняете /etc/firewallфайл. Просто делать:

# /etc/rc.d/pf reload

Посмотрите, кто пытается подключиться к вашему серверу в режиме реального времени:

# tcpdump -n -e -ttt -i pflog0

Показать историю:

# tcpdump -n -e -ttt -r /var/log/pflog

Посмотрите, есть ли у вас кто-то в таблице брутфорсеров:

# pfctl -t bruteforcers -T show

Вот и все. Вы успешно внедрили брандмауэр PF на сервере FreeBSD!


Tags: #BSD

Leave a Comment

Как установить TextPattern CMS 4.6.2 на VBS FreeBSD 11 FAMP

Как установить TextPattern CMS 4.6.2 на VBS FreeBSD 11 FAMP

Используете другую систему? TextPattern CMS 4.6.2 - это простая, гибкая, бесплатная система управления контентом (CMS) с открытым исходным кодом, которая позволяет веб-дизайнерам

Как установить форум NodeBB на FreeBSD 12

Как установить форум NodeBB на FreeBSD 12

Используете другую систему? NodeBB - это программное обеспечение для форумов на базе Node.js. Он использует веб-сокеты для мгновенного взаимодействия и уведомления в режиме реального времени. УзелБ

Как установить Monica на FreeBSD 12

Как установить Monica на FreeBSD 12

Используете другую систему? Monica - это система управления личными отношениями с открытым исходным кодом. Думайте об этом как о CRM (популярный инструмент, используемый командами

Как установить Reader Self 3.5 для чтения RSS на FreeBSD 11 FAMP VPS

Как установить Reader Self 3.5 для чтения RSS на FreeBSD 11 FAMP VPS

Используете другую систему? Reader Self 3.5 - это простая и гибкая, бесплатная программа для чтения RSS с открытым исходным кодом и альтернатива Google Reader. Читатель Sel

Как установить X-Cart 5 на FreeBSD 12

Как установить X-Cart 5 на FreeBSD 12

Используете другую систему? X-Cart - чрезвычайно гибкая платформа электронной коммерции с открытым исходным кодом, обладающая множеством функций и интеграций. Исходный код X-Cart доступен

Установите WordPress на OpenBSD 6.2

Установите WordPress на OpenBSD 6.2

Введение WordPress является доминирующей системой управления контентом в Интернете. Он поддерживает все, от блогов до сложных сайтов с динамическим контентом

Как установить MODX Revolution на FreeBSD 11 FAMP VPS

Как установить MODX Revolution на FreeBSD 11 FAMP VPS

Используете другую систему? MODX Revolution - это быстрая, гибкая, масштабируемая система управления контентом (CMS) корпоративного уровня с открытым исходным кодом, написанная на PHP. Это я

OpenBSD как решение для электронной коммерции с PrestaShop и Apache

OpenBSD как решение для электронной коммерции с PrestaShop и Apache

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

Как установить WonderCMS на FreeBSD 12

Как установить WonderCMS на FreeBSD 12

Используете другую систему? WonderCMS - это быстрая и небольшая плоская файловая CMS с открытым исходным кодом, написанная на PHP. Исходный код WonderCMS размещен на Github. Это руководство будет

Как включить TLS 1.3 в Apache на FreeBSD 12

Как включить TLS 1.3 в Apache на FreeBSD 12

Используете другую систему? TLS 1.3 - это версия протокола безопасности транспортного уровня (TLS), который был опубликован в 2018 году в качестве предлагаемого стандарта в RFC 8446.

Как установить стек Nginx, MySQL и PHP (FEMP) на FreeBSD 12.0

Как установить стек Nginx, MySQL и PHP (FEMP) на FreeBSD 12.0

Стек FEMP, который сопоставим со стеком LEMP в Linux, представляет собой набор программного обеспечения с открытым исходным кодом, который обычно устанавливается вместе для включения FreeBS.

Как установить Dolibarr на FreeBSD 12

Как установить Dolibarr на FreeBSD 12

Используете другую систему? Dolibarr - это общедоступное планирование ресурсов предприятия (ERP) и управление взаимоотношениями с клиентами (CRM) для предприятий. Dolibarr

Как установить Paste 2.1 на VBS FreeBSD 11 FAMP

Как установить Paste 2.1 на VBS FreeBSD 11 FAMP

Используете другую систему? Paste 2.1 - это простое и гибкое бесплатное приложение с открытым исходным кодом для хранения кода, текста и многого другого. Это было изначально

Как установить BigTree CMS 4.2 на VBS FreeBSD FAMP

Как установить BigTree CMS 4.2 на VBS FreeBSD FAMP

Используете другую систему? BigTree CMS 4.2 - это быстрая и легкая бесплатная система управления контентом (CMS) корпоративного уровня с открытым исходным кодом и широким

Создать файл подкачки на FreeBSD 10

Создать файл подкачки на FreeBSD 10

В готовом виде серверы Vultr FreeBSD не настроены на использование пространства подкачки. Если вы хотите использовать одноразовый облачный экземпляр, вы, вероятно, не

Как установить BlogoText CMS на FreeBSD 11 FAMP VPS

Как установить BlogoText CMS на FreeBSD 11 FAMP VPS

Используете другую систему? BlogoText CMS - это простая и легкая бесплатная система управления контентом (CMS) с открытым исходным кодом и минималистским блог-движком.

Настройте MariaDB на OpenBSD 6

Настройте MariaDB на OpenBSD 6

В этой статье я покажу вам, как установить MariaDB на OpenBSD 6 и настроить его так, чтобы он был доступен для веб-сервера с поддержкой chroot (Apache или Nginx). Вы будете также

Как установить Subrion 4.1 CMS на FreeBSD 11 FAMP VPS

Как установить Subrion 4.1 CMS на FreeBSD 11 FAMP VPS

Используете другую систему? Subrion 4.1 CMS - это мощная и гибкая система управления контентом с открытым исходным кодом (CMS), которая обеспечивает интуитивно понятный и понятный контент.

Установите TaskServer (taskd) на FreeBSD 11

Установите TaskServer (taskd) на FreeBSD 11

Используете другую систему? TaskWarrior - это инструмент управления временем с открытым исходным кодом, который является улучшением приложения Todo.txt и его клонов. Из-за

Как установить DokuWiki на FreeBSD 12

Как установить DokuWiki на FreeBSD 12

Используете другую систему? DokuWiki - это вики-программа с открытым исходным кодом, написанная на PHP, для которой не требуется база данных. Хранит данные в текстовых файлах. DokuWik

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

Изучение 26 методов анализа больших данных: часть 1

6 невероятных фактов о Nintendo Switch

6 невероятных фактов о Nintendo Switch

Многие из вас знают Switch, который выйдет в марте 2017 года, и его новые функции. Для тех, кто не знает, мы подготовили список функций, которые делают «Switch» обязательным гаджетом.

Технические обещания, которые все еще не выполнены

Технические обещания, которые все еще не выполнены

Вы ждете, когда технологические гиганты выполнят свои обещания? проверить, что осталось недоставленным.

Функциональные возможности уровней эталонной архитектуры больших данных

Функциональные возможности уровней эталонной архитектуры больших данных

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

Как ИИ может вывести автоматизацию процессов на новый уровень?

Как ИИ может вывести автоматизацию процессов на новый уровень?

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

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

CAPTCHA: как долго она может оставаться жизнеспособным методом различения между человеком и ИИ?

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

Технологическая сингулярность: далекое будущее человеческой цивилизации?

Технологическая сингулярность: далекое будущее человеческой цивилизации?

По мере того, как наука развивается быстрыми темпами, принимая на себя большую часть наших усилий, также возрастает риск подвергнуться необъяснимой сингулярности. Прочтите, что может значить для нас необычность.

Телемедицина и удаленное здравоохранение: будущее уже здесь

Телемедицина и удаленное здравоохранение: будущее уже здесь

Что такое телемедицина, дистанционное здравоохранение и их влияние на будущее поколение? Это хорошее место или нет в ситуации пандемии? Прочтите блог, чтобы узнать мнение!

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Вы когда-нибудь задумывались, как хакеры зарабатывают деньги?

Возможно, вы слышали, что хакеры зарабатывают много денег, но задумывались ли вы когда-нибудь о том, как они зарабатывают такие деньги? Давайте обсудим.

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Обновление дополнения к macOS Catalina 10.15.4 вызывает больше проблем, чем решает

Недавно Apple выпустила macOS Catalina 10.15.4, дополнительное обновление для исправления проблем, но похоже, что это обновление вызывает больше проблем, приводящих к поломке компьютеров Mac. Прочтите эту статью, чтобы узнать больше