コンテンツへスキップ

やけにサイトが重かったりメールが送信できなかったりしたときにサーバー内の接続状況を確認すると、同じ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 とかで確認してみてください。

ここ2週間近く友人の小説の表紙と裏表紙の手伝いをしていました。
ひとまず製本依頼までできたので後は本が届くのを待つだけですね。
まだ公開していいか微妙なので
ほぼあらすじ用のベタと文字で見えなくなった裏表紙をぺたり

幻想的な湖と月


その他ボツ

月が近すぎるとのこと。

都会的な場所なので山はいらないとかでラフの段階で止まり

そんな感じで普段描かない背景に挑戦したので苦楽ありでよかったです。

友人の手伝いが終わった後は気分転換に落書きしてました。

久々の人物画。モノクロで描いて思ったけど塗りも丁寧に塗らないとムラができて汚いですね。

今回はrsyncコマンドを用いて、サーバーのデータ移行をするときに移動したいファイルを間違えてしまったのでメモをする。

rsyncコマンドは、ソース元のデータをソース先に同期をしてくれるコマンド。

ソース元のデータがソース先にある場合はスキップし、 ソース先にない場合、ソース先に対象のデータを追加してくれるから非常に使い勝手のいいコマンド。

ただし、仕様上パスを間違えてしまうと、関係のないソース先に余計なファイルがたくさん同期されることがあるから注意すること。

今回自分は、ソース元のディレクトリ以下のファイルをソース先のディレクトリ以下に同期をする予定だったものの、ソース先のディレクトリ以下にソース元のディレクトリごと同期させてしまった。

例えば、ディレクトリhogeとディレクトリhoge2があったとき

rsync -av /root/hoge /root/hoge2/

このようにすると、/root/hoge2/hoge といった結果となる。

もし、ディレクトリ以下の中身を同期させたい場合は

rsync -av /root/hoge/ /root/hoge2/

とソース元を  /root/hoge から  /root/hoge/  とスラッシュを追加しなければならない。

ちなみに mv コマンドの場合は、

mv /root/hoge/* /root/hoge2/  

とアスタリスクをつけないといけないから注意する。

サーバー立てるたびに鍵認証設定するの面倒だからね。
ssh-keygen時にパスワードを聞かれず、最後に秘密鍵を
表示してくれるスクリプトです。

makekey.sh

yum -y install openssh-server
ssh-keygen -N "" -f ~/.ssh/id_rsa
mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
sed -i 's/^PubkeyAuthentication.*$/PubkeyAuthentication yes/' /etc/ssh/sshd_config
sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
systemctl restart sshd
cat ~/.ssh/id_rsa

これまでシェルでいくつかスクリプトを作ってきたけど、オプション要素がどれもなかった。
オプションをつけることは敷居が高そうだと思ったので手をつけなかったけど、
実際に検索したら思ったよりも簡単そうなのでためしてみた。

opt_test
#/bin/bash
while getopts sdt OPT
do
case $OPT in
s) ss -t ;;
d) df -h ;;
t) top ;;
esac
done

重要なのは、【getopts】コマンドで、その横、オプションとなる一文字を記入
今回の場合、s,d,tの計3つのオプションをつけたかったので、「sdt」と記載。
OPTの部分は変数を記載する。
結果的に opt_test -s とすれば ss -t  のコマンド、 opt_test -d とすれば、df -h が可能となりましたとさ。 

参考
https://atmarkit.itmedia.co.jp/ait/articles/2002/13/news025.html