IPFWとSSHGuardを使用したFreeBSDのセキュリティの強化

VPSサーバーは侵入者の標的にされることがよくあります。一般的なタイプの攻撃は、何百もの不正なSSHログイン試行としてシステムログに表示されます。ファイアウォールの設定は非常に便利ですが、それだけでは破壊的な侵入の試みを適切に制御できない場合があります。

このチュートリアルでは、ファイアウォールとの2つのプログラムを使用して、FreeBSDの強化された侵入バリアを構築する方法を示します。SSHGuardは、「乱用」エントリのシステムログを監視する小さなアドオンプログラムです。攻撃者がアクセスを取得しようとする場合、攻撃者のIPアドレスから発信されるトラフィックをブロックするように指示します。その後、犯罪者は事実上閉鎖されます。ipfwsshguardsshguardipfw

これらのプログラムがどのように機能するかが理解できれば、サーバー保護の管理は非常に簡単です。このガイドはFreeBSDの設定に焦点を当てていますが、その一部は他のOSおよびファイアウォールソフトウェアに適用されます。

ステップ1. IPFWの構成

FreeBSDは、デフォルト(中3つのファイアウォールを提供GENERIC)、カーネル、ipfwpf、とipfilter。それぞれに利点とファンがありますipfwが、FBSDのネイティブファイアウォールソフトウェアであり、私たちの目的に使用するのは非常に簡単です。ipfwそのmanページが示すように多くのことを実行することは注目に値しますが、NAT、トラフィックシェーピングなどの機能は、一般的なVPSの状況では必要ありません。幸いにも、ファイアウォールの基本機能は私たちの要件を簡単に満たします。

起動時にファイアウォールを開始するには、以下をに追加します/etc/rc.conf

firewall_enable="YES"
firewall_script="/usr/local/etc/IPFW.rules"
firewall_logging="YES"

このserviceコマンドは、ファイアウォールを手動で開始/停止するために使用できます。

[user@vultr ~]$ sudo service ipfw start

当然、ipfwにあるこの例では、多くの場合ファイルからルールを追加するまで何もしません/usr/local/etc/IPFW.rules。ルールファイルは、 "firewall_script"パラメータと一致する限り、実際にはどこにでも、任意の名前を付けることができます。ルールファイルについては、以下で詳しく説明します。

ステップ2. SSHGuardをインストールして構成する

sshguardには、さまざまなファイアウォールで使用できるいくつかの種類があります。pkgユーティリティを使用して、フェッチしてインストールしsshguard-ipfwます。

[user@vultr ~]$ sudo pkg install sshguard-ipfw

ほとんどの場合、これで十分です。/etc/rc.conf起動時に開始するための適切な変数が自動的に挿入されます。

sshguard_enable="YES"

デフォルトは通常はうまく機能します。別の値が必要な場合は、sshguardmanページにパラメーターに関する詳細情報が表示されます。

# sshguard--program defaults, so don't need to be in rc.conf unless assigning different value
# sshguard_pidfile="/var/run/sshguard.pid"
# sshguard_watch_logs="/var/log/auth.log:/var/log/mail"
# sshguard_blacklist="40:/var/db/sshguard/blacklist.db"
# sshguard_safety_thresh="40"
# sshguard_pardon_min_interval="420"
# sshguard_prescribe_interval="1200"

sshguard通常のservice呼び出しから始めることができます。

[user@vultr ~]$ sudo service sshguard start

ステップ3.ルールスクリプトを作成する

最も難しいのは、ファイアウォールルールセットの作成です。ipfw提供されている/etc/rc.firewallスクリプトを使用できますが、SSHGuardやさまざまな運用シナリオに対応するように変更する必要があります。多くのWebページとFreeBSDマニュアルには、これを行う上で役立つ情報があります。ただし、ルールファイルの記述はそれほど難しくはありませんが、カスタムルールセットの方が理解しやすく、必要に応じて変更することができます。

ipfwルールの重要な特徴は、最初の一致優先されることです。つまり、ルールの順序が重要です。ではipfw、各ルールはコマンドであり、ルールファイルは実行可能なシェルスクリプトです。これにより、ルールを変更してからルールファイルをシェルスクリプトとして実行することで、ルールセットを変更できます。

[user@vultr /usr/local/etc]$ sudo ./IPFW.rules

