PF Güvenlik Duvarı ile FreeBSD Güvenliği

Bu eğitici, FreeBSD sunucunuzu OpenBSD PF güvenlik duvarını kullanarak nasıl koruyacağınızı gösterecektir. Hiçbir kullanıcı eklenmeden Vultr tarafından dağıtılan temiz bir FreeBSD kurulumunuz olduğunu varsayacağız. Güvenlik Duvarı yapılandırmasının yanında FreeBSD sunucumuzun güvenliğini de artıracak başka şeyler yapacağız. Güvenlik duvarı yapılandırmasından önce, varsayılan FreeBSD yüklemesinin çalışmamızı kolaylaştırmak için en az araç ve paket (doğru) olduğu için bazı paketler yükleyeceğiz.

FreeBSD'deki varsayılan kabuk şudur /bin/sh. Bu, otomatik tamamlama işlevi olmayan temel bir kabuktur. Daha iyi bir şey kullanacağız. Yükleyeceğiz zsh.

İlk olarak, şu paketleri yükleyin:

# 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, lsLinux'un programıdır. Sadece lsLinux ve FreeBSD'de aynı komuta sahip olmak istiyoruz .

Sisteme normal bir kullanıcı ekleyin: (john'u kullanıcı adınızla değiştirin ve tekerlek grubuna kullanıcı eklemeyi unutmayın)

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

Zsh yapılandırma dosyası oluşturun:

# ee /home/your-username/.zshrc

Bunu .zshrc dosyanıza kopyalayın:

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

Bu komutu çalıştırın: (john'u kullanıcı adınızla değiştirin)

chown john:john /home/john/.zshrc

Şimdi kullanıcı adınızla FreeBSD sunucusuna giriş yapın ve varsayılan kök parolayı değiştirin:

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

Sendmail'e ihtiyacımız yok. Bu hizmeti durdurun ve devre dışı bırakın:

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

Daha sonra, daha doğal görünmek için rc.conf dosyamızı değiştireceğiz:

# ee /etc/rc.conf

Şöyle görünecek şekilde değiştirin:

#----------- 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/hostsDosyayı düzenle :

# ee /etc/hosts

IP adresinizi ve ana bilgisayar adınızı ekleyin:

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

Saat dilimini ayarla:

# bsdconfig

Mümkün olduğunda, kök kullanıcı için uzaktan erişimi devre dışı bırakın. SSH'ye yapılan saldırıların çoğu kök kullanıcı hesabı üzerinden erişmeye çalışacaktır. Her zaman kullanıcı adınızla ve daha sonra suroot ile bağlantı kurun . Yalnızca wheelgruptaki kullanıcılar suroot atabilir . Bu yüzden kullanıcılarımızı tekerlek grubuna ekledik.

Kök girişini devre dışı bırak:

# ee /etc/ssh/sshd_config

Bu satırı kaldır:

PermitRootLogin no

Yeniden Başlatma:

# reboot

Yeniden başlatma işlemi bittikten sonra, Vultr konsolunda şöyle bir mesaj göreceksiniz:

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

Bu yüzden saati manuel olarak düzeltmemiz gerekiyor. İlk suönce root yapmak için şu komutları izleyin :

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

Şimdi güvenlik duvarını yapılandıracağız. OpenBSD PF, FreeBSD çekirdeğine dahil edilmiştir, bu nedenle herhangi bir paket yüklemenize gerek yoktur.

eeEditör ile dosya oluşturun /etc/firewall:

# ee /etc/firewall

Bunu ekleyin: (tüm IP adreslerini kendinizle değiştirin)

#######################################################################
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/trustedDosya oluştur . Bu dosyaya "güvendiğimiz" IP'leri koyacağız.

# ee /etc/trusted

Bazı IP'ler ekleyin:

# Hosting
1.2.0.0/16

# My friends
1.2.4.0/24

Şimdi biraz açıklama. İstenmeyen bağlantı noktaları ve önemsiz IP'ler, günlüklerde görmek istemediğimiz bazı bağlantı noktaları / IP'lerdir. Bunu şu kuralla yaptık:

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

Bunlar sadece varsayılanlardır ve bunun için endişelenmenize gerek yoktur:

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

Bu kural, sunucunuzdan giden SMTP trafiğini engeller (Vultr'da varsayılan değerdir).

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

bruteforcersGerisi hariç oldukça düz.

# ---- 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 şunları söylüyor: <trusted> IP'lerinin port 22'ye izin ver, ancak bir kaynak IP'den sadece 10 eşzamanlı bağlantı yapılabilir. 10'dan fazla ise, bu IP'yi engelleyin ve tablo bruteforcers'a koyun. Aynı şey 20/60 kuralı için de geçerlidir. 60 saniyede maksimum 20 bağlantı anlamına gelir.

Güvenlik duvarını Etkinleştir:

# ee /etc/rc.conf

Bu satırları kaldır:

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

Yeniden Başlatma:

# reboot 

Her şeyi doğru yaptıysanız, giriş yapabileceksiniz ve güvenlik duvarı etkinleştirilecektir. Dosyayı her değiştirdiğinizde yeniden başlatmanız gerekmez /etc/firewall. Sadece yap:

# /etc/rc.d/pf reload

Sunucunuza gerçek zamanlı olarak kimin bağlanmaya çalıştığını görün:

# tcpdump -n -e -ttt -i pflog0

Geçmişi göster:

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

Bruteforcers tablosunda birisi olup olmadığına bakın:

# pfctl -t bruteforcers -T show

Ve bu kadar. FreeBSD sunucusunda PF güvenlik duvarını başarıyla uyguladınız!


Tags: #BSD

Leave a Comment

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

26 Büyük Veri Analitik Tekniğine Bir Bakış: 1. Bölüm

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Nintendo Switch Hakkında Son Derece Çılgın 6 Şey

Birçoğunuz Switch'in Mart 2017'de çıkacağını ve yeni özelliklerini biliyorsunuz. Bilmeyenler için, 'Switch'i 'olmazsa olmaz bir gadget' yapan özelliklerin bir listesini hazırladık.

Hala Teslim Edilmeyen Teknoloji Sözleri

Hala Teslim Edilmeyen Teknoloji Sözleri

Teknoloji devlerinin sözlerini yerine getirmesini mi bekliyorsunuz? teslim edilmeyenleri kontrol edin.

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Referans Mimarisi Katmanlarının İşlevleri

Büyük Veri Mimarisindeki farklı katmanları ve işlevlerini en basit şekilde öğrenmek için blogu okuyun.

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zeka Süreç Otomasyonunu Nasıl Bir Sonraki Seviyeye Taşıyabilir?

Yapay Zekanın küçük ölçekli şirketler arasında nasıl popüler hale geldiğini ve onları büyütme ve rakiplerine üstünlük sağlama olasılıklarını nasıl artırdığını öğrenmek için bunu okuyun.

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA: İnsan-AI Ayrımı İçin Ne Kadar Geçerli Bir Teknik Kalabilir?

CAPTCHA, son birkaç yılda kullanıcıların çözmesi oldukça zorlaştı. Gelecekte spam ve bot tespitinde etkili kalabilecek mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Teknolojik Tekillik: İnsan Uygarlığının Uzak Bir Geleceği mi?

Bilim hızla gelişip birçok çabamızı üstlendikçe, kendimizi açıklanamaz bir Tekilliğe maruz bırakmanın riskleri de artıyor. Okuyun, tekillik bizim için ne anlama gelebilir.

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp ve Uzaktan Sağlık Hizmeti: Gelecek Burada

Teletıp, uzaktan sağlık hizmetleri ve gelecek nesiller üzerindeki etkisi nedir? Pandemi durumunda iyi bir yer mi değil mi? Bir görünüm bulmak için blogu okuyun!

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Hackerların Nasıl Para Kazandığını Hiç Merak Ettiniz mi?

Bilgisayar korsanlarının çok para kazandığını duymuş olabilirsiniz, ancak bu kadar parayı nasıl kazandıklarını hiç merak ettiniz mi? Hadi tartışalım.

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

macOS Catalina 10.15.4 Ek Güncellemesi Çözmekten Daha Fazla Soruna Neden Oluyor

Son zamanlarda Apple, sorunları gidermek için macOS Catalina 10.15.4'ü ek bir güncelleme yayınladı, ancak güncelleme, mac makinelerinde tuğla oluşmasına neden olan daha fazla soruna neden oluyor gibi görünüyor. Daha fazla bilgi edinmek için bu makaleyi okuyun