sshguard

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Sshguard and the translation is 100% complete.
Resources

sshguard は侵入防止システムです。サーバーのログを精査して害意ある行動を検出し、危害を加えようとする接続元IPアドレスを拒絶するファイアーウォールを用います。sshguard は、C言語で書かれており、インタプリターは不要です。

動作の仕組み

sshguard は、一つないし複数のログファイルを継続追跡する簡単なデーモンです。他のデーモンが記録したログイン試行失敗のログを精査して、その接続を拒絶するようにシステムファイアーウォールを更新することで、更なる試行を阻止します。

sshguard は、その名称にも拘わらず、 SSH のログのみを精査するわけではありません。多くのメールシステムやいくらかの FTP システムにも対応しています。対応しているサービスの全リストは、sshguard.net ウェブサイト で公開されています。

インストール

Emerge

app-admin/sshguard をインストール:

root #emerge --ask app-admin/sshguard

追加のソフトウェア

sshguard が悪意のあるアクターをブロックするために、init システム、および sshguard に使用させたいファイアウォールバックエンドに応じて、追加のソフトウェアを emerge する必要があるかもしれません。

対応している様々なバックエンドについての詳しい情報は、セットアップ man ページを読むことで見つかります:

root #man 7 sshguard-setup

iptables

システムのファイアウォールとして iptables が使用されているときは。

root #emerge --ask net-firewall/iptables

iptables の利用と設定に関しての詳細は、 iptables の記事 も参照してください。

nftables

システムのファイアウォールとして nftables が使用されているときは:

root #emerge --ask net-firewall/nftables

設定

iptables バックエンド

ファイアーウォールの準備

sshguard が悪意のあるユーザーをブロック (IP アドレスを遮断することによって) するとき、sshguard チェーンを使用します。

iptables でチェーンを準備し、外からの新しい接続が検出されたときにそれが発動することも確認してください:

root #iptables -N sshguard
root #iptables -A INPUT -j sshguard

そして、/etc/sshguard.conf で iptables バックエンドライブラリへの適切なパスが設定されていることを確認してください:

ファイル /etc/sshguard.confBACKEND に iptables ライブラリを設定する
# Full path to backend executable (required, no default)
BACKEND="/usr/libexec/sshg-fw-iptables"

ログファイルの監視

sshguard の背後にある基本的な考え方は、管理者がアプリケーションのオプションとして監視対象のログファイルを渡す、ということです。sshguard 固有の構成ファイルは存在しません。

Gentoo では、このオプションは /etc/sshguard.conf ファイル内に設定するのがベストでしょう:

ファイル /etc/sshguard.confsshguard が /var/log/messages と /var/log/auth.log を読むように設定する
# Space-separated list of log files to monitor. (optional, no default)
FILES="/var/log/messages /var/log/auth.log" 
#
# How many problematic attempts trigger a block
THRESHOLD=10
# Blocks last at least 24 hours (60480 seconds)
BLOCKTIME=60480
# Track IP addresses for 24 hours (60480 seconds)
DETECTION_TIME=60480
#
# IPv6 subnet size to block. Defaults to a single address, CIDR notation. (optional, default to 128)
IPV6_SUBNET=64
# IPv4 subnet size to block. Defaults to a single address, CIDR notation. (optional, default to 32)
IPV4_SUBNET=24
#
# Full path to PID file (optional, no default)
PID_FILE=/run/sshguard.pid

sshguardランタイムユーザーが、使用するログファイルにアクセス可能であることを確認してください。

サービス

OpenRC

sshguardをデフォルトのランレベルに追加することでデフォルトで起動されます:

root #rc-update add sshguard default
root #rc-service sshguard start

systemd

systemd の標準的な方法で有効化して、起動してください:

root #systemctl enable sshguard
root #systemctl restart sshguard

ホストをブラックリストに入れる

ブラックリストオプションを使うと、多数の連続アクセスを受けた後、攻撃者の IP アドレスまたは IP サブネットを永続的にブロックします。ブラックリストは起動のたびに読み込まれ、動作中に新しいエントリで拡張されていきます。連続アクセスのしきい値を超えると、sshguard は新しいアドレスを追加します。

ブラックリストに入れられたアドレスは、再び解放 (許可) が予定されることは決してありません。

ブラックリストを有効化するには、適切なディレクトリとファイルを作成してください:

root #mkdir -p /var/lib/sshguard
root #touch /var/lib/sshguard/blacklist.db

ブラックリストを定義している間は、信頼された IP ネットワークとホストをホワイトリストに入れて除外するのが重要です。

ホワイトリストを有効化するには、適切なディレクトリとファイルを作成してください:

root #mkdir -p /etc/sshguard
root #touch /etc/sshguard/whitelist

ホワイトリストはループバックインターフェースを含む必要があり、少なくとも 1 つの信頼されたネットワーク (この例では 192.0.2.0/24) を持つべきです。

ファイル /etc/sshguard/whitelist信頼されたネットワークをホワイトリストに入れる
127.0.0.0/8
::1/128
192.0.2.0/24
メモ
192.0.2.0/24 のエントリは需要に合うように修正する必要があります。

BLACKLIST_FILE および WHITELIST_FILE ファイルを設定に追加してください。下に例示した設定では、すべてのホストを最初のログイン試行の後にブロックします。より緩やかなブロックポリシーを設定するには、THRESHOLDBLACKLIST_FILE の整数を、2 の代わりに例えば 10 に設定してください:

ファイル /etc/sshguard.conf連続アクセス者をブラックリストに入れるように sshguard を設定する
BACKEND="/usr/libexec/sshg-fw-iptables"
FILES="/var/log/auth.log"
#
THRESHOLD=2
BLOCK_TIME=43200
DETECTION_TIME=604800
#
IPV4_SUBNET=24
IPV6_SUBNET=64
#
PID_FILE=/run/sshguard.pid
#
# 以下の行を追加してください
BLACKLIST_FILE=2:/var/lib/sshguard/blacklist.db
WHITELIST_FILE=/etc/sshguard/whitelist

変更を反映させるために sshguard デーモンを再起動してください:

root #/etc/init.d/sshguard restart

トラブルシューティング

File '/var/log/auth.log' vanished while adding!

起動時に sshguard が次のエラーを報告します:

コード /var/log/auth.log に対する監視を追加しようとして出力されるエラーメッセージ
Sep 23 03:39:11 foo.bar.com sshguard[64933]: File '/var/log/auth.log' vanished while adding!

監視対象ファイル (ファイルパスは異なるかもしれません) がシステム上で利用できない場合、このようなエラーが発生します。ファイルが作成されていることを確認するか、ファイルを監視対象に追加しないように sshguard 構成を更新してください。

OpenRC 上で syslog-ng を動かしているシステムでは、syslog-ng.conf に以下の追記を行うだけで十分です:

ファイル /etc/syslog-ng/syslog-ng.confauth.log ファイルを作成する
log { source(src); destination(messages); };
log { source(src); destination(console_all); };
 
destination authlog {file("/var/log/auth.log"); };
filter f_auth { facility(auth); };
filter f_authpriv { facility(auth, authpriv); };
log { source(src);  filter(f_authpriv);  destination(authlog);  };

変更を有効にするために、設定を再読み込みしてください:

root #rc-service syslog-ng reload

関連項目

  • Fail2ban — a system denying hosts causing multiple authentication errors access to a service.
  • Iptables — a program used to configure and manage the kernel's netfilter modules.

外部の情報

sshguard documentation はアプリケーションをさらに調整するのに必要なすべての情報を提供しています。