一般に、ルールファイルはipfwコマンドの変数を定義し、現在のルールをクリアし、一般的なルールを発行してから、「アウト」ルールを設定してから、「イン」ルールを設定します。ipfwのマニュアルページとその他のリソースには、控えめに言ってもルールの構造とオプションに関する豊富な情報が含まれています。

FreeBSD sshguardのバージョンがバージョン1.6.2に更新されたため、攻撃者のブロックルールを挿入する方法が変更されました。現在、違反者のアドレスは、以前のように55000以上のルールに挿入され��のではなく、ipfwテーブル(具体的には表22)に保持されています。

幸い、テーブルを使用するようにルールファイルを設定するのは非常に簡単です。これは、テーブルルールを適切な場所に配置し、ルールを記述するときに正しい構文を使用するようにすることだけです。

ときにsshguard犯罪者を見つけ、それがそのブラックリストに犯罪者のアドレスを入れ、またにアドレスを挿入するipfwことが「トリガー」のアクセスを拒否されますので、テーブル。このルールはこれらの目的を達成します:

01000 deny ip from table\(22\) to any

この場合でも、インバウンドサービスを許可するルールを01000 より上に配置する必要があります。たとえば、アドレス10.20.30.40が表22の違反者であり、次のipfwルールがあるとします。

56420 allow tcp from any to me dst-port 22 in via $vif

以来ipfw出会いが支配01000を 前に、ルール5642010.20.30.40されてブロックされました。「22を許可する」ルールではまったく見られません。許可ルールに00420などの「通常の」番号が含まれている場合、不正なトラフィックは許可され、ブロックされることはありません(0042001000未満であり、「最初の一致が優先される」ため)。

更新されたバージョンの優れた機能は、sshguardが起動すると、ブラックリスト内のすべてのアドレスがテーブルに追加され、遅滞なく攻撃者をブロックできるようになったことです。ブラックリストは累積的であり、セッション間で保持されます。

この時点で、のipfwために変更された完全なルールセットを表示することはおそらく賢明でしょうsshguard。コメントにより、ルールのロジックを簡単に理解できるようになります。

#!/bin/sh

# ipfw config/rules
# from FBSD Handbook, rc.firewall, et. al.

# Flush all rules before we begin.
ipfw -q -f flush

# Set rules command prefix
cmd="ipfw -q add "

vif="vtnet0"

# allow all for localhost
$cmd 00010 allow ip from any to any via lo0

# checks stateful rules.  If marked as "keep-state" the packet has
# already passed through filters and is "OK" without futher
# rule matching
$cmd 00101 check-state

# allow DNS out
$cmd 00110 allow tcp from me to any dst-port 53 out via $vif setup keep-state
$cmd 00111 allow udp from me to any dst-port 53 out via $vif keep-state

# allow dhclient connection out (port numbers are important)
$cmd 00120 allow udp from me 68 to any dst-port 67 out via $vif keep-state

# allow HTTP HTTPS replies
$cmd 00200 allow tcp from any to any dst-port 80 out via $vif setup keep-state
$cmd 00220 allow tcp from any to any dst-port 443 out via $vif setup keep-state

# allow outbound mail
$cmd 00230 allow tcp from any to any dst-port 25 out via $vif setup keep-state
$cmd 00231 allow tcp from any to any dst-port 465 out via $vif setup keep-state
$cmd 00232 allow tcp from any to any dst-port 587 out via $vif setup keep-state

# allow icmp re: ping, et. al. 
# comment this out to disable ping, et.al.
$cmd 00250 allow icmp from any to any out via $vif keep-state

# alllow timeserver out
$cmd 00260 allow tcp from any to any dst-port 37 out via $vif setup keep-state

# allow ntp out
$cmd 00270 allow udp from any to any dst-port 123 out via $vif keep-state

# allow outbound SSH traffic
$cmd 00280 allow tcp from any to any dst-port 22 out via $vif setup keep-state

# otherwise deny outbound packets
# outbound catchall.  
$cmd 00299 deny log ip from any to any out via $vif

