PFファイアウォールでFreeBSDを保護する方法

このチュートリアルでは、OpenBSD PFファイアウォールを使用してFreeBSDサーバーを保護する方法を示します。ユーザーを追加せずにVultrによってクリーンなFreeBSDインストールが展開されていると想定します。ファイアウォールの設定以外にも、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はlsLinux のプログラムです。lsLinuxとFreeBSDで同じコマンドを使いたいだけです。

システムに通常のユーザーを追加します(johnを自分のユーザー名に置き換えて、wheelグループにユーザーを追加することを忘れないでください)。

# 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

次のコマンドを実行します:(johnをユーザー名に置き換えます)

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

可能な場合は常に、rootユーザーのリモートアクセスを無効にしてください。SSHに対するほとんどの攻撃は、rootユーザーアカウントを介してアクセスを試みます。常にユーザー名で接続してsuから、ルートに接続します。rootにwheelできるのは、グループのユーザーのみですsu。これが、ユーザーをwheelグループに追加した理由です。

rootログインを無効にします。

# 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にrootに移動します。

$ 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までを許可しますが、1つのソースIPからは10の同時接続しか確立できません。10を超える場合は、このIPをブロックして、テーブルブルートフォーサーに配置します。20/60ルールも同様です。これは、60秒で最大20の接続を意味します。

ファイアウォールを有効にする:

# 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

以上です。FreeBSDサーバーにPFファイアウォールを実装しました!


Tags: #BSD

Leave a Comment

CentOS 7にApacheをインストールする方法

CentOS 7にApacheをインストールする方法

CentOS 7サーバーにApache 2.4をインストールする方法を説明します。安定したウェブサーバーを構築するための前提条件と手順を解説します。

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1にBlacklistdをインストールする方法

FreeBSD 11.1におけるBlacklistdのインストール方法について詳しく解説します。この方法を通じて、強力なセキュリティ対策を実装できます。

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

Windows Serverのサーバーマネージャーを使用した複数サーバーの管理

サーバーマネージャーを使用して、Windows Serverの管理が向上します。セキュリティリスクを軽減し、効率的な管理を実現します。

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法

CentOS 7にSeafileサーバーをインストールする方法。Seafile(コミュニティバージョン)は、ownCloudに似た無料のオープンソースファイル同期および共有ソリューションです。

DebianでSnortを設定する方法

DebianでSnortを設定する方法

Snortは無料のネットワーク侵入検知システムです。最新の方法で、SnortをDebianにインストールし、設定する手順を紹介します。ネットワークのセキュリティを強化しましょう。

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールする方法

CentOS 7にGraylogサーバーをインストールし、ログ管理を行う方法を学びます。

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsでhMailServerを使用してメールサーバーを構築する

WindowsサーバーでWebサイトを実行している場合、電子メールも受信できるようにするためにhMailServerを使用する方法を解説します。

Ubuntu 19.04にFiveMサーバーをインストールする方法

Ubuntu 19.04にFiveMサーバーをインストールする方法

FiveMサーバーをUbuntu 19.04にインストールするための詳細なガイド。必要条件からインストール、起動、トラブルシューティングまで、すべてのステップを含みます。

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

WsgiDAVを使用してDebian 10にWebDAVをデプロイする

Debian 10にWebDAVをデプロイする方法を学び、WsgiDAVとSSL証明書で安全な接続を実現しましょう。

ヘルスケア2021における人工知能の影響

ヘルスケア2021における人工知能の影響

ヘルスケアにおけるAIは、過去数十年から大きな飛躍を遂げました。したがって、ヘルスケアにおけるAIの未来は、日々成長を続けています。