不正アクセス大杉
2022年5月に入ったあたりから、メールアカウント乗っ取りチャレンジ(DDoSかも?)が増えてきたので対策した。
/var/log/auth.log
に現れる大量のauthentication failure
。認証に失敗したら接続元の国に応じてiptablesに登録される仕組みとしているが、ログから判断する仕組みなので、最初の1回は認証チャレンジさせてしまう。
ユーザーのパスワードはそれなりに強固なものにしているが、たまたま成功する可能性がゼロではない。接続元のIPは国外からが多く、また対象としているサーバーは国外から認証する機会は業務上ほぼ無いので、今回は海外からの認証を試みるIPに対して最初の1回目から認証を通さないようにdovecotを設定する。
Dovecotの設定
/etc/dovecot/conf.d/auth-system.conf.ext
に許可するIPを記載する。
passdb {
driver = pam
# [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
# [cache_key=<key>] [<service name>]
#args = dovecot
# 以下を追記
override_fields = allow_nets=localhost,192.168.0.0/16,127.0.0.0/8,・・・・・
# 以下略
実際の設定は国内全てのIPをコピペした。これで国外IPからのアクセスでは、例え正しいユーザーIDとパスワードを入力してもfailure
となる。定期的にIPリスト更新しないと不具合があるかもしれない。スクリプトはそのうち作るかぁ(来週くらいからやるかぁ位の気力)。
記載後Dovecotを再起動して設定反映。
systemctl restart dovecot
念のためstatusでエラーが起きていないか確認することを推奨。
systemctl status dovecot
記載を自動化する
重い腰を上げてようやく自動化。
まずは日本のIPアドレス一覧をダウンロード。ここでは/root/COUNTRY_CODE
というディレクトリにJP_LIST.txt
というファイルでダウンロードしている。fetus.jpさんからダウンロード。適当に名前をつけて/etc/cron.monthly
あたりに入れておくか、必要に応じて手動実行でも良いかな。
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
########################################################
# JP IP address (CIDR) file auto downloading scripts. #
########################################################
rm -f /root/COUNTRY_CODE/JP_LIST.txt.old
mv /root/COUNTRY_CODE/JP_LIST.txt /root/COUNTRY_CODE/JP_LIST.txt.old
wget -q -O /root/COUNTRY_CODE/JP_LIST.txt https://ipv4.fetus.jp/jp.txt --user-agent='xxxxx@xxxxx.jp' --referer='Thanks from xxxxx.jp'
if [ $? -ne 0 ]; then
echo "Couldn't download JP_list from fetus.jp" | mail -s 'JP_list downloading failed.' root
mv /root/COUNTRY_CODE/JP_LIST.txt.old /root/COUNTRY_CODE/JP_LIST.txt
exit
fi
if [ -s /root/COUNTRY_CODE/JP_LIST.txt ]; then
rm -f /root/COUNTRY_CODE/JP_LIST.txt.old
else
rm -f /root/COUNTRY_CODE/JP_LIST.txt
mv /root/COUNTRY_CODE/JP_LIST.txt.old /root/COUNTRY_CODE/JP_LIST.txt
exit
fi
auth-system.conf.ext
で:set number
して、何行目を編集するのか確認する。
今回は19行目が編集対象の行。
DLした一覧を元にdovecot
の設定ファイルを直接編集。
vi dovecot_makeconf.sh
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin
###########################################################################################
# JP_LIST.txt のデータを元にdovecotのフィルタルールを作成します。
# /etc/dovecot/conf.d/auth-system.conf.extに認証を許可するIP(日本のIP)を記載します。
###########################################################################################
IP_LIST="/root/COUNTRY_CODE/JP_LIST.txt"
MYSTR=""
DOVEFILE="/etc/dovecot/conf.d/auth-system.conf.ext"
rm -f $MYSTR
echo -n " override_fields = allow_nets=localhost,192.168.0.0/16,127.0.0.0/8" >> $MYSTR
for addr in `cat $IP_LIST | grep '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.'`
do
echo -n ",$addr" >> $MYSTR
done
# 確認した行番号で入力。今回は19行目が対象です。
sed -i '19d' $DOVEFILE
sed -i "19i $MYSTR" $DOVEFILE
編集後はdovecot
の再起動が必要。
systemctl restart dovecot
一覧のダウンロードから再起動まですべて繋げて手動実行でもまぁ問題なさそう。
注意点
これで海外からのアカウント乗っ取りアクセスが100%防げるわけではありません。実際にある手口として、日本のIPアドレスを取得(海外にそういうサービスを提供しているサイトがある)してアクセスしてくるもの、日本国内のレンタルサーバからアクセスしてくるものがあるので、一定時間内の認証回数制限(hashlimit)やリトライ回数に応じた動的ファイヤーウォール等の対策は必須です。
参考サイト