# inbound rules
# deny inbound traffic to restricted addresses
$cmd 00300 deny ip from 192.168.0.0/16 to any in via $vif
$cmd 00301 deny ip from 172.16.0.0/12 to any in via $vif
$cmd 00302 deny ip from 10.0.0.0/8 to any in via $vif
$cmd 00303 deny ip from 127.0.0.0/8 to any in via $vif
$cmd 00304 deny ip from 0.0.0.0/8 to any in via $vif
$cmd 00305 deny ip from 169.254.0.0/16 to any in via $vif
$cmd 00306 deny ip from 192.0.2.0/24 to any in via $vif
$cmd 00307 deny ip from 204.152.64.0/23 to any in via $vif
$cmd 00308 deny ip from 224.0.0.0/3 to any in via $vif

# deny inbound packets on these ports
# auth 113, netbios (services) 137/138/139, hosts-nameserver 81 
$cmd 00315 deny tcp from any to any dst-port 113 in via $vif
$cmd 00320 deny tcp from any to any dst-port 137 in via $vif
$cmd 00321 deny tcp from any to any dst-port 138 in via $vif
$cmd 00322 deny tcp from any to any dst-port 139 in via $vif
$cmd 00323 deny tcp from any to any dst-port 81 in via $vif

# deny partial packets
$cmd 00330 deny ip from any to any frag in via $vif
$cmd 00332 deny tcp from any to any established in via $vif

# allowing icmp re: ping, etc.
$cmd 00310 allow icmp from any to any in via $vif

# allowing inbound mail, dhcp, http, https
$cmd 00350 allow udp from any 53 to me in via $vif
$cmd 00360 allow tcp from any 53 to me in via $vif
$cmd 00370 allow udp from any 67 to me dst-port 68 in via $vif keep-state

$cmd 00400 allow tcp from any to me dst-port 80 in via $vif setup limit src-addr 2
$cmd 00410 allow tcp from any to me dst-port 443 in via $vif setup limit src-addr 2

# SSHguard puts offender addresses in table 22. Set up the table rule
# Please note the '\(22\)' syntax, necessary since it's run as shell command
$cmd 01000 deny ip from table\(22\) to any

# allow inbound ssh, mail. PROTECTED SERVICES: numbered ABOVE sshguard blacklist range 
$cmd 56420 allow tcp from any to me dst-port 22 in via $vif setup limit src-addr 2
$cmd 56530 allow tcp from any to any dst-port 25 in via $vif setup keep-state
$cmd 56531 allow tcp from any to any dst-port 465 in via $vif setup keep-state
$cmd 56532 allow tcp from any to any dst-port 587 in via $vif setup keep-state

# deny everything else, and log it
# inbound catchall
$cmd 56599 deny log ip from any to any in via $vif

# ipfw built-in default, don't uncomment
# $cmd 65535 deny ip from any to any

ステップ4.起動とテスト

システムのニーズはさまざまで、ブロックまたはブロック解除するポートのさまざまな選択がルールセットに反映されます。ルールセットが終了したら、ファイルを/usr/local/etc/IPFW.rulesに保存し、FBSDサービスを開始します。

 # service ipfw start
 # service sshguard start

拡張ファイアウォールが実行されているはずです。チェックsshguard

 [user@vultr ~]$ sudo pgrep -lfa ssh

sshguardが実行されている場合、そのpidおよび完全なコマンドラインが表示されます。

720 /usr/local/sbin/sshguard -b 40:/var/db/sshguard/blacklist.db -l /var/log/auth.log -l /var/log/maillog -a 40 -p 420 -s 1200 -w /usr/local/etc/sshguard.whitelist -i /var/run/sshguard.pid

これは、統計を含むファイアウォールルールセットと、パケットがルールに最後に一致した時間を示しています。

 [user@vultr ~]$ sudo ipfw -cat list

数時間または数日後に、犯罪者のアドレスがブラックリストとテーブル22に追加されます。テーブル内のすべてのアドレスを表示するには、次のコマンドを使用します。

ipfw table 22 list

結果は次のように出力されます。

10.10.10.118/32 0
10.10.10.72/32 0
...

上記のように、これらのアドレスからの接続は許可されません。もちろん、最初の実行sshguard時にはリストにアドレスはありませんが、時間が経つとかなり長くなる可能性があります。1つのオプションは、テーブルに複数のエントリがあるアドレスに対して個別のブロッキングルールを作成し、それらをブラックリストから削除することです。

ステップ5.警戒を続ける...

ときどきログをチェックして、侵入が制御されていることを確認することをお勧めします。一般的に、/var/log/auth.logそして/var/log/security有益です。ネットワークサービスをカバーする際のギャップやエラーが明らかになる場合があります。必要に応じてファイアウォールルールセットを変更することは、サーバー管理の通常の部分です。

