วิธีรักษาความปลอดภัย FreeBSD ด้วย PF Firewall

บทช่วยสอนนี้จะแสดงวิธีปกป้องเซิร์ฟเวอร์ FreeBSD ของคุณโดยใช้ไฟร์วอลล์ OpenBSD PF เราจะสมมติว่าคุณมีการติดตั้ง FreeBSD ที่สะอาดซึ่งปรับใช้โดย Vultr โดยไม่มีผู้ใช้เพิ่ม เราจะทำสิ่งอื่นนอกเหนือจากการกำหนดค่าไฟร์วอลล์ซึ่งจะทำให้ความปลอดภัยของเซิร์ฟเวอร์ FreeBSD ของเราแข็งแกร่งขึ้น ก่อนการกำหนดค่าไฟร์วอลล์เราจะติดตั้งบางแพคเกจเนื่องจากการติดตั้ง FreeBSD ที่เป็นค่าเริ่มต้นมาพร้อมกับชุดเครื่องมือและแพ็คเกจขั้นต่ำ (ซึ่งถูกต้อง) เพื่อให้ง่ายต่อการทำงาน

เปลือกเริ่มต้นใน FreeBSD /bin/shคือ นี่เป็นเชลล์พื้นฐานที่ไม่มีฟังก์ชั่นเติมภาพอัตโนมัติ เราจะใช้สิ่งที่ดีกว่า zshเราจะติดตั้ง

ก่อนอื่นให้ติดตั้งแพ็คเกจเหล่านี้:

# 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 เป็นlsโปรแกรมจาก Linux เราแค่ต้องการมีlsคำสั่งเดียวกันใน Linux และ FreeBSD

เพิ่มผู้ใช้ปกติในระบบ: (แทนที่ john ด้วยชื่อผู้ใช้ของคุณและอย่าลืมเพิ่มผู้ใช้ในกลุ่มล้อ)

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

# ee /home/your-username/.zshrc

คัดลอกไฟล์นี้ไปยังไฟล์. 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

เรียกใช้คำสั่งนี้: (แทนที่ john ด้วยชื่อผู้ใช้ของคุณ)

chown john:john /home/john/.zshrc

ตอนนี้เข้าสู่ระบบเซิร์ฟเวอร์ FreeBSD ด้วยชื่อผู้ใช้ของคุณและเปลี่ยนรหัสผ่านรูตเริ่มต้น:

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

เราไม่ต้องการ sendmail หยุดและปิดใช้งานบริการนี้:

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

ต่อไปเราจะเปลี่ยนไฟล์ rc.conf ของเราให้ดูเป็นธรรมชาติยิ่งขึ้น:

# ee /etc/rc.conf

เปลี่ยนเป็นแบบนี้:

#----------- 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/hostsไฟล์:

# ee /etc/hosts

เพิ่มที่อยู่ IP และชื่อโฮสต์ของคุณ:

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

ตั้งค่าเขตเวลา:

# bsdconfig

เมื่อใดก็ตามที่คุณสามารถปิดการเข้าถึงระยะไกลสำหรับผู้ใช้รูต การโจมตี SSH ส่วนใหญ่จะพยายามเข้าถึงผ่านบัญชีผู้ใช้รูท เชื่อมต่อกับชื่อผู้ใช้ของคุณและจากนั้นsuจะรูทเสมอ ผู้ใช้จากwheelกลุ่มเท่านั้นที่สามารถsuรูทได้ นั่นเป็นเหตุผลที่เราเพิ่มผู้ใช้ของเราในกลุ่มล้อ

ปิดใช้งานการเข้าสู่ระบบหลัก:

# ee /etc/ssh/sshd_config

ยกเลิกการใส่เครื่องหมายบรรทัดนี้:

PermitRootLogin no

Reboot:

# reboot

หลังจากรีบูตเสร็จสิ้นคุณจะเห็นข้อความเช่นนี้ในคอนโซล Vultr:

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

นั่นเป็นเหตุผลที่เราต้องแก้ไขนาฬิกาด้วยตนเอง ทำตามคำสั่งเหล่านี้ก่อนsuถึงรูท:

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

ตอนนี้เรากำลังจะกำหนดค่าไฟร์วอลล์ OpenBSD PF รวมอยู่ในเคอร์เนล FreeBSD ดังนั้นคุณไม่จำเป็นต้องติดตั้งแพ็คเกจใด ๆ

ด้วยeeเครื่องมือแก้ไขให้สร้างไฟล์/etc/firewall:

# ee /etc/firewall

แทรกสิ่งนี้: (แทนที่ที่อยู่ IP ของคุณด้วย)

#######################################################################
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/trustedไฟล์ ในไฟล์นี้เราจะใส่ IP ที่เรา "เชื่อถือ"

# ee /etc/trusted

เพิ่ม IP บางส่วน:

# Hosting
1.2.0.0/16

# My friends
1.2.4.0/24

ตอนนี้คำอธิบายบางอย่าง พอร์ตขยะและ IP ขยะเป็นเพียงบางพอร์ต / IP ที่เราไม่ต้องการเห็นในบันทึก เราได้ทำสิ่งนี้ด้วยกฎนี้:

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

นี่เป็นค่าเริ่มต้นและคุณไม่ต้องกังวลเกี่ยวกับมัน:

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

กฎนี้บล็อกทราฟฟิก SMTP ขาออกจากเซิร์ฟเวอร์ของคุณ (ซึ่งเป็นค่าเริ่มต้นบน Vultr)

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

ยกเว้น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)

