Cara Melindungi FreeBSD dengan PF Firewall

Tutorial ini akan menunjukkan cara melindungi pelayan FreeBSD anda menggunakan firewall OpenBSD PF. Kami akan menganggap bahawa anda mempunyai pemasangan FreeBSD bersih yang digunakan oleh Vultr tanpa penambahan pengguna. Kami akan melakukan beberapa perkara lain selain konfigurasi Firewall yang juga akan mengeraskan keselamatan pelayan FreeBSD kami. Sebelum konfigurasi firewall, kami akan memasang beberapa pakej kerana pemasangan FreeBSD lalai dilengkapi dengan sekumpulan alat dan pakej minimum (yang betul), untuk memudahkan kami bekerja.

Shell lalai dalam FreeBSD adalah /bin/sh. Ini adalah shell asas tanpa fungsi yang lengkap secara automatik. Kami akan menggunakan sesuatu yang lebih baik. Kami akan memasang zsh.

Pertama, pasang pakej ini:

# 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 adalah lsprogram dari Linux. Kami hanya mahu mempunyai lsperintah yang sama di Linux dan FreeBSD.

Tambahkan pengguna biasa ke sistem: (ganti john dengan nama pengguna anda dan jangan lupa menambahkan pengguna ke kumpulan roda)

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

Buat fail konfigurasi zsh:

# ee /home/your-username/.zshrc

Salin ini ke fail .zshrc anda:

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

Jalankan arahan ini: (ganti john dengan nama pengguna anda)

chown john:john /home/john/.zshrc

Sekarang, log masuk ke pelayan FreeBSD dengan nama pengguna anda dan ubah kata laluan root lalai:

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

Kami tidak perlu menghantar e-mel. Hentikan dan matikan perkhidmatan ini:

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

Seterusnya, kami akan menukar fail rc.conf kami agar kelihatan lebih semula jadi:

# ee /etc/rc.conf

Tukar ia kelihatan seperti ini:

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

Edit /etc/hostsfail:

# ee /etc/hosts

Tambahkan alamat IP dan nama hos anda:

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

Tetapkan zon waktu:

# bsdconfig

Bila-bila masa anda boleh, lumpuhkan akses jauh untuk pengguna root. Sebilangan besar serangan ke atas SSH akan cuba diakses melalui akaun pengguna root. Sentiasa berhubung dengan nama pengguna anda dan kemudian suke root. Hanya pengguna dari wheelkumpulan yang dapat sumelakukan root. Itulah sebabnya kami menambahkan pengguna kami ke kumpulan roda.

Lumpuhkan log masuk root:

# ee /etc/ssh/sshd_config

Menanggalkan baris ini:

PermitRootLogin no

But semula:

# reboot

Selepas but semula selesai, anda akan melihat mesej seperti ini di konsol Vultr:

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

Itulah sebabnya kita perlu membetulkan jam secara manual. Ikuti arahan ini, pertama suuntuk root:

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

Sekarang, kita akan mengkonfigurasi firewall. OpenBSD PF disertakan dalam kernel FreeBSD, jadi anda tidak perlu memasang pakej apa pun.

Dengan eeeditor, buat fail /etc/firewall:

# ee /etc/firewall

Masukkan ini: (ganti sebarang alamat IP dengan alamat anda)

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

Buat /etc/trustedfail. Dalam fail ini, kita akan meletakkan IP yang kita "percayai".

# ee /etc/trusted

Tambahkan beberapa IP:

# Hosting
1.2.0.0/16

# My friends
1.2.4.0/24

Sekarang beberapa penjelasan. Port sampah dan IP sampah hanyalah beberapa port / IP yang tidak mahu dilihat dalam log. Kami telah melakukannya dengan peraturan ini:

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

Ini hanya lalai dan anda tidak perlu risau:

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

Peraturan ini menyekat lalu lintas SMTP keluar dari pelayan anda (yang merupakan lalai pada Vultr).

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

Kecuali bruteforcersselebihnya cukup lurus ke hadapan.

