چگونه می توان 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برنامه ای از لینوکس است. ما فقط می خواهیم همان lsدستور را در لینوکس و FreeBSD داشته باشیم.

کاربر عادی را به سیستم اضافه کنید: (جان را با نام کاربری خود جایگزین کنید و فراموش نکنید که کاربر را به گروه چرخ اضافه کنید)

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

# 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

این دستور را اجرا کنید: (جان را با نام کاربری خود جایگزین کنید)

chown john:john /home/john/.zshrc

اکنون با نام کاربری خود به سرور FreeBSD وارد شوید و رمز اصلی پیش فرض root را تغییر دهید:

<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 سعی خواهد کرد از طریق حساب کاربر root دسترسی داشته باشید. همیشه با نام کاربری خود ارتباط برقرار کرده و سپس suبه ریشه آن بپردازید. فقط کاربران wheelگروه می توانند suریشه یابی کنند. به همین دلیل کاربر خود را به گروه چرخ اضافه کردیم.

غیرفعال کردن ورود به سیستم ریشه:

# ee /etc/ssh/sshd_config

لغو پاسخ این خط:

PermitRootLogin no

راه اندازی مجدد:

# 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 فقط می گوید: اجازه دهید از IP های <trusted> به پورت 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 

اگر همه کارها را درست انجام داده باشید ، می توانید وارد سیستم شوید و فایروال فعال می شود. لازم نیست هر بار که /etc/firewallفایل را تغییر دهید ، مجدداً راه اندازی مجدد کنید. فقط انجام دهید:

# /etc/rc.d/pf reload

ببینید چه کسی سعی دارد در زمان واقعی به سرور شما متصل شود:

# tcpdump -n -e -ttt -i pflog0

نمایش تاریخ:

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

ببینید شخصی در جدول بروکرها دارید:

# pfctl -t bruteforcers -T show

و همین است شما فایروال PF را با موفقیت در سرور FreeBSD پیاده سازی کرده اید!


Tags: #BSD

Leave a Comment

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

نحوه نصب بستر سبد خرید LiteCart در اوبونتو 16.04

LiteCart یک بستر سبد خرید آزاد و منبع باز است که به زبان های PHP ، jQuery و HTML 5 نوشته شده است. این نرم افزار ساده ، سبک و با کاربرد آسان است.

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

نحوه نصب Anchor CMS بر روی یک VPS Fedora 26 LAMP

با استفاده از یک سیستم متفاوت؟ Anchor CMS یک سیستم مدیریت محتوا (CMS) بسیار ساده و بسیار سبک ، بسیار آزاد و آزاد است.

اشتراک NFS را در Debian تنظیم کنید

اشتراک NFS را در Debian تنظیم کنید

NFS یک سیستم فایل مبتنی بر شبکه است که به رایانه ها اجازه می دهد تا از طریق شبکه رایانه ای به فایلها دسترسی پیدا کنند. این راهنما توضیح می دهد که چگونه می توانید پوشه ها را روی NF قرار دهید

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

نحوه بروزرسانی CentOS 7 ، Ubuntu 16.04 و Debian 8

هنگام راه اندازی سرور جدید لینوکس ، به روزرسانی سیستم های هسته و سایر بسته ها تا آخرین نسخه پایدار یک روش توصیه شده است. در این مقاله

نحوه نصب Matomo Analytics در Fedora 28

نحوه نصب Matomo Analytics در Fedora 28

با استفاده از یک سیستم متفاوت؟ Matomo (سابقا پیویک) یک بستر تحلیلی منبع باز است ، یک جایگزین باز برای Google Analytics. منبع Matomo میزبان o

یک سرور TeamTalk را در لینوکس تنظیم کنید

یک سرور TeamTalk را در لینوکس تنظیم کنید

TeamTalk یک سیستم کنفرانس است که به کاربران امکان می دهد مکالمات صوتی / تصویری با کیفیت بالا ، چت متنی ، انتقال فایل ها و صفحه های به اشتراک بگذارند. من

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

با استفاده از کلید SSH خود برای ورود به کاربران غیر ریشه استفاده کنید

Vultr یک ویژگی را فراهم می کند که به شما امکان می دهد با ایجاد یک نمونه جدید ، کلیدهای SSH را از قبل نصب کنید. این اجازه می دهد تا به کاربر root دسترسی داشته باشید ، با این حال ، th

نحوه نصب انجمن NodeBB در FreeBSD 12

نحوه نصب انجمن NodeBB در FreeBSD 12

با استفاده از یک سیستم متفاوت؟ NodeBB یک نرم افزار انجمن مبتنی بر Node.js است. از سوکت های وب برای تعامل فوری و اعلامیه های زمان واقعی استفاده می کند. NodeB

نصب و راه اندازی ZNC در اوبونتو

نصب و راه اندازی ZNC در اوبونتو

ZNC یک پیشرانه پیشرفته شبکه IRC است که تمام وقت بهم متصل می شود تا مشتری IRC بتواند بدون از دست دادن جلسه گپ قطع یا وصل شود.

نحوه نصب Ranger Terminal File Manager در لینوکس

نحوه نصب Ranger Terminal File Manager در لینوکس

رنجر یک مدیر فایل مبتنی بر خط فرمان است که دارای کلیدهای اتصال VI است. این برنامه یک رابط لعنتی مینیمالیستی و زیبا با نمای سلسله مراتب فهرست ارائه می دهد