os:freebsd:blacklistd
差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
os:freebsd:blacklistd [2024/07/02 04:04] – [blacklistd] seirios | os:freebsd:blacklistd [2024/07/02 04:32] (現在) – [blacklistdに関連するpfctlのコマンド] seirios | ||
---|---|---|---|
行 40: | 行 40: | ||
という考察をした。もちろん、blacklistdで対応できる範囲はそれほど大きくないが、それでも何もしないよりは大きく改善することが期待できる。 | という考察をした。もちろん、blacklistdで対応できる範囲はそれほど大きくないが、それでも何もしないよりは大きく改善することが期待できる。 | ||
- | ===== 準備 | + | ===== blacklistdの導入 |
FreeBSDだと、portsを使ってPostfixをCompileして導入すればblacklistdに対応できる。Option設定画面でblacklistdをOnにしておくこと。 | FreeBSDだと、portsを使ってPostfixをCompileして導入すればblacklistdに対応できる。Option設定画面でblacklistdをOnにしておくこと。 | ||
行 100: | 行 100: | ||
* Interface $IFextn (xn1)において、 | * Interface $IFextn (xn1)において、 | ||
* Incomming(外から入ってくる通信)に対して、 | * Incomming(外から入ってくる通信)に対して、 | ||
- | * blacklistdが作成するAnchorデータを適用する | + | * blacklistdが作成するAnchorルールを適用する |
ということになる。 | ということになる。 | ||
行 140: | 行 140: | ||
# WhiteLists | # WhiteLists | ||
- | # adr/ | + | # adr/ |
[remote] | [remote] | ||
- | # Never block 10.1.0.0/16 | + | # Never block localhost |
- | 127.0.0.1/ | + | 127.0.0.1/ |
+ | [:: | ||
</ | </ | ||
行 155: | 行 156: | ||
</ | </ | ||
* -rは、最後にblacklistdを修了した時のBlacklistデータを読み込む | * -rは、最後にblacklistdを修了した時のBlacklistデータを読み込む | ||
- | * -t [数値]は、登録されたIP Address情報をDBと比較して必要な更新を行うInterval time | + | * -t [数値]は、登録されたIP Address情報をDBと比較して必要な更新を行うInterval time |
* このInterval timeはあくまでもDBとメモリー情報を同期するものであって、fail 回数を初期化するものではないことに注意 | * このInterval timeはあくまでもDBとメモリー情報を同期するものであって、fail 回数を初期化するものではないことに注意 | ||
* -fを起動時引数に与えると、DBを初期化してから起動する | * -fを起動時引数に与えると、DBを初期化してから起動する | ||
行 171: | 行 172: | ||
* '' | * '' | ||
* Rulesetに記載された全てのAnchorを含むRulesetを確認 | * Rulesetに記載された全てのAnchorを含むRulesetを確認 | ||
- | * Anchor業が展開される | + | * Anchor行が展開される |
* < | * < | ||
anchor " | anchor " | ||
行 189: | 行 190: | ||
# pfctl -a " | # pfctl -a " | ||
block drop in quick proto tcp from < | block drop in quick proto tcp from < | ||
+ | </ | ||
* それぞれのTableを確認 | * それぞれのTableを確認 | ||
* Configを見れば自明だが、一応コマンドで取得 | * Configを見れば自明だが、一応コマンドで取得 | ||
行 243: | 行 245: | ||
</ | </ | ||
* '' | * '' | ||
- | * Blacklistに載っている「まだfailではない」リストを表示 | + | * Blacklistに載っている「まだblockするほどではない」リストを表示 |
* < | * < | ||
# blacklistctl dump -r | # blacklistctl dump -r | ||
行 272: | 行 274: | ||
</ | </ | ||
- | === 落穂拾い === | + | ===== 落穂拾い |
<WRAP round info> | <WRAP round info> | ||
- | === name === | + | ==== name ==== |
nameフィールドは、使用するパケットフィルタールールの名前である。 | nameフィールドは、使用するパケットフィルタールールの名前である。 | ||
行 286: | 行 288: | ||
<WRAP round info> | <WRAP round info> | ||
- | === disable / duration === | + | ==== disable / duration |
このフィールドには '' | このフィールドには '' | ||
行 305: | 行 307: | ||
<WRAP round tip> | <WRAP round tip> | ||
- | === 自分の接続元IPアドレスがblacklistに登録された === | + | ==== 自分の接続元IPアドレスがblacklistに登録された |
現在 blocklistctl には登録されているアドレスを削除する機能が無い。(というよりdumpしかできない) | 現在 blocklistctl には登録されているアドレスを削除する機能が無い。(というよりdumpしかできない) | ||
行 314: | 行 316: | ||
<WRAP round info> | <WRAP round info> | ||
- | === どうやって過去のAddressデータを保存しているのか? === | + | ==== どうやって過去のAddressデータを保存しているのか? |
blacklistdは、''/ | blacklistdは、''/ | ||
行 322: | 行 324: | ||
<WRAP round Alert> | <WRAP round Alert> | ||
- | === blacklistdのデータを複数台で共有 === | + | ==== blacklistdのデータを複数台で共有 |
Blacklistdは、sourcecodeを見る限り、DBファイルに対してLockなどの操作を行っていないように見える。 | Blacklistdは、sourcecodeを見る限り、DBファイルに対してLockなどの操作を行っていないように見える。 | ||
したがって、これを見る限りでは、このDBのデータファイルを複数台のマシンで共有すると、Dataを破損する可能性があると考えられる。 | したがって、これを見る限りでは、このDBのデータファイルを複数台のマシンで共有すると、Dataを破損する可能性があると考えられる。 | ||
</ | </ | ||
+ | |||
+ | ===== 末尾に追加でおまけ ===== | ||
+ | 本文中におまけはあるんだけど、こっちにやられた時の顛末とかのおまけを記載します。 | ||
+ | |||
+ | ==== 解析した内容 ==== | ||
+ | 全てはmaillogからの解析。 | ||
+ | * 攻撃は、常に、定常的に、いろいろなIP Addressから来ている。 | ||
+ | * ここ3ヶ月くらいのmaillog見る限り、毎日150回くらいのSMTP AUTH認証失敗logがある。 | ||
+ | * SRC IP Addressは割とバラバラ。みた感じ1画面に収まらなかったから、少なくとも50以上は攻撃元がある。 | ||
+ | * 1発SMTP AUTHに成功したら、outlook.comに試験メールを送信し、メール転送に成功することを確認。 | ||
+ | * 3時間後、10秒間で10通メールを転送しようとして弾かれる | ||
+ | * その30分後、2分間で21通メールを転送しようとして弾かれる | ||
+ | * さらにその20分後、2分間で21通メール転送しようとして弾かれる | ||
+ | * 繰り返し | ||
+ | という挙動だった | ||
+ | |||
+ | ==== 雑感 ==== | ||
+ | 今回は、送付先のメールサーバーがSMTPUTF8受け付けなかったからエラーメールになって帰ってきて、だから気づけたけど、はっきり言って、これは運がよかっただけ。 | ||
+ | 転送失敗してなかったら気づかなかったまであるわけで。 | ||
+ | |||
+ | 問題は、 | ||
+ | * 攻撃者は、長めの間隔で攻撃してくるから、見つけにくいし止めにくい | ||
+ | * spam送信も30分程度に20通程度送るだけだから、弾かれにくい | ||
+ | * ある程度(3時間程度か?)の間隔でmaillog解析して挙動確認しないとやられても気づけない | ||
+ | * パスワードでの認証は何らかのきっかけで突破される | ||
+ | * SMTP AUTHレベルで突破されたら、DKIMやらDMARCやらでは止められない | ||
+ | というあたりにある。 | ||
+ | |||
+ | 結局、DKIMやDMARC、SPFは、いわゆるOpenRelayに近いメールへの対策としてはそれなりに効果はあるんだろうけど、パスワード抜かれたら終わりというのは変わらない。まぁ、パスワード認証を利用する限りそうなるのは自明なんだけど...。SMTP捨てられればいいんだけど、なかなかそういうわけにも行かないし。 | ||
+ | |||
+ | パスワード認証の代わりに個人証明書を使うといのはないわけじゃない。設定や利用に関しては、まぁ、面倒なだけでやれなくはないし。 | ||
+ | ただ、この手を採用した場合の問題は、「個人証明書の発行」にある。 | ||
+ | 今時オレオレ証明書ってのは面倒が過ぎる(client側の設定も鯖側の設定も面倒)だし、自分がsubsidiary CAになるのは大変が過ぎるし... | ||
+ | でもまぁ、いうて、弱いパスワードが何よりも悪いのは事実だな。こいつをまず何とかするか。 | ||
+ | |||
+ | === ちょっとだけ愚痴 === | ||
+ | 今回blacklistdを導入するにあたって、pfで対応するサンプルが非常に少なかった。なので、結局source codeまで見ないとわからないところがたくさんあった。 | ||
+ | |||
+ | FreeBSDにおけるFirewall実装を選ぶなら、スピードの点でipfwが一番良い。特にCiscoとかの昔ながらRouterでFirewall設定したことがある人はipfwの方がわかりやすいとおもう。ただ、筆者は今時のPacket Filter Firewallでは設定はある程度抽象化されていて欲しい。その意味で、OpenBSD由来のpfは非常に気に入っている。 | ||
+ | |||
+ | ただ、FreeBSDに移植されているpfは、OpenBSDのpfよりも常に古いのがやはり辛い。NAT64はOpenBSDならpfでできるんだけど、FreeBSDだとipfwでやるしか今のところないし。 | ||
+ | |||
+ | うーん、やっぱり色々難しいなぁ... | ||
+ | |||
+ | |||
os/freebsd/blacklistd.1719860678.txt.gz · 最終更新: by seirios