Bruteforcers เพิ่งพูดว่า: อนุญาตจาก <trusted> IP ไปยังพอร์ต 22 แต่สามารถทำการเชื่อมต่อได้พร้อมกันเพียง 10 ตัวจาก IP ต้นทางเดียว ถ้ามันมากกว่า 10 บล็อก IP นี้และวางไว้ในตาราง bruteforcers เช่นเดียวกันสำหรับกฎ 20/60 มันหมายถึงการเชื่อมต่อสูงสุด 20 การเชื่อมต่อใน 60 วินาที

เปิดใช้งานไฟร์วอลล์:

# ee /etc/rc.conf

ยกเลิกหมายเหตุบรรทัดเหล่านี้:

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

Reboot:

# reboot 

หากคุณทำทุกอย่างถูกต้องแล้วคุณจะสามารถเข้าสู่ระบบและไฟร์วอลล์จะเปิดใช้งาน คุณไม่ต้องรีบูตทุกครั้งที่คุณเปลี่ยน/etc/firewallไฟล์ แค่ทำ:

# /etc/rc.d/pf reload

ดูว่าใครกำลังพยายามเชื่อมต่อกับเซิร์ฟเวอร์ของคุณแบบเรียลไทม์:

# tcpdump -n -e -ttt -i pflog0

แสดงประวัติ:

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

ดูว่าคุณมีใครบางคนในตาราง bruteforcers:

# pfctl -t bruteforcers -T show

และนั่นคือมัน คุณได้ติดตั้งไฟร์วอลล์ PF เรียบร้อยแล้วบนเซิร์ฟเวอร์ FreeBSD!


Tags: #BSD

Leave a Comment

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7 LAMP VPS

เรียนรู้วิธีการติดตั้ง Directus 6.4 CMS บน CentOS 7; ระบบการจัดการเนื้อหา Headless ที่มีความยืดหยุ่นสูงและปลอดภัย

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

ตั้งค่า Nginx บน Ubuntu เพื่อสตรีมวิดีโอสด HLS

เรียนรู้วิธีการตั้งค่า Nginx บน Ubuntu สำหรับการสตรีมวิดีโอสด HLS ด้วยคำแนะนำที่ชัดเจนและเป็นประโยชน์

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

การสำรองข้อมูลยอดนิยมด้วย Percona XtraBackup บนแอพ WordPress แบบคลิกเดียว

เรียนรู้การใช้ Percona XtraBackup สำหรับการสำรองข้อมูลด้วยวิธีที่เป็นระบบและง่ายดายบน WordPress ออนไลน์ของคุณ

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS: นี่คืออนาคตของ Windows หรือไม่?

ReactOS ซึ่งเป็นโอเพ่นซอร์สและระบบปฏิบัติการฟรีพร้อมเวอร์ชันล่าสุดแล้ว สามารถตอบสนองความต้องการของผู้ใช้ Windows ยุคใหม่และล้ม Microsoft ได้หรือไม่? มาหาข้อมูลเพิ่มเติมเกี่ยวกับรูปแบบเก่านี้ แต่เป็นประสบการณ์ OS ที่ใหม่กว่ากัน

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

AI สามารถต่อสู้กับการโจมตีของแรนซัมแวร์ที่เพิ่มขึ้นได้หรือไม่

การโจมตีของ Ransomware กำลังเพิ่มขึ้น แต่ AI สามารถช่วยจัดการกับไวรัสคอมพิวเตอร์ตัวล่าสุดได้หรือไม่? AI คือคำตอบ? อ่านที่นี่รู้ว่า AI boone หรือ bane

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

เชื่อมต่อผ่าน WhatsApp Desktop App 24*7

ในที่สุด Whatsapp ก็เปิดตัวแอพเดสก์ท็อปสำหรับผู้ใช้ Mac และ Windows ตอนนี้คุณสามารถเข้าถึง Whatsapp จาก Windows หรือ Mac ได้อย่างง่ายดาย ใช้ได้กับ Windows 8+ และ Mac OS 10.9+

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

AI จะนำกระบวนการอัตโนมัติไปสู่อีกระดับได้อย่างไร

อ่านข้อมูลนี้เพื่อทราบว่าปัญญาประดิษฐ์กำลังได้รับความนิยมในหมู่บริษัทขนาดเล็กอย่างไร และเพิ่มโอกาสในการทำให้พวกเขาเติบโตและทำให้คู่แข่งได้เปรียบ

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

การอัปเดตเสริม macOS Catalina 10.15.4 ทำให้เกิดปัญหามากกว่าการแก้ปัญหา

เมื่อเร็ว ๆ นี้ Apple เปิดตัว macOS Catalina 10.15.4 การอัปเดตเสริมเพื่อแก้ไขปัญหา แต่ดูเหมือนว่าการอัปเดตทำให้เกิดปัญหามากขึ้นที่นำไปสู่การสร้างเครื่อง Mac อ่านบทความนี้เพื่อเรียนรู้เพิ่มเติม

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

13 เครื่องมือดึงข้อมูลเชิงพาณิชย์ของ Big Data

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

ระบบไฟล์บันทึกคืออะไรและทำงานอย่างไร

คอมพิวเตอร์ของเราจัดเก็บข้อมูลทั้งหมดในลักษณะที่เรียกว่าระบบไฟล์บันทึก เป็นวิธีการที่มีประสิทธิภาพที่ช่วยให้คอมพิวเตอร์สามารถค้นหาและแสดงไฟล์ได้ทันทีที่คุณกดค้นหาhttps://wethegeek.com/?p=94116&preview=true