So sichern Sie FreeBSD mit der PF Firewall

Dieses Tutorial zeigt Ihnen, wie Sie Ihren FreeBSD-Server mithilfe der OpenBSD PF-Firewall schützen. Wir gehen davon aus, dass Sie eine saubere FreeBSD-Installation von Vultr ohne hinzugefügte Benutzer haben. Neben der Firewall-Konfiguration werden wir noch einige andere Dinge tun, die auch die Sicherheit unseres FreeBSD-Servers erhöhen. Vor der Firewall-Konfiguration werden einige Pakete installiert, da die Standard-FreeBSD-Installation nur einen minimalen Satz von Tools und Paketen enthält (was korrekt ist), um uns die Arbeit zu erleichtern.

Die Standard-Shell in FreeBSD ist /bin/sh. Dies ist eine grundlegende Shell ohne automatische Vervollständigungsfunktionen. Wir werden etwas besseres verwenden. Wir werden installieren zsh.

Installieren Sie zunächst diese Pakete:

# 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 ist das lsProgramm von Linux. Wir wollen nur den gleichen lsBefehl in Linux und FreeBSD haben.

Fügen Sie dem System einen normalen Benutzer hinzu: (Ersetzen Sie John durch Ihren Benutzernamen und vergessen Sie nicht, einen Benutzer zur Radgruppe hinzuzufügen.)

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

Erstellen Sie eine zsh-Konfigurationsdatei:

# ee /home/your-username/.zshrc

Kopieren Sie dies in Ihre .zshrc-Datei:

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

Führen Sie diesen Befehl aus: (Ersetzen Sie John durch Ihren Benutzernamen)

chown john:john /home/john/.zshrc

Melden Sie sich jetzt mit Ihrem Benutzernamen beim FreeBSD-Server an und ändern Sie das Standard-Root-Passwort:

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

Wir brauchen keine Sendmail. Beenden und deaktivieren Sie diesen Dienst:

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

Als nächstes werden wir unsere rc.conf-Datei so ändern, dass sie natürlicher aussieht:

# ee /etc/rc.conf

Ändern Sie es so, dass es so aussieht:

#----------- 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/hostsDatei bearbeiten :

# ee /etc/hosts

Fügen Sie Ihre IP-Adresse und Ihren Hostnamen hinzu:

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

Zeitzone einstellen:

# bsdconfig

Deaktivieren Sie nach Möglichkeit den Remotezugriff für den Root-Benutzer. Die meisten Angriffe auf SSH versuchen, über das Root-Benutzerkonto darauf zuzugreifen. Verbinde dich immer mit deinem Benutzernamen und dann sumit root. Nur Benutzer aus der wheelGruppe können surooten. Deshalb haben wir unseren Benutzer zur Radgruppe hinzugefügt.

Root-Login deaktivieren:

# ee /etc/ssh/sshd_config

Kommentieren Sie diese Zeile aus:

PermitRootLogin no

Neustart:

# reboot

Nach Abschluss des Neustarts wird in der Vultr-Konsole eine Meldung wie die folgende angezeigt:

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

Deshalb müssen wir die Uhr manuell korrigieren. Befolgen Sie diese Befehle, um zuerst suzu rooten:

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

Jetzt konfigurieren wir die Firewall. OpenBSD PF ist im FreeBSD-Kernel enthalten, sodass Sie keine Pakete installieren müssen.

eeErstellen Sie mit dem Editor eine Datei /etc/firewall:

# ee /etc/firewall

Fügen Sie Folgendes ein: (Ersetzen Sie alle IP-Adressen durch Ihre)

#######################################################################
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/trustedDatei erstellen . In diese Datei werden IPs eingefügt, denen wir "vertrauen".

# ee /etc/trusted

Fügen Sie einige IPs hinzu:

# Hosting
1.2.0.0/16

# My friends
1.2.4.0/24

Nun eine Erklärung. Junk-Ports und Junk-IPs sind nur einige Ports / IPs, die wir nicht in Protokollen sehen möchten. Wir haben dies mit dieser Regel getan:

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

Dies sind nur Standardeinstellungen, und Sie müssen sich darüber keine Sorgen machen:

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

Diese Regel blockiert ausgehenden SMTP-Verkehr von Ihrem Server (dies ist die Standardeinstellung bei Vultr).

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

Nur dass bruteforcersder Rest ziemlich einfach ist.

# ---- 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 sagt nur: Erlaube von <vertrauenswürdigen> IPs zu Port 22, aber es können nur 10 gleichzeitige Verbindungen von einer Quell-IP hergestellt werden. Wenn es mehr als 10 ist, blockieren Sie diese IP und legen Sie sie in Tabelle Bruteforcers. Gleiches gilt für die 20/60-Regel. Dies bedeutet maximal 20 Verbindungen in 60 Sekunden.

