コンテンツへスキップ

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

最近スクリプトを作成することが増えてきたけども、毎回フルパスで指定するの面倒くさい。
なので、スクリプト名を打つだけで実行できるようにしたかった。

今回は下記ファイルを用意した
/root/cmd/test 
echo "test"

方法1 .bash_profile 内のexportにパスを記載する。



vim .bash_profile
export PATH=$HOME/cmd:$PATH
# test
test

方法2 /usr/local/bin 以下にシンボリックリンクを追加する。

# ln -s ~/cmd/test /usr/local/bin/tes
# tes
test

上記の方法は環境変数$PATH内にパスがあれば、
CUI内でコマンドを探して実行してくれるというルールの上で成り立っているらしい。
ちなみに 
/bin/はシングルモード用(OSが壊れてときとか)
/usr/bin/はシングルモードではないかつ、RPM等のパッケージに入っているコマンド等が収納
/usr/local/binは自作スクリプトなどを置くディレクトリ
なので今回は上記の記載をした。

最近LXCばかり触っていたのでホストからゲストOSを設定できるスクリプトをかいてみた。
ネットワークとSSH公開鍵認証の設定。sshは内容軽くいじれば他でも使いまわせそう。
OSはcentos7.9を想定

#network config
rm /var/lib/lxc/$1/rootfs/etc/sysconfig/network-scripts/ifcfg-eth0
lxc-attach -n $1 -- bash -c 'echo "DEVICE=eth0" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "BOOTPROTO=none" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "ONBOOT=yes" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "TYPE=Ethernet" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "IPADDR='$1'" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "NETMASK='$2'" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "GATEWAY='$3'" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "DNS1=8.8.8.8" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 -- bash -c 'echo "DNS1=8.8.4.4" >> /etc/sysconfig/network-scripts/ifcfg-eth0'
lxc-attach -n $1 systemctl restart network
#ssh config
lxc-attach -n $1 -- yum -y install openssh-server
lxc-attach -n $1 -- ssh-keygen -N "" -f ~/.ssh/id_rsa
lxc-attach -n $1 mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
lxc-attach -n $1 chmod 600  ~/.ssh/authorized_keys
lxc-attach -n $1 -- sed -i 's/^PubkeyAuthentication.*$/PubkeyAuthentication yes/' /etc/ssh/sshd_config
lxc-attach -n $1 -- sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config
lxc-attach -n $1 systemctl restart sshd
lxc-attach -n $1 cat ~/.ssh/id_rsa

個人的に下記行の引数を展開できないことに苦労した。
lxc-attach -n $1 -- bash -c 'echo "IPADDR='$1'" >> /etc/sysconfig/network-scripts/ifcfg-eth0'

シングルクォーテーションって強制的にすべて文字列にするものだと思ってるから
echo以降は全て文字列しかできない。
でもぐぐったら、むしろ$1の場所をシングルクォーテーションでさらに囲ったら変数扱いとなった。
なぜ


参考
sed-iについて
https://www.usupi.org/sysad/197.html

lxc-attachについて
https://gihyo.jp/admin/serial/01/linux_containers/0008?page=4

もうそろこのブログも開始してから1年が経とうとしている。
基本的にはITの忘備録ばかりが8割以上なのでその分の経験値を得られているはず。。
長く続いているのは記事のクオリティに気を使わないこと。気負うと投稿が億劫になるので

アクセスで人気があるものは、メールやzabbix等のエラーログを題名にしたものがヒットした。
例えばこの記事とか。みんな同じようなエラーで困ってるんだなあと思った。
https://roroing.net/?p=262

■その他
ipad pro 12.9インチを購入しました。
procriateのアプリでペンシルは2世代を使って絵をかいてます。
適当な姿勢で動画を見たり絵を描けるのは最高だ。。。

これはipadで描いたFF7のクラウド。


手軽に直線モードにできたり消しゴム切り替えたりすることができてよかったな。
あとテクスチャがたくさんそろってるのもいい。腕とか肩パッドなどにつけてます。

今後もipadで絵を描いていきたいところ。

タイトルの通り、データ移行を実施したけども詰まってしまったので記録する。
なお、WordPress内のデータを移行している


作業順序は次の通り。
1.pleskでドメイン>>「ドメインを追加」で新しいドメインを作成する。
2.作成したドメインからデータベースを作成する。
※ここでドメイン名やユーザー名を移転元の通りにするとエラーが発生したから名前を変更した。
あとでWordPressのコンフィグデータも変えておくこと。

3.移転元の「データベース」から「ダンプをエクスポート」を選択してバックアップを取得。
→「作成後にダンプを自動的にダウンロード」にチェックをつけると作業が楽になる
4.移転元の「ファイルマネージャー」からバックアップしたいファイルを項目の右側の設定からダウンロードする。

5.「ファイルマネージャー」でドキュメントルート以下にサブディレクトリ用の新規ディレクトリを作成する
6.新規ディレクトリ以下にファイルをアップロードする。 
7. 移転元の「データベース」から「ダンプをインポート」を選択してリストアする。
8.hosts,ファイルを変更するなどをして移転先のURLにアクセスしてサイトの調子を確認する。
9.画像が非表示されたりするはずなので、画像のパスを変更する。

今回は9で詰まった。
まずパスを変更する場所が見つからなかった。
一番早いのはssh接続から検索するのが手っ取りばやい。
私の場合は下記コマンドで検索をした。

ファイル内の文字列を検索してくれる

find . -type f -print | xargs grep 検索したいファイル名

今回上記を利用してヒットした箇所はWordPressのtheme以下のファイル内であった。

ちなみにssh接続できない場合、plesk内の「ファイルマネージャー」からファイルが編集できる
今回、これで終わりかと思ったけどサイト内でまだ表示がされないファイルがあったためにさらに詰まった。

サイト内で「ページのソースを表示」して、表示されない画像を検索すると確かにパスが変更されていなかった。
しかし、その画像の表示をさせるためのソースが実際にssh接続から探してもどこにもなかった。

結果的には、plesk内の「phpMyAdmin」からデータベース内を探して見つけた。
自分の場合は、**_posts テーブル内の値が「post_content」のところで画像を検索するとヒットした。

10.データベース内のファイルのパスを「検索と置換」で変更する
下の画像のように設定する。

実行ボタンを押してもその後、どの箇所が変更されるか確認できるページに遷移できる。

11. 改めてサイトを確認して問題がなければデータ移行完了。

VPSのubuntu20.04にてメールサーバーを立てた後に、thunderbirdのメール設定でPOPサーバーの認証方式で「暗号化されたパスワード認証」に設定すると接続ができなかった。原因を調べてみたら、cram-md5でSMTP認証が廃止されたとの記事がちらほら。とはいえ、VPSなので自分で、cram-md5を設定した上でメールの設定を試してみたらところ、下記エラーログを吐いた。
auth: Fatal: CRAM-MD5 mechanism can't be supported with given passdbs
少なくともubuntu20.04ではCRAM-MD5のサポートをしていないようだ。
結局「通常のパスワード認証」でもポートがTLSの数値なら問題ないとのことなので、このままメールを使おうと思う。
参考
https://goope.jp/info/maintenance/?id=619