วิธีรักษาความปลอดภัย 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

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

ภาวะเอกฐานทางเทคโนโลยี: อนาคตอันห่างไกลของอารยธรรมมนุษย์?

ภาวะเอกฐานทางเทคโนโลยี: อนาคตอันห่างไกลของอารยธรรมมนุษย์?

ในขณะที่วิทยาศาสตร์มีวิวัฒนาการไปอย่างรวดเร็ว โดยรับช่วงต่อความพยายามของเราอย่างมาก ความเสี่ยงในการทำให้ตัวเองตกอยู่ในภาวะภาวะเอกฐานที่อธิบายไม่ได้ก็เพิ่มขึ้นเช่นกัน อ่านว่าภาวะเอกฐานอาจมีความหมายสำหรับเราอย่างไร

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ข้อมูลเชิงลึกเกี่ยวกับ 26 เทคนิคการวิเคราะห์ข้อมูลขนาดใหญ่: ตอนที่ 1

ผลกระทบของปัญญาประดิษฐ์ในการดูแลสุขภาพ 2021

ผลกระทบของปัญญาประดิษฐ์ในการดูแลสุขภาพ 2021

AI ในการดูแลสุขภาพได้ก้าวกระโดดอย่างมากจากทศวรรษที่ผ่านมา ดังนั้นอนาคตของ AI ในการดูแลสุขภาพจึงยังคงเติบโตทุกวัน