bookmark_borderNode.js環境で.envを使用

APIキーを直書きではなく環境変数で呼び出して使いたい・・・と思い、実装しました。

https://maku77.github.io/nodejs/env/dotenv.html

参考にしたのはこちらのサイト。

 

npmに「dotenv」というパッケージがあるらしく、こちらをまずはインストール。

npm install dotenv --save

.envファイルを作成し、環境変数を設定。

KEY1=XXXXXXXXXXX
KEY2=YYYYYYYY

最初は”XXXXXXXX”ってクォーテーションマークで囲っていたけど、不要みたい。

 

jsファイルでdotenvを参照させるため、こちらを追記。

require("dotenv").config();

あとはrequireを追記したjsファイル内で

process.env.KEY1

のように書いてやれば、設定したキーを参照できる。

 

ファイル構造はこんな感じ。

sample-app
├─app.js
└─.env

最後に、Git管理するなら.envファイルはコミットしないよう気をつける必要が。

なので.gitignoreファイルに

.env

と追記を。

bookmark_border自サイトの脆弱性を確認された話

どんなWebサイトにもサイバー攻撃は行われている。

・・・という話は聞いたことがありましたが、いざ自分のサイトにも行われているのを目の当たりにして改めてセキュリティの大切さを実感しました。

 

というのもSiteGuardを導入してたった3分程度したところで、知らないIPアドレスからのトラステッド・シグネチャが検出されました。

 

実際何をされたのかというと、サイトの脆弱性を確認されたらしい。。。

どうやって確認するのかというと、WebからShellコマンドを動かせるWebshellが使えるのかどうか確認しているみたい。

具体的にはURLの「?」以降にある「a=fetch&content・・・」がWebshellで実行しようとしたコマンドのよう。
調べても詳しく何を要求するコマンドなのか出てこなかったので、これは推測だけど恐らく「”HelloThinkCMF”のmd5ハッシュ値を返信してexitしてね」という内容だと思う。

ちなみに、たった2日で同じIPアドレスから4回も同じアクセスがありました。

 

いや怖すぎだろ!!

調べるとロシアのIPアドレスらしく、他にも被害に遭われている方の報告が3000件近くありました。
(こういうのもわかるなんて迷惑電話みたい)

 

今日はこの件を調べて一日が終わってしまった・・・OTL
だけどセキュリティに関して調べるのは有益な一日、とも言えるかな。。。

明日こそはコーディングしよう。

bookmark_borderSiteGuard Liteの導入

WAFを入れていなかったので、さくらVPSの利用者は無料で利用できるSiteGuard Liteを導入した。

いつもどおり、さくらのVPS講座を参考にして導入。

https://knowledge.sakura.ad.jp/12348/

WAFってなんぞや?
という方いましたら、こちらも上のサイトに説明が書いてあるので覗いてください。

 

要するに、様々なサイバー攻撃を防いでくれるファイアウォールの一種らしいです。

ファイアウォールなら既に「firewalld」を適用済みですが、WAFを入れることによって「firewalld」では防ぎきれないサイバー攻撃にも対応してくれるとのこと。

 

SiteGuard Liteの導入は手間がかかりそう・・・と思って後回しにしてしまっていましたが、上のリンク先を参考にするとサクッと導入できました。
(なぜ後回しにしたんだ、私)

 

 

基本的に手順通りに進んだんですが、一箇所だけちょっと躓いたところが。

どこかというと、

./setup.sh

を実行した後、ポート9443のSiteGuard管理画面を開けるはずが開けない!

 

さくらVPSのコントロールパネルからパケットフィルタ設定でポート9443を開放してみたけど、それでも管理画面が開けず。

他にもブラウザのキャッシュを消してみたりなどしてもうまくいかず・・・。

 

結局、2回ほど

./setup.sh

のコマンドを実行し直したところで、アクセスできるようになりました。

原因はわからないけれど、パケットフィルタ設定を変更してから反映されるまで時間がかかったとかなのかな?
・・・と予想。(予想なので確信ではない)

 

 

手順にあるXSS攻撃をブロックしているかの確認を行った後も、リンク先内にある「さくらのナレッジ」全3回を参考にしてSiteGuardの設定を行いました。

更にセキュリティを高めようとしたらまだまだすることはあるんだろうけど、とりあえずはサイトに書いてあった設定だけ。

 

 

SiteGuardを導入してからすぐに、知らないIPアドレスから攻撃されたようで検出ログに記録が・・・。

この辺はまた別記事としてまとめていきたいと思います。

bookmark_borderGitのコマンド

Gitのコマンドをいつも忘れるので、残しておく。

 

https://qiita.com/kohga/items/dccf135b0af395f69144

ここのサイトに色々なコマンドが載っていて、いつも参考にさせてもらっている。

 

特によく使うコマンドは抜粋して記載しておく。


変更をリモートにプッシュする

git add .
git commit -m "コミットメッセージ"
git push origin ブランチ名

フェッチする

git fetch

現状のブランチを、フェッチし取得した最新の情報に更新する

git merge origin/ブランチ名

フェッチ&更新

git pull origin ブランチ名

ブランチを作成する

git branch ブランチ名

ブランチの切り替え

git checkout ブランチ名

