Hoe FreeBSD te beveiligen met PF Firewall

Deze tutorial laat u zien hoe u uw FreeBSD-server kunt beschermen met OpenBSD PF firewall. We gaan ervan uit dat u een schone FreeBSD-installatie hebt geïmplementeerd door Vultr zonder dat gebruikers zijn toegevoegd. We zullen naast Firewall-configuratie nog een aantal andere dingen doen, die ook de beveiliging van onze FreeBSD-server zullen verbeteren. Vóór de firewallconfiguratie zullen we enkele pakketten installeren aangezien de standaard FreeBSD-installatie wordt geleverd met een minimale set tools en pakketten (wat correct is), om het ons gemakkelijker te maken om te werken.

De standaardshell in FreeBSD is /bin/sh. Dit is een basishell zonder auto-complete functies. We zullen iets beters gebruiken. We zullen installeren zsh.

Installeer eerst deze pakketten:

# 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 is het lsprogramma van Linux. We willen gewoon dezelfde lsopdracht hebben in Linux en FreeBSD.

Voeg een normale gebruiker toe aan het systeem: (vervang john door je gebruikersnaam en vergeet niet om gebruiker toe te voegen aan de wielgroep)

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

Maak een zsh-configuratiebestand aan:

# ee /home/your-username/.zshrc

Kopieer dit naar uw .zshrc-bestand:

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

Voer deze opdracht uit: (vervang John door uw gebruikersnaam)

chown john:john /home/john/.zshrc

Log nu in op de FreeBSD-server met uw gebruikersnaam en wijzig het standaard root-wachtwoord:

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

We hebben geen sendmail nodig. Stop en schakel deze service uit:

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

Vervolgens zullen we ons rc.conf-bestand wijzigen om er natuurlijker uit te zien:

# ee /etc/rc.conf

Verander het om er zo uit te zien:

#----------- 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/hostsBestand bewerken :

# ee /etc/hosts

Voeg uw IP-adres en hostnaam toe:

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

Tijdzone instellen:

# bsdconfig

Schakel indien mogelijk externe toegang voor de rootgebruiker uit. De meeste aanvallen op SSH zullen proberen toegang te krijgen via het root-gebruikersaccount. Maak altijd verbinding met uw gebruikersnaam en vervolgens sumet rooten. Alleen gebruikers uit de wheelgroep kunnen surooten. Daarom hebben we onze gebruiker toegevoegd aan de wielgroep.

Schakel root-login uit:

# ee /etc/ssh/sshd_config

Geef commentaar op deze regel:

PermitRootLogin no

Herstart:

# reboot

Nadat het opnieuw opstarten is voltooid, ziet u een bericht als dit in de Vultr-console:

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

Daarom moeten we de klok handmatig corrigeren. Volg deze opdrachten, eerst suom te rooten:

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

Nu gaan we de firewall configureren. OpenBSD PF is opgenomen in de FreeBSD-kernel, dus u hoeft geen pakketten te installeren.

eeMaak met de editor een bestand /etc/firewall:

# ee /etc/firewall

Voeg dit in: (vervang alle IP-adressen door die van u)

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

Maak een /etc/trustedbestand. In dit bestand zullen we IP's plaatsen die we "vertrouwen".

# ee /etc/trusted

Voeg enkele IP's toe:

# Hosting
1.2.0.0/16

# My friends
1.2.4.0/24

Nu wat uitleg. Ongewenste poorten en ongewenste IP's zijn slechts enkele poorten / IP's die we niet in logboeken willen zien. We hebben dit gedaan met deze regel:

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

Dit zijn slechts standaardinstellingen en u hoeft zich daar geen zorgen over te maken:

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

Deze regel blokkeert uitgaand SMTP-verkeer van uw server (wat de standaard is op Vultr).

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

Behalve dat bruteforcersde rest vrij rechttoe rechtaan is.

# ---- 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 zegt gewoon: Sta toe van <vertrouwde> IP's naar poort 22, maar er kunnen slechts 10 gelijktijdige verbindingen worden gemaakt vanaf één bron-IP. Als het meer dan 10 is, blokkeer dan dit IP-adres en zet het in de tabel bruteforcers. Hetzelfde geldt voor de 20/60 regel. Het betekent een maximum van 20 verbindingen in 60 seconden.

Firewall aanzetten:

# ee /etc/rc.conf

Maak commentaar op deze regels:

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

Herstart:

# reboot 

Als je alles goed hebt gedaan, kun je inloggen en wordt de firewall ingeschakeld. U hoeft niet elke keer dat u het /etc/firewallbestand wijzigt opnieuw op te starten . Gewoon doen:

# /etc/rc.d/pf reload

Zie in realtime wie er verbinding probeert te maken met uw server:

# tcpdump -n -e -ttt -i pflog0

Toon geschiedenis:

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

Kijk of je iemand in de tabel met bruteforcers hebt:

# pfctl -t bruteforcers -T show

En dat is het. U heeft de PF-firewall met succes op de FreeBSD-server geïmplementeerd!


Tags: #BSD

Leave a Comment

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek

ReactOS: is dit de toekomst van Windows?

ReactOS: is dit de toekomst van Windows?

ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.

Blijf verbonden via WhatsApp Desktop-app 24 * 7

Blijf verbonden via WhatsApp Desktop-app 24 * 7

WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

Wat is een logboekbestandssysteem en hoe werkt het?

Wat is een logboekbestandssysteem en hoe werkt het?

Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.