Firewall aktivieren:

# ee /etc/rc.conf

Kommentieren Sie diese Zeilen aus:

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

Neustart:

# reboot 

Wenn Sie alles richtig gemacht haben, können Sie sich anmelden und die Firewall wird aktiviert. Sie müssen nicht jedes Mal neu starten, wenn Sie die /etc/firewallDatei ändern . Mach einfach:

# /etc/rc.d/pf reload

Sehen Sie in Echtzeit, wer versucht, eine Verbindung zu Ihrem Server herzustellen:

# tcpdump -n -e -ttt -i pflog0

Zeige die Geschichte:

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

Sehen Sie, ob Sie jemanden in der Bruteforcer-Tabelle haben:

# pfctl -t bruteforcers -T show

Und das ist es. Sie haben die PF-Firewall erfolgreich auf dem FreeBSD-Server implementiert!


Tags: #BSD

Leave a Comment

Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?

Kann KI mit zunehmender Anzahl von Ransomware-Angriffen kämpfen?

Ransomware-Angriffe nehmen zu, aber kann KI helfen, den neuesten Computervirus zu bekämpfen? Ist KI die Antwort? Lesen Sie hier, ob KI boone oder bane ist

ReactOS: Ist das die Zukunft von Windows?

ReactOS: Ist das die Zukunft von Windows?

ReactOS, ein quelloffenes und kostenloses Betriebssystem, ist hier mit der neuesten Version. Kann es den Anforderungen moderner Windows-Benutzer genügen und Microsoft zu Fall bringen? Lassen Sie uns mehr über dieses alte, aber neuere Betriebssystem erfahren.

Bleiben Sie in Verbindung über die WhatsApp Desktop App 24*7

Bleiben Sie in Verbindung über die WhatsApp Desktop App 24*7

Whatsapp hat endlich die Desktop-App für Mac- und Windows-Benutzer auf den Markt gebracht. Jetzt können Sie ganz einfach von Windows oder Mac auf WhatsApp zugreifen. Verfügbar für Windows 8+ und Mac OS 10.9+

Wie kann KI die Prozessautomatisierung auf die nächste Stufe heben?

Wie kann KI die Prozessautomatisierung auf die nächste Stufe heben?

Lesen Sie dies, um zu erfahren, wie Künstliche Intelligenz bei kleinen Unternehmen beliebt wird und wie sie die Wahrscheinlichkeit erhöht, sie wachsen zu lassen und ihren Konkurrenten einen Vorsprung zu verschaffen.

macOS Catalina 10.15.4 Supplement Update verursacht mehr Probleme als sie zu lösen

macOS Catalina 10.15.4 Supplement Update verursacht mehr Probleme als sie zu lösen

Vor kurzem hat Apple macOS Catalina 10.15.4 als Ergänzungsupdate veröffentlicht, um Probleme zu beheben, aber es scheint, dass das Update mehr Probleme verursacht, die zum Bricking von Mac-Computern führen. Lesen Sie diesen Artikel, um mehr zu erfahren

13 Tools zur kommerziellen Datenextraktion von Big Data

13 Tools zur kommerziellen Datenextraktion von Big Data

13 Tools zur kommerziellen Datenextraktion von Big Data

Was ist ein Journaling-Dateisystem und wie funktioniert es?

Was ist ein Journaling-Dateisystem und wie funktioniert es?

Unser Computer speichert alle Daten in einer organisierten Weise, die als Journaling-Dateisystem bekannt ist. Es ist eine effiziente Methode, die es dem Computer ermöglicht, Dateien zu suchen und anzuzeigen, sobald Sie auf die Suche klicken.https://wethegeek.com/?p=94116&preview=true

Technologische Singularität: Eine ferne Zukunft der menschlichen Zivilisation?

Technologische Singularität: Eine ferne Zukunft der menschlichen Zivilisation?

Da sich die Wissenschaft schnell weiterentwickelt und einen Großteil unserer Bemühungen übernimmt, steigt auch das Risiko, uns einer unerklärlichen Singularität auszusetzen. Lesen Sie, was Singularität für uns bedeuten könnte.

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Ein Einblick in 26 Big-Data-Analysetechniken: Teil 1

Der Einfluss künstlicher Intelligenz im Gesundheitswesen 2021

Der Einfluss künstlicher Intelligenz im Gesundheitswesen 2021

KI im Gesundheitswesen hat in den letzten Jahrzehnten große Fortschritte gemacht. Somit wächst die Zukunft der KI im Gesundheitswesen immer noch von Tag zu Tag.