以前のsshguardバージョンでは、/var/db/sshguard/blacklist.dbファイルが大きくなると、sshguardシステムの起動時に起動できなくなる可能性がありました。sshguard開始が許可されているブラックリストファイルの削除または名前変更。この問題は最新のsshguardバージョンで修正されているようなので、この回避策はおそらく不要です。

SSHセッションに接続しているIPアドレスを必ずホワイトリストに登録してください。誤って自分をロックアウトした場合は、https://my.vultr.comのnoVNCコンソールにいつでも接続して、IPをホワイトリストに登録できます。

まとめると、ipfwとの組み合わせを使用sshguardすると、FreeBSDシステムを安全に保ち、その仕事を行うのに役立ちます。侵入的なネットワークアクティビティを最小限に抑えると、「ノイズ」が少なくなり、システムの動作の追跡と調整が容易になり、サーバーの安全性と実行性が向上します。

FreeBSDシステム/サーバーを効果的に保護することは特に複雑ではありません。起動して実行するには適度な労力が必要ですが、大幅に優れたVPSとプロジェクトのセキュリティで成果を上げます。


Tags: #BSD #Security

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

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

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

macOS Catalina 10.15.4サプリメントの更新により、解決するよりも多くの問題が発生しています

macOS Catalina 10.15.4サプリメントの更新により、解決するよりも多くの問題が発生しています

最近、Appleは問題を修正するための補足アップデートであるmacOS Catalina 10.15.4をリリースしましたが、このアップデートにより、Macマシンのブリックにつながる問題がさらに発生しているようです。詳細については、この記事をお読みください

原子力が必ずしも悪ではないことを証明する5つの例

原子力が必ずしも悪ではないことを証明する5つの例

原子力は、過去の出来事のために私たちが決して尊重しないことを常に軽蔑していますが、それは必ずしも悪ではありません。詳細については、投稿をお読みください。

AIはどのようにしてプロセス自動化を次のレベルに引き上げることができますか?

AIはどのようにしてプロセス自動化を次のレベルに引き上げることができますか?

これを読んで、人工知能が小規模企業の間でどのように人気を博しているか、そして人工知能がどのように成長し、競合他社に優位に立つ可能性を高めているかを理解してください。

ジャーナリングファイルシステムとは何ですか、そしてそれはどのように機能しますか?

ジャーナリングファイルシステムとは何ですか、そしてそれはどのように機能しますか?

私たちのコンピューターは、ジャーナリングファイルシステムと呼ばれる組織化された方法ですべてのデータを保存します。これは、検索を押すとすぐにコンピューターがファイルを検索して表示できるようにする効率的な方法です。https://wethegeek.com/?p = 94116&preview = true

ビッグデータは人工知能をどのように変えていますか?

ビッグデータは人工知能をどのように変えていますか?

ビッグデータと人工知能は流行語ですが、それらがどのように相互に関連しているか知っていますか?さて、この記事を最後まで読んで、同じことを知ってください。

LiteCartショッピングカートプラットフォームをUbuntu 16.04にインストールする方法

LiteCartショッピングカートプラットフォームをUbuntu 16.04にインストールする方法

LiteCartは、PHP、jQuery、およびHTML 5で記述された無料のオープンソースのショッピングカートプラットフォームです。シンプルで軽量、使いやすいeコマースソフトウォー

DebianでNFS共有をセットアップする

DebianでNFS共有をセットアップする

NFSはネットワークベースのファイルシステムであり、コンピューターはコンピューターネットワークを介してファイルにアクセスできます。このガイドでは、NFを介してフォルダーを公開する方法について説明します

Fedora 28にMatomo Analyticsをインストールする方法

Fedora 28にMatomo Analyticsをインストールする方法

別のシステムを使用していますか?Matomo(旧Piwik)は、Google Analyticsのオープンな代替手段であるオープンソースの分析プラットフォームです。Matomoのソースはoでホストされています

UbuntuでNginxをセットアップしてライブHLSビデオをストリーミングする

UbuntuでNginxをセットアップしてライブHLSビデオをストリーミングする

HTTPライブストリーミング(HLS)は、Apple Inc.によって実装された非常に堅牢なストリーミングビデオプロトコルです。HLSは、ファイアウォール、プロキシ、