の形で呼ぶ。
//
// anchor_idはフレームを使う場合最低限各フレームごとに設定。お互い他のフレームを書換えたときにへんな干渉をさけるため。
// その他ページの種別毎などで変えてもよいが、あまり小分けにするとcookieが増える。
// 同じanchor_idで保存されるcookieは1セットのみ。でも単独ページ表示のサイトなら概ねこれで充分。
anchor_id = "anc_main";
noanchor = false; // bodyにanchorをしかけたときなど場合によって一時無効にするためのフラグ。
// アンカーの記憶。
function anchor_save(object_id, page_id) {
if(noanchor) { anchor_erase(); return; }
get_scroll();
setcookie(anchor_id+"_pid", page_id, 0);
setcookie(anchor_id+"_st", scroll_top, 0);
setcookie(anchor_id+"_sl", scroll_left, 0);
if(object_id) {
object_top = scroll_top + get_object_top(object_id);
object_left = scroll_left + get_object_left(object_id);
setcookie(anchor_id+"_oid", object_id, 0);
setcookie(anchor_id+"_ot", object_top, 0);
setcookie(anchor_id+"_ol", object_left, 0);
} else {
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
}
// アンカーの適用。
function anchor_apply(page_id) {
if((saved_page_id = getcookie(anchor_id+"_pid")) && page_id != saved_page_id) { return; }
get_scroll();
if((anchor_st = getcookie(anchor_id+"_st")) != "" && (anchor_sl = getcookie(anchor_id+"_sl")) != "") {
anchor_st = parseInt(anchor_st);
anchor_sl = parseInt(anchor_sl);
} else {
anchor_st = scroll_top;
anchor_sl = scroll_left;
}
if((object_id = getcookie(anchor_id+"_oid"))
&& (anchor_ot = getcookie(anchor_id+"_ot")) != ""
&& (anchor_ol = getcookie(anchor_id+"_ol")) != "") {
offset_top = (scroll_top + get_object_top(object_id)) - parseInt(anchor_ot);
offset_left = (scroll_left + get_object_left(object_id)) - parseInt(anchor_ol);
} else {
offset_top = offset_left = 0;
}
window.scrollTo(anchor_sl + offset_left, anchor_st + offset_top);
}
// アンカー消去。あえてとっておく必要がなければanchor_apply()後すぐ消去が望ましい。
function anchor_erase() {
setcookie(anchor_id+"_pid", "", -1);
setcookie(anchor_id+"_st", "", -1);
setcookie(anchor_id+"_sl", "", -1);
setcookie(anchor_id+"_oid", "", -1);
setcookie(anchor_id+"_ot", "", -1);
setcookie(anchor_id+"_ol", "", -1);
}
//-->
倉金家ホームページ
趣味の部屋/サーバー構築メモ その4
サーバーへのアタックを検知し拒絶するソフトとしてFail2banを使用します。 |
|
|
最近のfail2banの設定 (2016.1.2 追加)
最近のバージョンアップに伴いfail2banの設定は監視対象が増えたのとファイルがいろいろ分離されて少しわかりにくくなりました。そのため設定の仕方を少し変えました。 でもめんどうだったので書いてなかったのですが、検索サイトから来てくれる方も多いので、いちおう次ページに現在の設定を記載しておきました。 → アタック対策 fail2ban (2016.1)以下の内容は少し古いので参考までに。 |
|
このあたりまでやるとさっそくログにはssh, httpd, named, postfix, dovecotなどへのしつこいアタックアクセスが記録されてきます。 もちろんサーバーソフトそのものをしっかり設定することが基本なのですが、それにしても鬱陶しいので従来fail2banというソフトでこれらのアタックをシャットアウトしてきました。やっぱり今回もやらないと。
|
インストール
EPELより以下インストール。 fail2ban-server-0.9.1-2.el7.noarch fail2ban-sendmail-0.9.1-2.el7.noarch fail2ban-systemd-0.9.1-2.el7.noarch fail2ban-firewalld-0.9.1-2.el7.noarch fail2ban-0.9.1-2.el7.noarch fail2ban-mail-0.9.1-2.el7.noarch その他依存関係で ipset-libs-6.19-4.el7.x86_64 ipset-6.19-4.el7.x86_64 がインストールされました。
またログ検知のbackendとしてpyinotify(python-inotify)、gamin(gamin、gamin-python)がなければ入れておきます。(backendをautoにすれば必ずしもなくてもいいようだが今まで使っていたので。)
|
まだ何も設定してはいないが試しに起動停止してみる。 ~]# systemctl start fail2ban.service ~]# systemctl status fail2ban.service fail2ban.service - Fail2Ban Service Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled) Active: active (running) since 火 2015-02-24 11:10:20 JST; 11s ago Docs: man:fail2ban(1) Process: 28571 ExecStart=/usr/bin/fail2ban-client -x start (code=exited, status=0/SUCCESS) Main PID: 28574 (fail2ban-server) CGroup: /system.slice/fail2ban.service └─28574 /usr/bin/python /usr/bin/fail2ban-server -s /var/run/fail2ban/fail2ban.sock -p /var/run/fail2ban/fail2ban.pid ...
2月 24 11:10:19 moonlight.iroribata.net fail2ban-client[28571]: 2015-02-24 11:10:19,723 fail2ban.server [28572]: IN....9.1 2月 24 11:10:19 moonlight.iroribata.net fail2ban-client[28571]: 2015-02-24 11:10:19,723 fail2ban.server [28572]: IN...mode 2月 24 11:10:20 moonlight.iroribata.net systemd[1]: Started Fail2Ban Service. Hint: Some lines were ellipsized, use -l to show in full. ~]# systemctl stop fail2ban.service
|
|
ログを確認 /var/log/fail2ban.log 2015-02-24 11:10:19,785 fail2ban.server [28574]: INFO Changed logging target to /var/log/fail2ban.log for Fail2ban v0.9.1 2015-02-24 11:10:19,786 fail2ban.database [28574]: INFO Connected to fail2ban persistent database '/var/lib/fail2ban/fail2ban.sqlite3' 2015-02-24 11:10:20,643 fail2ban.database [28574]: WARNING New database created. Version '2' 2015-02-24 11:18:48,786 fail2ban.server [28574]: INFO Stopping all jails 2015-02-24 11:18:48,787 fail2ban.server [28574]: INFO Exiting Fail2ban
インストールは特に問題ないようだ。 |
|
設定
/etc/fail2ban/jail.local をつくり、/etc/jail.confを参考にして監視対象とするサービスについて記載。 (必要なのはenabled = true のみであとのbantime,findtime,maxentryなどは適宜。) [sshd] enabled = true bantime = 86400 findtime = 3600 maxretry = 3
[apache-botsearch] enabled = true ....
[postfix-sasl] enabled = true ....
[postfix] enabled = true ....
[dovecot] enabled = true ....
[named-refused] enabled = true ....
[vsftpd] enabled = true ....
SELinuxがEnforceモードになっていたらPermisssiveにしてstart,stopをやってみますと予想通り一部ログファイルへのアクセスを阻まれますので許可ポリシーを作ってインストールします。
|
さらに必要なら/etc/fail2ban/filter.dのなかの該当するフィルターファイルのfailregexを編集したりしますが、昔に較べてかなり充実してきておりほとんどそのままでもかまわないようです。
|
起動設定と調整
~]# systemctl enable fail2ban.service ~]# systemctl start fail2ban.service
で自動起動を設定し、起動させておきます。
|
バグ?
fail2banのログを見ていると CRITICAL Unhandled exception in Fail2Ban: Traceback (most recent call last): .... File "/usr/lib/python2.7/site-packages/fail2ban/server/filtersystemd.py", line 172, in formatJournalEntry 'SYSLOG_PID', logentry['_PID']))
といったエラーがでます。バグだそうです。 /usr/lib/python2.7/site-packages/fail2ban/server/filtersystemd.py 172行目 if logentry.get('SYSLOG_PID') or logentry.get('_PID'): logelements[-1] += ("[%i]" % logentry.get( 'SYSLOG_PID', logentry['_PID']))
を、 if logentry.get('SYSLOG_PID') or logentry.get('_PID'): logelements[-1] += ("[%i]" % logentry.get( 'SYSLOG_PID', logentry.get('_PID')))
と修正。 また、サーバーを停止または再起動する際に、 .... : ERROR firewall-cmd --direct --remove-rule ipv4 filter INPUT 0 -p tcp -m multiport --dports ssh -m set --match-set fail2ban-sshd src -j DROP
といったエラーログがでます。fail2banを単独ににstop/startする分には出ませんので、多分システム終了の際にfirewalldが先に終了してしまい、fail2banが投入したルールを削除できなくなってしまうのではないかと推定しています。 プロセスの終了順序を制御する方法がわからないのと特に実害はなさそうなのでいいことにしておきます。 → このサーバー停止時のエラーについては解決しました。次のページ(アタック対策 fail2ban (2016.1))に記載。(2016.1.6 追記) |
|
あとはログをみながらbantime,findtime,maxentryやフィルターなどを調整していくことにします。
|
|
|