Ky tutorial do t'ju tregojë se si të mbroni serverin tuaj FreeBSD duke përdorur firewall-in OpenBSD PF. Ne do të supozojmë se ju keni një instalim të pastër FreeBSD të vendosur nga Vultr pa asnjë përdorues të shtuar. Ne do të bëjmë disa gjëra të tjera përveç konfigurimit të Firewall-it, të cilat gjithashtu do të forcojnë sigurinë e serverit tonë FreeBSD. Përpara konfigurimit të murit të zjarrit, ne do të instalojmë disa paketa pasi instalimi i parazgjedhur i FreeBSD vjen me një grup minimal mjetesh dhe paketash (që është e saktë), për ta bërë më të lehtë punën për ne.
Predha e paracaktuar në FreeBSD është /bin/sh. Kjo është një guaskë bazë pa funksione të plotësimit automatik. Do të përdorim diçka më të mirë. Ne do të instalojmë zsh.
Së pari, instaloni këto paketa:
# 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 është lsprogrami nga Linux. Thjesht duam të kemi të njëjtën lskomandë në Linux dhe FreeBSD.
Shtoni një përdorues normal në sistem: (zëvendësoni John me emrin tuaj të përdoruesit dhe mos harroni të shtoni përdorues në grupin e rrotave)
# 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!
Krijoni skedarin e konfigurimit zsh:
# ee /home/your-username/.zshrc
Kopjojeni këtë në skedarin tuaj .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
Ekzekutoni këtë komandë: (zëvendësoni John me emrin tuaj të përdoruesit)
chown john:john /home/john/.zshrc
Tani, identifikohuni në serverin FreeBSD me emrin tuaj të përdoruesit dhe ndryshoni fjalëkalimin e paracaktuar të rrënjës:
<vultr>[~]$ su
Password:
<vultr>[~]# passwd
Changing local password for root
New Password:
Retype New Password:
<vultr>[~]#
Nuk kemi nevojë për postë elektronike. Ndaloni dhe çaktivizoni këtë shërbim:
<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.
Më pas, ne do të ndryshojmë skedarin tonë rc.conf që të duket më i natyrshëm:
# ee /etc/rc.conf
Ndryshojeni që të duket kështu:
#----------- 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"
Redakto /etc/hostsskedarin:
# ee /etc/hosts
Shtoni adresën tuaj IP dhe emrin e hostit:
::1 localhost localhost.ceph ceph
127.0.0.1 localhost localhost.ceph ceph
108.61.178.110 ceph.domain1.com ceph
Cakto zonën kohore:
# bsdconfig
Sa herë që mundeni, çaktivizoni aksesin në distancë për përdoruesin rrënjë. Shumica e sulmeve në SSH do të përpiqen të hyjnë përmes llogarisë së përdoruesit rrënjë. Gjithmonë lidheni me emrin tuaj të përdoruesit dhe më pas sume root. Vetëm përdoruesit nga wheelgrupi mund sutë rrënjë. Kjo është arsyeja pse ne shtuam përdoruesin tonë në grupin e rrotave.
Çaktivizo hyrjen në rrënjë:
# ee /etc/ssh/sshd_config
Zhkomentoni këtë rresht:
PermitRootLogin no
Rinisja:
# reboot
Pasi të përfundojë rindezja, do të shihni një mesazh si ky në tastierën Vultr:
time correction of 3600 seconds exceeds sanity limit (1000); set clock manually to
correct UTC time.
Kjo është arsyeja pse ne duhet të korrigjojmë orën me dorë. Ndiqni këto komanda, së pari supër të root:
$ su
Password:
# ntpdate 0.europe.pool.ntp.org
Tani, ne do të konfigurojmë murin e zjarrit. OpenBSD PF përfshihet në kernelin FreeBSD, kështu që nuk keni nevojë të instaloni asnjë paketë.
Me eeredaktuesin, krijoni skedarin /etc/firewall:
# ee /etc/firewall
Fusni këtë: (zëvendësoni çdo adresë IP me tuajën)
#######################################################################
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
Krijo /etc/trustedskedar. Në këtë skedar do të vendosim IP-të që i “besojmë”.
# ee /etc/trusted
Shtoni disa IP:
# Hosting
1.2.0.0/16
# My friends
1.2.4.0/24
Tani disa shpjegime. Portat e padëshiruara dhe IP-të e padëshiruara janë vetëm disa porte/IP që ne nuk duam t'i shohim në regjistra. Ne e kemi bërë këtë me këtë rregull:
# ---- 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
Këto janë vetëm parazgjedhje dhe nuk keni pse të shqetësoheni për këtë:
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
Ky rregull bllokon trafikun dalës SMTP nga serveri juaj (i cili është i paracaktuar në Vultr).
# ---- block SMTP out
block quick proto tcp from $me to any port 25
Përveçse bruteforcerspjesa tjetër është mjaft e drejtpërdrejtë.
# ---- 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 thjesht thotë: Lejo nga IP <trusted> në portin 22 por vetëm 10 lidhje të njëkohshme mund të bëhen nga një IP burimi. Nëse është më shumë se 10, bllokoni këtë IP dhe vendoseni në tabelën bruteforcers. E njëjta gjë vlen edhe për rregullin 20/60. Do të thotë maksimumi 20 lidhje në 60 sekonda.
Aktivizo murin e zjarrit:
# ee /etc/rc.conf
Zhkomentoni këto rreshta:
pf_enable="YES"
pf_rules="/etc/firewall"
pf_flags=""
pflog_enable="YES"
pflog_logfile="/var/log/pflog"
pflog_flags=""
Rinisja:
# reboot
Nëse keni bërë gjithçka siç duhet, atëherë do të jeni në gjendje të identifikoheni dhe muri i zjarrit do të aktivizohet. Ju nuk keni nevojë të rindizni çdo herë që ndryshoni /etc/firewallskedarin. Vetëm Bëje:
# /etc/rc.d/pf reload
Shihni kush po përpiqet të lidhet me serverin tuaj në kohë reale:
# tcpdump -n -e -ttt -i pflog0
Shfaq historikun:
# tcpdump -n -e -ttt -r /var/log/pflog
Shihni nëse keni dikë në tabelën e bruteforcers:
# pfctl -t bruteforcers -T show
Dhe kjo eshte. Ju keni implementuar me sukses murin e zjarrit PF në serverin FreeBSD!