sshguard

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Sshguard and the translation is 50% complete.
Outdated translations are marked like this.
Other languages:
English • ‎español • ‎italiano • ‎русский • ‎தமிழ் • ‎中文(中国大陆)‎ • ‎日本語 • ‎한국어
Resources

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

動作の仕組み

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

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

インストール

Emerge

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

root #emerge --ask app-admin/sshguard

Additional software

Depending on the init system and the desired firewall backend to be used by sshguard, additional software may be required to be emerged in order for sshguard to block malicious actors.

More information on various supported backends can be found by reading the setup manpage:

root #man 7 sshguard-setup

iptables

また、システムファイアーウォールを展開するために、 net-firewall/iptables もインストールします。なお本稿作成段階では、 sshguard は net-firewall/nftables には対応していません。

root #emerge --ask net-firewall/iptables

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

nftables

When nftables are being used as the system firewall:

root #emerge --ask net-firewall/nftables

設定

iptables backend

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

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

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

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

Then verify that the appropriate path to the iptables backend library is set in /etc/sshguard.conf:

FILE /etc/sshguard.confSet iptables library for BACKEND
# Full path to backend executable (required, no default)
BACKEND="/usr/libexec/sshg-fw-iptables"

ログファイルの監視

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

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

{{FileBox|filename=/etc/sshguard.conf|title=sshguard が /var/log/messages と /var/log/auth.log を読むように設定する|lang=bash|1=

  1. Full path to backend executable (required, no default)

BACKEND="/usr/libexec/sshg-fw-iptables"

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

サービス

OpenRC

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

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

systemd

Use systemd's conventional way to enable it, and then start it:

root #systemctl enable sshguard
root #systemctl restart sshguard

Blacklisting hosts

With the blacklisting option after a number of abuses the IP address of the attacker or a IP subnet will be blocked permanently. The blacklist will be loaded at each startup and extended with new entries during operation. sshguard inserts a new address after it exceeded a threshold of abuses.

Blacklisted addresses are never scheduled to be released (allowed) again.

To enable blacklisting, create an appropriate directory and file:

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

While defining a blacklist it is important to exclude trusted IP networks and hosts in a whitelist.

To enable whitelisting, create an appropriate directory and file:

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

The whitelist has to include the loopback interface, and should have at least 1 IP trusted network f.e. 192.0.2.0/24.

FILE /etc/sshguard/whitelistWhitelisting trusted networks
127.0.0.0/8
::1/128
192.0.2.0/24
Note
The 192.0.2.0/24 entry has to be adjusted to fit the own needs.

Add the BLACKLIST_FILE and WHITELIST_FILE file to the configuration. Example configuration listed blocks all hosts after the first login attempt. To setup a less agressive blocking policy, adjust the THRESHOLD and BLACKLIST_FILE integer, and set it to f.e. 10 instead of 2:

FILE /etc/sshguard.confConfiguring sshguard to blacklist abusers
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
#
# Add following lines
BLACKLIST_FILE=2:/var/lib/sshguard/blacklist.db
WHITELIST_FILE=/etc/sshguard/whitelist

Restart the sshguard daemon to have the changes take effect:

root #/etc/init.d/sshguard restart

トラブルシューティング

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

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

CODE Error message when trying to add a monitor for /var/log/auth.log
Sep 23 03:39:11 foo.bar.com sshguard[64933]: File '/var/log/auth.log' vanished while adding!

ターゲット・ファイルがシステム上で利用できない場合、このようなエラーが(ファイルパス自体が異なる場合があります)が発生します。それが作成されていることを確認し、または監視のためにそれを追加しないようにsshguard構成を更新します。

On a syslog-ng system with OpenRC, the following addition to syslog-ng.conf can suffice:

FILE /etc/syslog-ng/syslog-ng.confcreating auth.log file
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

参考

外部の情報

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