Jak zabezpieczyć FreeBSD za pomocą PF Firewall

Ten samouczek pokaże, jak chronić serwer FreeBSD za pomocą zapory ogniowej OpenBSD PF. Zakładamy, że masz czystą instalację FreeBSD wdrożoną przez Vultr bez dodanych użytkowników. Oprócz konfiguracji zapory zrobimy też inne rzeczy, które zwiększą bezpieczeństwo naszego serwera FreeBSD. Przed konfiguracją firewalla zainstalujemy niektóre pakiety, ponieważ domyślna instalacja FreeBSD zawiera minimalny zestaw narzędzi i pakietów (co jest poprawne), aby ułatwić nam pracę.

Domyślna powłoka w FreeBSD to /bin/sh. Jest to podstawowa powłoka bez funkcji autouzupełniania. Użyjemy czegoś lepszego. Zainstalujemy zsh.

Najpierw zainstaluj te pakiety:

# 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 to lsprogram z Linuksa. Chcemy tylko mieć to samo lspolecenie w Linuksie i FreeBSD.

Dodaj normalnego użytkownika do systemu: (zamień John na swoją nazwę użytkownika i nie zapomnij dodać użytkownika do grupy kół)

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

Utwórz plik konfiguracyjny zsh:

# ee /home/your-username/.zshrc

Skopiuj to do pliku .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

Uruchom to polecenie: (zamień John na swoją nazwę użytkownika)

chown john:john /home/john/.zshrc

Teraz zaloguj się do serwera FreeBSD przy użyciu swojej nazwy użytkownika i zmień domyślne hasło roota:

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

Nie potrzebujemy sendmaila. Zatrzymaj i wyłącz tę usługę:

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

Następnie zmienimy nasz plik rc.conf, aby wyglądał bardziej naturalnie:

# ee /etc/rc.conf

Zmień go, aby wyglądał następująco:

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

Edytuj /etc/hostsplik:

# ee /etc/hosts

Dodaj swój adres IP i nazwę hosta:

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

Ustaw strefę czasową:

# bsdconfig

Gdy tylko możesz, wyłącz dostęp zdalny dla użytkownika root. Większość ataków na SSH próbuje uzyskać dostęp za pośrednictwem konta użytkownika root. Zawsze łącz się ze swoją nazwą użytkownika, a następnie suzrootuj. Tylko użytkownicy z wheelgrupy mogą surootować. Dlatego dodaliśmy naszego użytkownika do grupy kół.

Wyłącz logowanie roota:

# ee /etc/ssh/sshd_config

Odkomentuj tę linię:

PermitRootLogin no

Restart:

# reboot

Po zakończeniu ponownego uruchomienia w konsoli Vultr zobaczysz taki komunikat:

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

Dlatego musimy ręcznie skorygować zegar. Wykonaj następujące polecenia, suaby najpierw zrootować:

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

Teraz skonfigurujemy zaporę ogniową. OpenBSD PF jest zawarty w jądrze FreeBSD, więc nie musisz instalować żadnych pakietów.

Za pomocą eeedytora utwórz plik /etc/firewall:

# ee /etc/firewall

Wstaw to: (zamień adresy IP na swoje)

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

Utwórz /etc/trustedplik. W tym pliku umieścimy adresy IP, którym „ufamy”.

# ee /etc/trusted

Dodaj kilka adresów IP:

# Hosting
1.2.0.0/16

# My friends
1.2.4.0/24

Teraz jakieś wyjaśnienie. Niepotrzebne porty i niepotrzebne adresy IP to tylko niektóre porty / adresy IP, których nie chcemy widzieć w logach. Zrobiliśmy to z tą regułą:

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

Są to tylko wartości domyślne i nie musisz się o to martwić:

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

Ta reguła blokuje wychodzący ruch SMTP z twojego serwera (który jest domyślny w Vultr).

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

Tyle bruteforcersże reszta jest dość prosta.

# ---- 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 mówi po prostu: Zezwól z <zaufanych> adresów IP na port 22, ale tylko 10 jednoczesnych połączeń może być nawiązanych z jednego źródłowego adresu IP. Jeśli jest więcej niż 10, zablokuj ten adres IP i umieść go w tabeli bruteforcers. To samo dotyczy reguły 20/60. Oznacza to maksymalnie 20 połączeń w 60 sekund.

Włącz Firewall:

# ee /etc/rc.conf

Odkomentuj te linie:

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

Restart:

# reboot 

Jeśli zrobiłeś wszystko dobrze, będziesz mógł się zalogować i zapora zostanie włączona. Nie musisz restartować się przy każdej zmianie /etc/firewallpliku. Po prostu zrób:

# /etc/rc.d/pf reload

Zobacz, kto próbuje połączyć się z Twoim serwerem w czasie rzeczywistym:

# tcpdump -n -e -ttt -i pflog0

Pokaż historię:

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

Sprawdź, czy masz kogoś w tabeli bruteforcers:

# pfctl -t bruteforcers -T show

I to wszystko. Udało Ci się zaimplementować zaporę PF na serwerze FreeBSD!


