Как защитить 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

Изучение 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. Прочтите эту статью, чтобы узнать больше