qmail user not found | password fail 接続試行(任意回数)以上で自動遮断するスクリプト作ってみた

2021年12月5日

 

qmail user not found 接続試行(任意回数)以上で自動遮断するスクリプト作ってみた


Source

#!/usr/bin/env bashexport PATH=$PATH:/sbin # 試行回数 attemptFreq="10" attemptFreqTwo="2" list="$(cat /var/log/maillog | grep "vpopmail user not found" | awk '{ print $11 }' | sed "s/:/ /" | awk '{ print $2 }' | sort -rn | uniq -c | sort -rn)" listTwo="$(grep "password fail" /var/log/maillog | sed 's/:/ /g' | awk '{ print $12 }' | sort | uniq -c | sort -rn | head)" ipList=($(echo"$list" | awk '{ print $2 }')) ipSumList=($(echo"$list" | awk '{ print $1 }')) ipList+=($(echo"$listTwo" | awk '{ print $2 }')) ipSumList+=($(echo"$listTwo" | awk '{ print $1 }')) iptablesDropList="$(iptables -L -n --line-number | grep "DROP" | egrep -v "0.0.0.0\/0 0.0.0.0\/0" | awk '{ print $5 }' | grep -o -E "([0-9]{1,3}.){2}[0-9]{1,3}" | sort | uniq -c | sort -rn)" iptablesDropListIp=($(echo "$iptablesDropList" | awk '{ print $2 }')) iptablesDropListSum=($(echo "$iptablesDropList" | awk '{ print $1 }')) # debug #echo "${ipList[@]}" #echo "${ipSumList[@]}" if [ "${#ipList[@]}" -eq "${#ipSumList[@]}" ]; then for(( i = 0; i < "${#ipList[@]}"; i++ )) { if [ "${ipSumList[i]}" -ge "$attemptFreq" ]; then if [ "$(iptables -L -n | grep -c "${ipList[i]}")" -eq "0" ]; then iptables -I INPUT -s "${ipList[i]}"/32 -j DROP /etc/init.d/iptables save /etc/init.d/iptables reload if [ "$(iptables -L -n | grep -c "${ipList[i]}")" -eq "1" ]; then echo "試行回数:$attemptFreq以上の${ipList[i]}を「iptablesの拒否ルールとして追加しました。」 $(date +%Y%m%d_%H:%M)" fi fi fi } fi if [ "${#iptablesDropListIp[@]}" -eq "${#iptablesDropListSum[@]}" ]; then for(( i = 0; i < "${#iptablesDropListIp[@]}"; i++ )) { if [ "${iptablesDropListSum[i]}" -ge "$attemptFreqTwo" ]; then if [ "$(iptables -L -n | grep -c "${iptablesDropListIp[i]}.0/24")" -eq "0" ]; then iptables -I INPUT -s "${iptablesDropListIp[i]}.0/24" -j DROP /etc/init.d/iptables save /etc/init.d/iptables reload if [ "$(iptables -L -n | grep -c "${iptablesDropListIp[i]}.0/24")" -eq "1" ]; then echo "試行回数:$attemptFreqTwo以上の${iptablesDropListIp[i]}を「iptablesの拒否ルールとしてレンジ指定で追加しました。」" fi fi fi } fi

Result

iptables: ファイアウォールのルールを /etc/sysconfig/iptables に保存中: [ OK ]
iptables: Trying to reload firewall rules: [ OK ]
試行回数:10以上の{XXX.XXX.XXX.XXX}を「iptablesの拒否ルールとして追加しました。」

試行回数:2以上の{XXX.XXX.XXX}を「iptablesの拒否ルールとしてレンジ指定で追加しました。」
iptables: ファイアウォールのルールを /etc/sysconfig/iptables に保存中: [ OK ]
iptables: Trying to reload firewall rules: [ OK ]
試行回数:2以上の{XXX.XXX.XXX}を「iptablesの拒否ルールとしてレンジ指定で追加しました。」