Come proteggere FreeBSD con PF Firewall

Questo tutorial ti mostrerà come proteggere il tuo server FreeBSD usando il firewall OpenBSD PF. Supponiamo che tu abbia un'installazione pulita di FreeBSD distribuita da Vultr senza che siano stati aggiunti utenti. Faremo altre cose oltre alla configurazione del Firewall che rafforzerà anche la sicurezza del nostro server FreeBSD. Prima della configurazione del firewall, installeremo alcuni pacchetti poiché l'installazione di FreeBSD predefinita viene fornita con un set minimo di strumenti e pacchetti (che è corretto), per facilitarci il lavoro.

La shell di default in FreeBSD è /bin/sh. Questa è una shell di base senza funzioni di completamento automatico. Useremo qualcosa di meglio. Installeremo zsh.

Innanzitutto, installa questi pacchetti:

# 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 è il lsprogramma di Linux. Vogliamo solo avere lo stesso lscomando in Linux e FreeBSD.

Aggiungi un utente normale al sistema: (sostituisci john con il tuo nome utente e non dimenticare di aggiungere l'utente al gruppo ruote)

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

Crea il file di configurazione zsh:

# ee /home/your-username/.zshrc

Copia questo nel tuo file .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

Esegui questo comando: (sostituisci john con il tuo nome utente)

chown john:john /home/john/.zshrc

Ora accedi al server FreeBSD con il tuo nome utente e modifica la password di root predefinita:

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

Non abbiamo bisogno di sendmail. Interrompi e disabilita questo servizio:

<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.

Successivamente, cambieremo il nostro file rc.conf per sembrare più naturale:

# ee /etc/rc.conf

Modificalo in questo modo:

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

Modifica /etc/hostsfile:

# ee /etc/hosts

Aggiungi il tuo indirizzo IP e nome host:

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

Imposta fuso orario:

# bsdconfig

Quando è possibile, disabilitare l'accesso remoto per l'utente root. La maggior parte degli attacchi su SSH proverà ad accedere tramite l'account utente root. Connettiti sempre con il tuo nome utente e quindi sua root. Solo gli utenti del wheelgruppo possono sueseguire il root. Ecco perché abbiamo aggiunto il nostro utente al gruppo ruote.

Disabilita il login root:

# ee /etc/ssh/sshd_config

Rimuovi commento questa riga:

PermitRootLogin no

Reboot:

# reboot

Al termine del riavvio, vedrai un messaggio come questo nella console Vultr:

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

Ecco perché dobbiamo correggere l'orologio manualmente. Segui questi comandi, prima sudi root:

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

Ora configureremo il firewall. OpenBSD PF è incluso nel kernel di FreeBSD, quindi non è necessario installare alcun pacchetto.

Con l' eeeditor, crea il file /etc/firewall:

# ee /etc/firewall

Inserisci questo: (sostituisci tutti gli indirizzi IP con i tuoi)

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

Crea /etc/trustedfile. In questo file, inseriremo gli IP di cui "fidiamo".

# ee /etc/trusted

Aggiungi alcuni IP:

# Hosting
1.2.0.0/16

# My friends
1.2.4.0/24

Ora qualche spiegazione. Le porte spazzatura e gli IP spazzatura sono solo alcune porte / IP che non vogliamo vedere nei registri. Lo abbiamo fatto con questa regola:

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

Queste sono solo impostazioni predefinite e non devi preoccuparti:

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

Questa regola blocca il traffico SMTP in uscita dal tuo server (che è l'impostazione predefinita su Vultr).

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

Tranne bruteforcersil resto è piuttosto semplice.

# ---- 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 dice solo: Consenti da <trusted> IP alla porta 22 ma solo 10 connessioni simultanee possono essere fatte da un IP di origine. Se è superiore a 10, blocca questo IP e inseriscilo nella tabella bruteforcer. Lo stesso vale per la regola 20/60. Significa un massimo di 20 connessioni in 60 secondi.

Abilita firewall:

# ee /etc/rc.conf

Riattiva queste righe:

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

Reboot:

# reboot 

Se hai fatto tutto correttamente, sarai in grado di accedere e il firewall sarà attivato. Non è necessario riavviare ogni volta che si modifica il /etc/firewallfile. Basta fare:

# /etc/rc.d/pf reload

Scopri chi sta provando a connettersi al tuo server in tempo reale:

# tcpdump -n -e -ttt -i pflog0

Mostra cronologia:

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

Vedi se hai qualcuno nella tabella bruteforcers:

# pfctl -t bruteforcers -T show

E questo è tutto. Hai implementato con successo il firewall PF sul server FreeBSD!


Tags: #BSD

Leave a Comment

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Gli attacchi ransomware sono in aumento, ma l'intelligenza artificiale può aiutare ad affrontare l'ultimo virus informatico? L'intelligenza artificiale è la risposta? Leggi qui sai è AI boone o bane

ReactOS: è questo il futuro di Windows?

ReactOS: è questo il futuro di Windows?

ReactOS, un sistema operativo open source e gratuito è qui con l'ultima versione. Può essere sufficiente alle esigenze degli utenti Windows moderni e abbattere Microsoft? Scopriamo di più su questo vecchio stile, ma un'esperienza del sistema operativo più recente.

Rimani connesso tramite lapp desktop WhatsApp 24*7

Rimani connesso tramite lapp desktop WhatsApp 24*7

Whatsapp ha finalmente lanciato l'app desktop per utenti Mac e Windows. Ora puoi accedere facilmente a Whatsapp da Windows o Mac. Disponibile per Windows 8+ e Mac OS 10.9+

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

Leggi questo per sapere come l'intelligenza artificiale sta diventando popolare tra le aziende di piccole dimensioni e come sta aumentando le probabilità di farle crescere e dare un vantaggio ai loro concorrenti.

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Recentemente Apple ha rilasciato macOS Catalina 10.15.4 un aggiornamento supplementare per risolvere i problemi, ma sembra che l'aggiornamento stia causando più problemi che portano al bricking delle macchine mac. Leggi questo articolo per saperne di più

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per l'estrazione dei dati dai Big Data

Che cosè un file system di journaling e come funziona?

Che cosè un file system di journaling e come funziona?

Il nostro computer memorizza tutti i dati in un modo organizzato noto come file system di journaling. È un metodo efficiente che consente al computer di cercare e visualizzare i file non appena si preme search.https://wethegeek.com/?p=94116&preview=true

Singolarità tecnologica: un lontano futuro della civiltà umana?

Singolarità tecnologica: un lontano futuro della civiltà umana?

Man mano che la scienza si evolve a un ritmo rapido, assumendo gran parte dei nostri sforzi, aumentano anche i rischi di sottoporci a una singolarità inspiegabile. Leggi, cosa potrebbe significare per noi la singolarità.

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Limpatto dellintelligenza artificiale nella sanità 2021

Limpatto dellintelligenza artificiale nella sanità 2021

L'intelligenza artificiale nell'assistenza sanitaria ha compiuto grandi passi avanti negli ultimi decenni. Pertanto, il futuro dell'IA in sanità continua a crescere giorno dopo giorno.