すべてのブランチを確認する

git branch -a

ログを確認する

git log

ローカルの変更を確認する

git status

bookmark_borderインターネットとWeb

Webアプリを作り始めたはいいものの、そもそもWebに関する知識がそもそもないな・・・と思って、「Web技術の基本」という本を買って学習することにした。

 

読み始めて、インターネットとWebの違いについてあまりわかっていなかったなと自覚した。ので、今日はその違いについて書く。

 

それぞれの目的は、

 インターネット → 各地のコンピュータ同士をネットワークで繋げる

 Web      → インターネット上で文書(データ)をやり取りする

ということらしい。

 

今まで混同していたけど、こんなにも違うものなんだね。

本にも、インターネットとWebはセットで使われることで爆発的に広まったことにより混同して使われがち、と書かれている。

 

これから気をつけて使い分けていこう。

bookmark_borderNode.jsのSSL化

Node.jsで立てたhttpのサーバーをhttpsで接続できるようにするため色々調べたところ、

https://kennejs.com/entry/2019/01/19/074529

このサイトを参考にすることで無事SSL化に成功した。

 

ドメインも取得していたし、SSL証明書もネコでもわかる!さくらのVPS講座 ~第六回「無料SSL証明書 Let’s Encryptを導入しよう」を参考にLet’s Encryptで取得していたので、Node.jsのアプリケーションを修正だけでできた。

 

const https = require('https');
option = {
  key: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/privkey.pem'),
  cert: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/cert.pem'),
  ca: fs.readFileSync('/etc/letsencrypt/live/(独自ドメイン)/chain.pem')
}

まずはこのコードを追記。私の場合「fs」をrequireしていなかったので、この上にさらに

const fs = require('fs');

を追記。

 

const server = http.createServer(app).listen(3000);
let io2 = io.listen(server);

としていたところを

const server = https.createServer(option, app).listen(3000);
let io2 = io.listen(server);

に変更。

 

これで無事にSSL化に成功。

bookmark_borderApache&Node.jsの共存

Apacheを動かしている状態だとNode.jsでサーバーを立ててもNode.js側には接続できず、ApacheをストップするとNode.js側に接続できるという状態が発生した。

どうやら共存させるために手順が必要なようだ。

 

http://note.onichannn.net/archives/2451

上のサイトを参考に、httpd.confのリッスンポートとバーチャルホストのポートを80番以外に避難することで、無事に共存させることができた。

サイト内ではNode.js側はhttp-proxyを導入しているが、この手順は行っていない。

元々ポート80番以外で接続するように設定していたからかな。

bookmark_borderFileZillaを使って公開鍵認証で接続

サーバーに公開鍵認証でのみログインできるように変更したので、普段使っているFileZillaでの公開鍵認証によるログイン方法を調べることに。

 

検索したら一番最初にこちらのサイトが出てきた。

https://qiita.com/JeJeNeNo/items/291ef478a6e9adbc4c6d

私はWindowsを使っているので、こちらのサイトを参考に手探りで接続してみた。

 

  1. メニューバーから「編集」→「設定」→「SFTP」
  2. 「鍵ファイルの追加」を押し、鍵ファイルを選択。パスフレーズが設定されている場合は入力を求められるので入力。
    (※)FileZillaでは.ppk形式のみしか使えないので、鍵ファイルが.ppk形式でない場合は「FileZillaがサポートしている形式に変更しますか?」で「はい」を選択し、名前を付けて保存する。
  3. 「OK」を押して設定のダイアログを閉じる。
  4. 「ホスト」、「ユーザー名」、「ポート」を入力し、「クイック認証」を選択。
  5. パスフレーズが設定されている場合は、入力欄にパスフレーズを入力する。「OK」を押すと接続完了。

 

この手順で接続は無事完了。

 

ちなみに鍵を複数登録している場合はどうなるんだろう?と思って、同じ鍵を別名で登録してみると、接続時に新しく登録した鍵が選択されていた。

自分で鍵を選択する方法はあるのかな?

それは必要になったときに調べよう。

 

無事に接続できてよかった。

bookmark_borderPythonで月名を表示

昔Qiitaに書いていた記事をそのままこっちにも記載。

転載元:https://qiita.com/Rxxx/items/382854052b14c1764b5b

 

初めてPythonを触ったので練習として
「入力した数値に該当する数値の月名(英語3字)で表記する」
というものを作成。

 

以下、作成したコード。

#月名タプル
MONTH = ( 'Jan', 'Feb', 'Mar', 'Apr',
           'May', 'Jun', 'Jul', 'Aug',
           'Sep', 'Oct', 'Nov', 'Dec' )

#入力    
print('数値に該当する月の英語名を表記します')
num = int(input('数字を入力してください:'))

#出力判定
if 1 <= num <= 12:
    print(MONTH[num-1])   #月名出力
else:
    print("その月はありません")  #エラー

 

実行するとこんな感じ。
(入力値:2)

数値に該当する月の英語名を表記します
数字を入力してください:2
Feb

 

1~12以外の数値を入力するとこう表示される。
(入力値:14)

数値に該当する月の英語名を表記します
数字を入力してください:14
その月はありません

 

入力を数字のみに制限するのは今後の課題かな。