Tags: #BSD

Leave a Comment

Jak zainstalować TextPattern CMS 4.6.2 na FreeBSD 11 FAMP VPS

Jak zainstalować TextPattern CMS 4.6.2 na FreeBSD 11 FAMP VPS

Używasz innego systemu? TextPattern CMS 4.6.2 to prosty, elastyczny, bezpłatny i otwarty system zarządzania treścią (CMS), który umożliwia projektantom stron internetowych

Jak zainstalować forum NodeBB na FreeBSD 12

Jak zainstalować forum NodeBB na FreeBSD 12

Używasz innego systemu? NodeBB to oprogramowanie forum oparte na Node.js. Wykorzystuje gniazda sieciowe do natychmiastowych interakcji i powiadomień w czasie rzeczywistym. NodeB

Chroń resolv.conf przed DHCP na FreeBSD 10

Chroń resolv.conf przed DHCP na FreeBSD 10

Jeśli korzystasz z własnego programu tłumaczącego lub chcesz użyć jednego z zewnętrznych dostawców usług, może się okazać, że plik /etc/resolv.conf jest zastępowany przez DHCP

Jak zainstalować X-Cart 5 na FreeBSD 12

Jak zainstalować X-Cart 5 na FreeBSD 12

Używasz innego systemu? X-Cart to niezwykle elastyczna platforma eCommerce typu open source z mnóstwem funkcji i integracji. Kod źródłowy X-Cart jest hostem

Zainstaluj WordPress na OpenBSD 6.2

Zainstaluj WordPress na OpenBSD 6.2

Wprowadzenie WordPress to dominujący system zarządzania treścią w Internecie. Obsługuje wszystko, od blogów po złożone witryny z dynamiczną treścią

OpenBSD jako rozwiązanie e-commerce z PrestaShop i Apache

OpenBSD jako rozwiązanie e-commerce z PrestaShop i Apache

Wprowadzenie W tym samouczku pokazano OpenBSD jako rozwiązanie e-commerce wykorzystujące PrestaShop i Apache. Wymagany jest Apache, ponieważ PrestaShop ma złożony UR

Jak zainstalować Anchor CMS na FreeBSD 11 FAMP VPS

Jak zainstalować Anchor CMS na FreeBSD 11 FAMP VPS

Używasz innego systemu? Anchor CMS to bardzo prosty i niezwykle lekki, darmowy i otwarty system zarządzania treścią (CMS) Blog Engine, który

Jak zainstalować Tiny Tiny RSS Reader na FreeBSD 11 FAMP VPS

Jak zainstalować Tiny Tiny RSS Reader na FreeBSD 11 FAMP VPS

Używasz innego systemu? Tiny Tiny RSS Reader to darmowy i oparty na otwartych źródłach, internetowy host czytnika i agregatora kanałów informacyjnych (RSS / Atom), przeznaczony do przydzielania

Jak zainstalować WonderCMS na FreeBSD 12

Jak zainstalować WonderCMS na FreeBSD 12

Używasz innego systemu? WonderCMS jest otwartym, szybkim i małym, płaskim plikiem CMS napisanym w PHP. Kod źródłowy WonderCMS jest hostowany na Github. Ten przewodnik wil

Jak włączyć TLS 1.3 w Apache na FreeBSD 12

Jak włączyć TLS 1.3 w Apache na FreeBSD 12

Używasz innego systemu? TLS 1.3 to wersja protokołu Transport Layer Security (TLS), która została opublikowana w 2018 roku jako proponowany standard w RFC 8446

Jak zainstalować Dolibarr na FreeBSD 12

Jak zainstalować Dolibarr na FreeBSD 12

Używasz innego systemu? Dolibarr to oprogramowanie do planowania zasobów przedsiębiorstwa (ERP) i zarządzania relacjami z klientami (CRM) dla firm. Dolibarr

Jak zainstalować Paste 2.1 na FreeBSD 11 FAMP VPS

Jak zainstalować Paste 2.1 na FreeBSD 11 FAMP VPS

Używasz innego systemu? Paste 2.1 to prosta i elastyczna, darmowa i otwarta aplikacja pastebin do przechowywania kodu, tekstu i innych. To było początkowo

Jak zainstalować BigTree CMS 4.2 na FreeBSD FAMP VPS

Jak zainstalować BigTree CMS 4.2 na FreeBSD FAMP VPS

Używasz innego systemu? BigTree CMS 4.2 to szybki i lekki, bezpłatny i otwarty system zarządzania treścią dla przedsiębiorstw (CMS) z rozbudowanym

Utwórz plik wymiany na FreeBSD 10

Utwórz plik wymiany na FreeBSD 10

Po wyjęciu z pudełka serwery Vultr FreeBSD nie są skonfigurowane tak, aby zawierały przestrzeń wymiany. Jeśli twoja intencja dotyczy jednorazowego wystąpienia chmury, prawdopodobnie nie jest to konieczne

Skonfiguruj MariaDB na OpenBSD 6

Skonfiguruj MariaDB na OpenBSD 6

