ipset + firewall で不正アクセス遮断

投稿日:

ya2205_2022.png

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 に激減しています。**