IT pass HikiWiki - [Memo2011][ITPASS] ika 構築作業ログ 18 (fail2ban) Diff
- Added parts are displayed like this.
- Deleted parts are displayed
like this.
11/11/02 に fail2ban のインストールを関,大西で行った.(ロガー: 大西)
{{toc}}
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]
== fail2ban のインストール
以下のコマンドを実行し, fail2ban をインストールした.
$ sudo -s
# apt-get install fail2ban
== iptable -L でインストールされたことを確認
以下のように表示された.
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
== ssh に関する設定
設定ファイルは, /etc/fail2ban/jail.conf である.
以下のコマンドで jail.conf の内容を確認した.
#less /etc/fail2ban/jail.conf
以下に, 内容の一部を記載する.
destemail = itpadmin@localhost
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
この部分を, 以下のように書き換えた.
destemail = itpadmin@localhost
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
jail.conf の内容にある文字列の意味は以下.
* ignoreip: 不正アクセスとして扱わないアクセス元を指定.
* bantime: 不正アクセスと認めたときに, アクセスを何秒遮断するか指定.
* findtime, maxretry: findtime 秒間のうちに maxretry 回失敗すると不正アクセスとみなされる.
* destemail: 不正アクセスが認められたときのメールの送り先.
* logpath: 監視をするログの場所を指定する.
== fail2ban を起動する
以下のコマンドで fail2ban を起動した.
# /etc/init.d/fail2ban start
fail2ban が動いているか確認した.
# /etc/init.d/fail2ban status
Status of authentication failure monitor:fail2ban is running.
== ssh の動作テスト
関の計算機から ssh による接続を試みた.
$ ssh hoge@133.30.109.21
The authenticity of host '133.30.109.21 (133.30.109.21)' can't be established.
RSA key fingerprint is bb:17:63:6f:69:b7:84:66:36:60:ff:23:e4:f5:6c:e2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '133.30.109.21' (RSA) to the list of known hosts.
hoge@133.30.109.21's password:
Permission denied, please try again.
hoge@133.30.109.21's password:
Permission denied, please try again.
hoge@133.30.109.21's password:
Permission denied (publickey,password).
$ ssh hoge@133.30.109.21
hoge@133.30.109.21's password:
Permission denied, please try again.
hoge@133.30.109.21's password:
3 回失敗すると接続が切られ, 何も表示されなくなった.
その後, 10 分間は同じ IP アドレスからは接続できなくなった.
以下のコマンドで, ssh が ban されたか確認した.
#iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
DROP all -- 133.30.???.?? anywhere
RETURN all -- anywhere anywhere
/var/log/fail2ban.log を確認すると, 以下の記述が書かれていた.
2011-11-02 15:05:53,893 fail2ban.actions: WARNING [ssh] Ban 133.30.***.**
2011-11-02 15:15:54,566 fail2ban.actions: WARNING [ssh] Unban 133.30.***.**
== 挙動がシステムログメールに記載されるように設定
=== スクリプトの設置
マニュアルに設置するよう書かれていたが, 前の作業[((<[Memo2011][ITPASS] ika 構築作業ログ 13 (ログ設定)>))]で設置が完了していたためこの作業は行わなかった.
== 残っている作業
11/11/03の tako のシステムログメールを確認する.
== apache に関する設定
=== 設定ファイルの書き換え
/etc/fail2ban/jail.conf の apache に関する設定を以下のように書き換えた.
変更前
[apache]
enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
# default action is now multiport, so apache-multiport jail was left
# for compatibility with previous (<0.7.6-2) releases
[apache-multiport]
enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
変更後
[apache]
enabled = true
port = http,https
filter = apache-auth
findtime= 60
logpath = /var/log/httpd-error.log
maxretry = 30
bantime = 1200
# default action is now multiport, so apache-multiport jail was left
# for compatibility with previous (<0.7.6-2) releases
[apache-multiport]
enabled = true
port = http,https
filter = apache-auth
findtime = 10
logpath = /var/log/httpd-access.log
maxretry = 30
=== failregex の追加
* /etc/fail2ban/filter.d/apache-auth.conf の failregex を以下のように編集する.
* failregex を設定すると, その設定に対応したログのメッセージをカウントし, findtime 以内に maxretry 回,
同じ IP アドレスからのメッセージがカウントされるとその IP アドレスからのアクセスが ban される.
* ignoreregex は failregex で設定したもののうち, カウントしたくないメッセージがある場合に設定する.
変更前
failregex = [[]client <HOST>[]] user .* authentication failure
[[]client <HOST>[]] user .* not found
[[]client <HOST>[]] user .* password mismatch
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
変更後
failregex = [[]client <HOST>[]] user .* authentication failure
[[]client <HOST>[]] user .* not found
[[]client <HOST>[]] user .* password mismatch
[[]client <HOST>[]] (13)Permission denied:
[[]client <HOST>[]] File does not exist:
^<HOST> -.*GET.*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex = ^<HOST> -.*GET.*(jpg|jpeg|gif|png).*
* 一つの html ページに画像がたくさん貼付けてあるとそれだけで引っかかってしまう. そのため, png, jpg(jpeg), gif についても ignore に追加した.
=== 動作テスト(未完了)
11/11/03 に作業を行う.
== fail2ban.conf の中のログ確認
#less /etc/fail2ban.fail2ban.conf
# Option: loglevel
# Notes.: Set the log level output.
# 1 = ERROR
# 2 = WARN
# 3 = INFO
# 4 = DEBUG
# Values: NUM Default: 3
#
loglevel = 3
ログレベルが 3 になっていることを確認した.
{{toc}}
[((<ITPASSサーバ構築ドキュメント>)) へ戻る]
== fail2ban のインストール
以下のコマンドを実行し, fail2ban をインストールした.
$ sudo -s
# apt-get install fail2ban
== iptable -L でインストールされたことを確認
以下のように表示された.
# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
== ssh に関する設定
設定ファイルは, /etc/fail2ban/jail.conf である.
以下のコマンドで jail.conf の内容を確認した.
#less /etc/fail2ban/jail.conf
以下に, 内容の一部を記載する.
destemail = itpadmin@localhost
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 6
この部分を, 以下のように書き換えた.
destemail = itpadmin@localhost
[ssh]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 4
jail.conf の内容にある文字列の意味は以下.
* ignoreip: 不正アクセスとして扱わないアクセス元を指定.
* bantime: 不正アクセスと認めたときに, アクセスを何秒遮断するか指定.
* findtime, maxretry: findtime 秒間のうちに maxretry 回失敗すると不正アクセスとみなされる.
* destemail: 不正アクセスが認められたときのメールの送り先.
* logpath: 監視をするログの場所を指定する.
== fail2ban を起動する
以下のコマンドで fail2ban を起動した.
# /etc/init.d/fail2ban start
fail2ban が動いているか確認した.
# /etc/init.d/fail2ban status
Status of authentication failure monitor:fail2ban is running.
== ssh の動作テスト
関の計算機から ssh による接続を試みた.
$ ssh hoge@133.30.109.21
The authenticity of host '133.30.109.21 (133.30.109.21)' can't be established.
RSA key fingerprint is bb:17:63:6f:69:b7:84:66:36:60:ff:23:e4:f5:6c:e2.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '133.30.109.21' (RSA) to the list of known hosts.
hoge@133.30.109.21's password:
Permission denied, please try again.
hoge@133.30.109.21's password:
Permission denied, please try again.
hoge@133.30.109.21's password:
Permission denied (publickey,password).
$ ssh hoge@133.30.109.21
hoge@133.30.109.21's password:
Permission denied, please try again.
hoge@133.30.109.21's password:
3 回失敗すると接続が切られ, 何も表示されなくなった.
その後, 10 分間は同じ IP アドレスからは接続できなくなった.
以下のコマンドで, ssh が ban されたか確認した.
#iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
fail2ban-ssh tcp -- anywhere anywhere multiport dports ssh
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain fail2ban-ssh (1 references)
target prot opt source destination
DROP all -- 133.30.???.?? anywhere
RETURN all -- anywhere anywhere
/var/log/fail2ban.log を確認すると, 以下の記述が書かれていた.
2011-11-02 15:05:53,893 fail2ban.actions: WARNING [ssh] Ban 133.30.***.**
2011-11-02 15:15:54,566 fail2ban.actions: WARNING [ssh] Unban 133.30.***.**
== 挙動がシステムログメールに記載されるように設定
=== スクリプトの設置
マニュアルに設置するよう書かれていたが, 前の作業[((<[Memo2011][ITPASS] ika 構築作業ログ 13 (ログ設定)>))]で設置が完了していたためこの作業は行わなかった.
== 残っている作業
11/11/03の tako のシステムログメールを確認する.
== apache に関する設定
=== 設定ファイルの書き換え
/etc/fail2ban/jail.conf の apache に関する設定を以下のように書き換えた.
変更前
[apache]
enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
# default action is now multiport, so apache-multiport jail was left
# for compatibility with previous (<0.7.6-2) releases
[apache-multiport]
enabled = false
port = http,https
filter = apache-auth
logpath = /var/log/apache*/*error.log
maxretry = 6
変更後
[apache]
enabled = true
port = http,https
filter = apache-auth
findtime= 60
logpath = /var/log/httpd-error.log
maxretry = 30
bantime = 1200
# default action is now multiport, so apache-multiport jail was left
# for compatibility with previous (<0.7.6-2) releases
[apache-multiport]
enabled = true
port = http,https
filter = apache-auth
findtime = 10
logpath = /var/log/httpd-access.log
maxretry = 30
=== failregex の追加
* /etc/fail2ban/filter.d/apache-auth.conf の failregex を以下のように編集する.
* failregex を設定すると, その設定に対応したログのメッセージをカウントし, findtime 以内に maxretry 回,
同じ IP アドレスからのメッセージがカウントされるとその IP アドレスからのアクセスが ban される.
* ignoreregex は failregex で設定したもののうち, カウントしたくないメッセージがある場合に設定する.
変更前
failregex = [[]client <HOST>[]] user .* authentication failure
[[]client <HOST>[]] user .* not found
[[]client <HOST>[]] user .* password mismatch
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =
変更後
failregex = [[]client <HOST>[]] user .* authentication failure
[[]client <HOST>[]] user .* not found
[[]client <HOST>[]] user .* password mismatch
[[]client <HOST>[]] (13)Permission denied:
[[]client <HOST>[]] File does not exist:
^<HOST> -.*GET.*
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex = ^<HOST> -.*GET.*(jpg|jpeg|gif|png).*
* 一つの html ページに画像がたくさん貼付けてあるとそれだけで引っかかってしまう. そのため, png, jpg(jpeg), gif についても ignore に追加した.
=== 動作テスト(未完了)
11/11/03 に作業を行う.
== fail2ban.conf の中のログ確認
#less /etc/fail2ban.fail2ban.conf
# Option: loglevel
# Notes.: Set the log level output.
# 1 = ERROR
# 2 = WARN
# 3 = INFO
# 4 = DEBUG
# Values: NUM Default: 3
#
loglevel = 3
ログレベルが 3 になっていることを確認した.