# ---- 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 hanya mengatakan: Benarkan dari <trusted> IP ke port 22 tetapi hanya 10 sambungan serentak dapat dibuat dari satu sumber IP. Sekiranya melebihi 10, sekat IP ini dan masukkan ke dalam bruteforcers meja. Perkara yang sama berlaku untuk peraturan 20/60. Ini bermaksud maksimum 20 sambungan dalam 60 saat.

Dayakan firewall:

# ee /etc/rc.conf

Menanggalkan garis berikut:

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

But semula:

# reboot 

Sekiranya anda telah melakukan semuanya dengan betul, maka anda akan dapat log masuk dan firewall akan diaktifkan. Anda tidak perlu reboot setiap kali menukar /etc/firewallfail. Lakukan sahaja:

# /etc/rc.d/pf reload

Lihat siapa yang cuba menyambung ke pelayan anda dalam masa nyata:

# tcpdump -n -e -ttt -i pflog0

Tunjukkan sejarah:

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

Lihat jika anda mempunyai seseorang dalam jadual bruteforcers:

# pfctl -t bruteforcers -T show

Dan itu sahaja. Anda berjaya melaksanakan firewall PF pada pelayan FreeBSD!


Tags: #BSD

Leave a Comment

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

Pandangan tentang 26 Teknik Analisis Data Besar: Bahagian 1

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

6 Perkara Yang Sangat Menggila Tentang Nintendo Switch

Ramai daripada anda tahu Switch akan keluar pada Mac 2017 dan ciri baharunya. Bagi yang tidak tahu, kami telah menyediakan senarai ciri yang menjadikan 'Tukar' sebagai 'gajet yang mesti ada'.

Janji Teknologi Yang Masih Tidak Ditepati

Janji Teknologi Yang Masih Tidak Ditepati

Adakah anda menunggu gergasi teknologi memenuhi janji mereka? semak apa yang masih belum dihantar.

Fungsi Lapisan Seni Bina Rujukan Data Besar

Fungsi Lapisan Seni Bina Rujukan Data Besar

Baca blog untuk mengetahui lapisan berbeza dalam Seni Bina Data Besar dan fungsinya dengan cara yang paling mudah.

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Bagaimana AI Boleh Mengambil Automasi Proses ke Tahap Seterusnya?

Baca ini untuk mengetahui cara Kecerdasan Buatan semakin popular di kalangan syarikat berskala kecil dan cara ia meningkatkan kebarangkalian untuk menjadikan mereka berkembang dan memberikan pesaing mereka kelebihan.

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA: Berapa Lama Ia Boleh Kekal Sebagai Teknik Berdaya maju Untuk Perbezaan Manusia-AI?

CAPTCHA telah menjadi agak sukar untuk diselesaikan oleh pengguna dalam beberapa tahun kebelakangan ini. Adakah ia dapat kekal berkesan dalam pengesanan spam dan bot pada masa hadapan?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Keunikan Teknologi: Masa Depan Tamadun Manusia yang Jauh?

Apabila Sains Berkembang pada kadar yang pantas, mengambil alih banyak usaha kita, risiko untuk menundukkan diri kita kepada Ketunggalan yang tidak dapat dijelaskan juga meningkat. Baca, apakah makna ketunggalan bagi kita.

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Teleperubatan Dan Penjagaan Kesihatan Jauh: Masa Depan Ada Di Sini

Apakah teleperubatan, penjagaan kesihatan jauh dan impaknya kepada generasi akan datang? Adakah ia tempat yang baik atau tidak dalam situasi pandemik? Baca blog untuk mencari paparan!

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Pernahkah Anda Terfikir Bagaimana Penggodam Mendapatkan Wang?

Anda mungkin pernah mendengar bahawa penggodam memperoleh banyak wang, tetapi pernahkah anda terfikir bagaimana mereka memperoleh wang seperti itu? Mari berbincang.

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Kemas Kini Tambahan macOS Catalina 10.15.4 Menyebabkan Lebih Banyak Isu Daripada Penyelesaian

Baru-baru ini Apple mengeluarkan macOS Catalina 10.15.4 kemas kini tambahan untuk menyelesaikan masalah tetapi nampaknya kemas kini itu menyebabkan lebih banyak masalah yang membawa kepada pemusnahan mesin mac. Baca artikel ini untuk mengetahui lebih lanjut