ipset + firewall で不正アクセス遮断
Centos Stream 9 :ipset + firewall で不正アクセス遮断
初めに
/var/log/maillogから「connect from unknown」の行の中のIPを取り出し、そのIPを firewall-cmd コマンドでドロップする..という方法です。日に一回、以下のシェルスクリプトを実行させることで段々と減少しているのが分かります。合わせて postfix におけるアクセス制御(smtpd_recipient_restrictions 等)と組み合わせて作動させれば効果は増すものと思われます。
ipset とは?
IPアドレスやネットワークアドレスをまとめてインポートすることができる、IPテーブルの補助的役割を持っています。 ipsetはfirewalldに統合されており firewall-cmd で操作可能です。よって、ipset に登録されているアドレスを、firewall-cmd で一括してブロックする事ができます。
[ipsetで大量のBlock指定を行う]このサイトを参考にしました。
手順
1: maillog より「connect from unknown」のある行のIPを抽出し/var/log/blacklist-file に書き込み( /var/log/blacklist-file は任意の場所.任意名)
「connect from unknown」のある行のIPを抽出
cat /var/log/maillog | grep 'connect from unknown' | egrep -o -e '\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\]' | sed -e 's/^\[\(.*\)\]$/\1/g' | sort | uniq -c | awk '$1 > 1 {print $2}' >> /var/log/blacklist-file
特定の IP を除く(ネットワーク内のクライアントのIP等)
cat /var/log/blacklist-file | grep -v "192.168.11.3" >> /var/log/black_ma-file
2: blacklist-file(IP アドレス) を昇順にソート, 重複行を削除し、blacklist-fileを更新
sort -V /var/log/black_ma-file > /var/log/blacklist-sort_file
uniq /var/log/blacklist-sort_file /var/log/blacklist-sort_file2
rm -f /var/log/blacklist-file
cp -p /var/log/blacklist-sort_file2 /var/log/blacklist-file
#不要ファイルを削除
ipset destroy
rm -f /etc/firewalld/ipsets/BLACKLIST.xml
rm -f /etc/firewalld/ipsets/BLACKLIST.xml.old
rm -f /etc/firewalld/zones/drop.xml
3: firewalldを停止
systemctl stop firewalld.service
4: 旧 ipset のデータを削除します
ipset destroy
rm -f /etc/firewalld/ipsets/BLACKLIST.xml
rm -f /etc/firewalld/ipsets/BLACKLIST.xml.old
rm -f /etc/firewalld/zones/drop.xml
5: firewalldを再開
systemctl start firewalld.service
6: ipsetを新たに作成(セット名をBLACKLISTとする)
firewall-cmd --permanent --new-ipset=BLACKLIST --type=hash:net
# これにより /etc/firewalld/ipsets に blacklist.xmlファイルが作成される
7: 作成したipsetがruntime状態にて利用可能にする
firewall-cmd --reload
systemctl reload firewalld.service
8: 作成した blacklist-file を /etc/firewalld にコピー
rm -f /etc/firewalld/blacklist-file
cp -p /var/log/blacklist-file /etc/firewalld/blacklist-file
9: blacklist-fileに記述されているipアドレスを以下の要領で BLACKLISTに登録する
#旧 BLACKLIST 削除
firewall-cmd --permanent --ipset=BLACKLIST --remove-entries-from-file=/etc/firewalld/blacklist-file
#新 BLACKLIST 登録
firewall-cmd --permanent --ipset=BLACKLIST --add-entries-from-file=/etc/firewalld/blacklist-file
10: ipset blacklistに登録されているアドレスを一括してブロック
firewall-cmd --permanent --zone=drop --add-source=ipset:BLACKLIST
11: 以上の手続きを有効にするため、以下のコマンドでxmlの内容をreload
firewall-cmd --reload
systemctl restart firewalld.service
12:整理して postfix dovecot を再起動
cd /var/log
: > maillog
: > secure
: > messages
cd
postmap /etc/postfix/reject_sender
postfix reload
systemctl restart postfix dovecot
** これにより1日当たりの connect unknown from.... のアクセスは、最近は多くて 1 ~ 4 に激減しています。**