Как да защитите FreeBSD с PF защитна стена

Този урок ще ви покаже как да защитите вашия 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 с вашето потребителско име и не забравяйте да добавите потребител към групата на колелата)

# 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:

# 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, но само 10 едновременни връзки могат да бъдат направени от един IP източник. Ако е повече от 10, блокирайте този IP и го поставете в таблицата bruteforcer. Същото важи и за правилото 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

Вижте дали имате някой в ​​масата на bruteforcer:

# pfctl -t bruteforcers -T show

И това е. Вие успешно внедрихте PF защитна стена на FreeBSD сървър!

Оставете коментар

Възходът на машините: Реални приложения на AI

Възходът на машините: Реални приложения на AI

Изкуственият интелект не е в бъдещето, тук е точно в настоящето. В този блог Прочетете как приложенията за изкуствен интелект са повлияли на различни сектори.

DDOS атаки: кратък преглед

DDOS атаки: кратък преглед

Вие също сте жертва на DDOS атаки и сте объркани относно методите за превенция? Прочетете тази статия, за да разрешите вашите запитвания.

Чудили ли сте се как хакерите печелят пари?

Чудили ли сте се как хакерите печелят пари?

Може би сте чували, че хакерите печелят много пари, но чудили ли сте се някога как печелят такива пари? нека обсъдим.

Революционни изобретения на Google, които ще улеснят живота ви.

Революционни изобретения на Google, които ще улеснят живота ви.

Искате ли да видите революционни изобретения на Google и как тези изобретения промениха живота на всяко човешко същество днес? След това прочетете в блога, за да видите изобретенията на Google.

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Friday Essential: Какво се случи с колите, задвижвани от изкуствен интелект?

Концепцията за самоуправляващи се автомобили да тръгват по пътищата с помощта на изкуствен интелект е мечта, която имаме от известно време. Но въпреки няколкото обещания, те не се виждат никъде. Прочетете този блог, за да научите повече…

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

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

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

Функционалности на референтните архитектурни слоеве за големи данни

Функционалности на референтните архитектурни слоеве за големи данни

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

Еволюция на съхранението на данни – инфографика

Еволюция на съхранението на данни – инфографика

Методите за съхранение на данните може да се развиват от раждането на данните. Този блог обхваща развитието на съхранението на данни на базата на инфографика.

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

6 невероятни предимства от наличието на интелигентни домашни устройства в живота ни

В този дигитално задвижван свят устройствата за интелигентен дом се превърнаха в решаваща част от живота. Ето няколко невероятни предимства на интелигентните домашни устройства за това как те правят живота ни струващ и по-опростен.

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Актуализацията на допълнението на macOS Catalina 10.15.4 причинява повече проблеми, отколкото решава

Наскоро Apple пусна macOS Catalina 10.15.4 допълнителна актуализация за отстраняване на проблеми, но изглежда, че актуализацията причинява повече проблеми, водещи до блокиране на mac машини. Прочетете тази статия, за да научите повече