コンテンツへスキップ

特定の国を除いたIPをブロックするスクリプト

やけにサイトが重かったりメールが送信できなかったりしたときにサーバー内の接続状況を確認すると、同じIPから大量の接続があったりしますよね。そのようなときはIPをブロックしますが、IPによってはブロックできないことってありますよね。

私の場合、毎回IPの情報を確認してからブロックしています。しかしIPの数によっては大変なので今回はシェルスクリプトで一回で作業を済ますコードを書いてみました。

コードを書く際に至って、https://ipinfo.io を借りています。1日1000件まではIPの情報を取得できるらしい。

ipblocker.sh

#/bin/bash
ip=`ss -t | awk -F : '{print$2}' | awk '{print$2}' | grep -v Peer | sort | uniq`
for i in `echo $ip`
do
cn=`curl https://ipinfo.io/"$i" | grep country | awk '{print$2}'`
echo $i
echo $cn
if [ "$cn" = "\"JP\"," ]; then
  echo "nonblock_JP"
  elif [ `curl https://ipinfo.io/"$i" | grep org | awk '{print$3}'` = "Google" ]; then
    echo "nonblock_Google"
  elif [ `curl https://ipinfo.io/"$i" | grep ip | awk '{print$2}'` = "\"127.0.0.1\"," ]; then
    echo "nonblock_loopback"
  else
      echo "iptables -I INPUT -s $i -j DROP"
      iptables -I INPUT -s $i -j DROP
      fi
done

コードの内容としては、ss コマンドでIPを取得してから、
日本とGoogle、ループバックに関するIP以外だったらブロックする内容になっています。

ブロックした内容は iptables -nL とかで確認してみてください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です