W tym artykule pokażę, jak zainstalować MariaDB na OpenBSD 6 i skonfigurować, aby był dostępny dla chrootowanego serwera WWW (Apache lub Nginx). Będziesz także

Jak zainstalować stos Apache, MySQL i PHP (FAMP) na FreeBSD 12.0

Jak zainstalować stos Apache, MySQL i PHP (FAMP) na FreeBSD 12.0

Wprowadzenie Stos FAMP, który jest porównywalny ze stosem LAMP w systemie Linux, to zbiór oprogramowania typu open source, które zazwyczaj instaluje się razem

Jak zainstalować DokuWiki na FreeBSD 12

Jak zainstalować DokuWiki na FreeBSD 12

Używasz innego systemu? DokuWiki to program wiki typu open source napisany w PHP, który nie wymaga bazy danych. Przechowuje dane w plikach tekstowych. DokuWik

Konfigurowanie platformy Ghost Professional Publishing w OpenBSD 6

Konfigurowanie platformy Ghost Professional Publishing w OpenBSD 6

Ghost to najnowszy i najlepszy start w rywalizacji z WordPress. Tworzenie motywów jest szybkie i łatwe do nauczenia się, ponieważ twórcy Ghost zdecydowali się użyć obu

Jak zainstalować album fotograficzny Lychee 3.1 na FreeBSD 11 FAMP VPS

Jak zainstalować album fotograficzny Lychee 3.1 na FreeBSD 11 FAMP VPS

Używasz innego systemu? Lychee 3.1 Photo Album to proste i elastyczne, bezpłatne i otwarte narzędzie do zarządzania zdjęciami, które działa na serwerze VPS. Instaluje się

Zmień rozmiar puli pamięci ZFS na FreeBSD / TrueOS

Zmień rozmiar puli pamięci ZFS na FreeBSD / TrueOS

Podczas aktualizacji instancji VPS na Vultr system plików Linux jest automatycznie zmieniany. Podczas uruchamiania FreeBSD z zaawansowanym systemem plików ZFS, niektóre ręczne

Funkcjonalności warstw architektury referencyjnej Big Data

Funkcjonalności warstw architektury referencyjnej Big Data

Przeczytaj blog, aby w najprostszy sposób poznać różne warstwy w architekturze Big Data i ich funkcjonalności.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Rewolucyjne wynalazki Google, które ułatwią Twoje życie.

Chcesz zobaczyć rewolucyjne wynalazki Google i jak te wynalazki zmieniły życie każdego człowieka dzisiaj? Następnie czytaj na blogu, aby zobaczyć wynalazki Google.

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

13 komercyjnych narzędzi do ekstrakcji danych z Big Data

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Pozostań w kontakcie dzięki aplikacji WhatsApp na komputer 24*7

Whatsapp w końcu uruchomił aplikację Desktop dla użytkowników komputerów Mac i Windows. Teraz możesz łatwo uzyskać dostęp do Whatsapp z systemu Windows lub Mac. Dostępne dla Windows 8+ i Mac OS 10.9+

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

5 przykładów, które dowodzą, że energetyka jądrowa nie zawsze jest zła

Energia jądrowa jest zawsze pogardzana, nigdy jej nie szanujemy z powodu przeszłych wydarzeń, ale nie zawsze jest zła. Przeczytaj post, aby dowiedzieć się więcej na ten temat.

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Friday Essential: Co się stało z samochodami sterowanymi przez sztuczną inteligencję?

Koncepcja autonomicznych samochodów, które wyjadą na drogi za pomocą sztucznej inteligencji, to marzenie, które mamy już od jakiegoś czasu. Ale pomimo kilku obietnic nigdzie ich nie widać. Przeczytaj ten blog, aby dowiedzieć się więcej…

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Czy AI może walczyć z rosnącą liczbą ataków ransomware?

Wzrasta liczba ataków ransomware, ale czy sztuczna inteligencja może pomóc w radzeniu sobie z najnowszym wirusem komputerowym? Czy AI jest odpowiedzią? Przeczytaj tutaj, wiedz, że sztuczna inteligencja jest zmorą lub zgubą

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

5 przydatnych narzędzi sztucznej inteligencji, które uproszczą Twoje życie

Sztuczna inteligencja nie jest dla ludzi nową nazwą. Ponieważ sztuczna inteligencja jest włączona do każdego strumienia, jednym z nich jest opracowywanie narzędzi zwiększających ludzką wydajność i dokładność. Skorzystaj z tych niesamowitych narzędzi uczenia maszynowego i uprość swoje codzienne zadania.

Wgląd w 26 technik analizy Big Data: część 2

Wgląd w 26 technik analizy Big Data: część 2

Zawsze potrzebujemy Big Data Analytics do efektywnego zarządzania danymi. W tym artykule omówiliśmy kilka technik analizy Big Data. Sprawdź ten artykuł.

Ataki DDOS: krótki przegląd

Ataki DDOS: krótki przegląd

Czy jesteś również ofiarą ataków DDOS i nie masz pewności co do metod zapobiegania? Przeczytaj ten artykuł, aby rozwiązać swoje pytania.