LoginSignup
0
0

More than 1 year has passed since last update.

日本割当IPレンジを定期的に ipset で add/del する Shell Script

Last updated at Posted at 2023-01-23
ipset-whitelist-corn
#!/bin/bash

function log2 {
    local x=0
    for (( y=$1-1 ; $y > 0; y >>= 1 )) ; do
        let x=$x+1
    done
    echo $x
}

MAILTO='example@example.jp'
DATAURL='http://ftp.apnic.net/stats/apnic/delegated-apnic-extended-latest'
ROOTDIR='/root/ipset'
WHITELIST_LABEL='WHITELIST'
LOG_FILENAME="${ROOTDIR}/${WHITELIST_LABEL}.log"
HISTORY_LOG=${ROOTDIR}/history_log

IPSET='/sbin/ipset'

mkdir -p ${ROOTDIR}
${IPSET} create -exist ${WHITELIST_LABEL} hash:net

WHITELIST_FILENAME="${ROOTDIR}/${WHITELIST_LABEL}.ipset"

date >>${LOG_FILENAME}

[ -e ${WHITELIST_FILENAME} ] \
&& awk '{print $3}' ${WHITELIST_FILENAME}|sort|uniq|egrep '^[0-9]' \
> ${WHITELIST_FILENAME}.before

curl -s ${DATAURL} \
| grep JP \
| grep ipv4 \
| while read r; do
IPNUM=$(echo $r|cut -d\| -f5)
BIT=$(log2 ${IPNUM})
echo $(echo $r|cut -d\| -f4)/$(expr 32 - ${BIT})
done \
> ${WHITELIST_FILENAME}.tmp

[ ! -s ${WHITELIST_FILENAME}.tmp ] \
&& echo "${WHITELIST_FILENAME}.tmp is empty!!" \
&& exit 1

cat <<EOL >> ${WHITELIST_FILENAME}.tmp
EOL

cat ${WHITELIST_FILENAME}.tmp|sort|uniq|egrep '^[0-9]' \
> ${WHITELIST_FILENAME}.after

[ ! -e ${WHITELIST_FILENAME}.before ] \
&& touch ${WHITELIST_FILENAME}.before

diff ${WHITELIST_FILENAME}.before ${WHITELIST_FILENAME}.after \
| egrep '^(>|<)' \
| while read r; do
echo $(echo $r|sed -e "s/</del ${WHITELIST_LABEL}/" -e "s/>/add ${WHITELIST_LABEL}/")
${IPSET} $(echo $r|sed -e "s/</del ${WHITELIST_LABEL}/" -e "s/>/add ${WHITELIST_LABEL}/")
done 2>&1 \
| tee -a ${LOG_FILENAME} \
| mail -s ipset_update_mail-parknet-ne-jp ${MAILTO} >> ${LOG_FILENAME} 2>&1

mkdir -p ${HISTORY_LOG}
mv ${WHITELIST_FILENAME} ${HISTORY_LOG}/${WHITELIST_LABEL}.ipset.$(date '+%Y-%m-%d-%H-%M')

${IPSET} save ${WHITELIST_LABEL} > ${WHITELIST_FILENAME}

exit 0
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0