Hexoブログを公開する
前回作成したローカル環境のHexoブログを外部に公開する。
前回↓
ConoHa VPSを契約し、セキュリティを強化し、publicファイルを転送し、外部からアクセスする。
1. Conoha VPSを契約
ConoHa VPSから「お申し込み」する。
会員ページからサーバー追加。
「リージョン」は「東京」、
「メモリ」は「1GB」。
ここでイメージタイプのタブを「OS」から「アプリケーション」へ、
「アプリケーション」は、やりたい内容に合わせたソフトが適切なバージョンの組み合わせでインストールされているので楽かつ安全。
今回は「LEMP(PHP)」
「rootパスワード」と「ネームタグ」を適当に作成。
オプションの「SSH Key」で「キーを新規作成」。
適当な名前で「自動作成」、「追加」すると鍵が作られる。
「ダウンロード」を押すと。「〇〇.pem」という名前のプライベートキー(秘密鍵)が手に入る。
名前が長いので「key.pem」とする。
さっき作ったパブリックキー(公開鍵)が自動で選択される。
「スタートアップスクリプト」の「テンプレート」を選び、「Fail2banインストール」を選択。
これにより、同一IPからの連続ログイン失敗を検知するとそのIPからのアクセスを禁止してくれる。つまり総当たり攻撃を防ぐことができる。
こんなかんじになった。
「追加」するとサーバーを作ってくれる。
サーバーリストから今作ったサーバ-を選択すると「コントロールパネル」が開く。
括弧の中が今作ったサーバーのIPアドレス、これだと118.27.14.98
。
また、下のパネルからサーバーが操作できる。右端の「サーバー削除」が一番よく使うやつ、訳が分からなくなったら全部消すことができる。
2. セキュリティを強化
sshを使ってさっき作ったサーバに入る。
その後セキュリティ設定。
最近のWindowsは最初からsshが使えてえらい。
2.1. サーバに入る
ipアドレスが118.27.14.98
なので、
ターミナルから
1 | ssh root@118.27.14.98 |
と打ってみる。
入れない。
1 | root@118.27.14.98: Permission denied (publickey,gssapi-keyex,gssapi-with-mic). |
と言われる。
オプションでSSH Keyを選択したので秘密鍵がなければ入れないようになっている。
cd
コマンドでさっきダウンロードした秘密鍵(key.pem)のとこにいくか秘密鍵の方を持ってくるかして、
1 | ssh root@118.27.14.98 -i key.pem |
と秘密鍵を指定すると入れる。-i
はidentity fileを指定しますという意味。
うまくいくと
1 | ================================================ |
と言われる。
Enjoy!
2.2. 別のユーザを作る
セキュリティ上、rootユーザがsshログインできると良くない。今はrootユーザ以外存在しないため、
- 新たなユーザを作り、
- 新たなユーザが鍵認証ログインできるようにし、
- rootユーザのログインを禁止し、以降は新たなユーザでログインする。
2.2.1. 新たなユーザを作る
1 | adduser username # usernameという名前のユーザを新規作成 |
パスワードをpasswordにしたらBAD PASSWORDと言われた。
2.2.2. 新たなユーザが鍵認証ログインできるようにする
1 | cd /home/username |
別のターミナルから
1 | ssh username@118.27.14.98 -i key.pem |
と打って入れたらOK
2.2.3. root ログイン禁止
sshd_configはsshの設定ファイル。これをvi
というエディタで編集する。
1 | vi /etc/ssh/sshd_config |
と打つとvi
が起動してファイルの中身が表示される。vi
で使うコマンドは今後の人生で4つだけ。i
(文字が編集できるモードになる),Esc
(右2つのコマンドが打てるモードになる),:wq
(保存して終了),:q!
(保存せず終了) 。
sshd_configの中で変えるのは一か所だけ
1 | PermitRootLogin yes |
を
1 | PermitRootLogin no |
にします。
service sshd restart
と打つとsshd_configの内容変更が反映される。
別のターミナルから
1 | ssh root@118.27.14.98 -i key.pem |
と打って入れなければOK。
2.3. SSHポート番号変更
SSHのポート番号はデフォルトでは22、みんな知ってるので適当な番号に変える。
同様に
1 | vi /etc/ssh/sshd_config |
で設定ファイルを開き、
1 | #Port 22 |
をとりあえず
1 | Port 50000 |
にする(49152~65535の中から選択)。service sshd restart
と打って変更を反映。
続いて
1 | vi /usr/lib/firewalld/services/ssh.xml |
と打ってファイアウォールの設定ファイルを編集。
1 | <port protocol="tcp" port="22"/> |
を
1 | <port protocol="tcp" port="50000"/> |
にします(さっきと同じ番号)。
firewall-cmd --reload
と打ってファイアウォールの設定変更を反映。
別のターミナルから
1 | ssh username@118.27.14.98 -i key.pem |
と打つとポート番号が違うためConnection timed out
となる。
1 | ssh username@118.27.14.98 -i key.pem -p 50000 |
と打って入れたらOK。-p
はポート番号を指定しますという意味。
3. publicフォルダを転送し、外部からアクセスする
前回作ったpublicフォルダをサーバに送る。
3.1. scpでpublicフォルダを転送
scp
というコマンドを使うとssh
を使いながらファイルを転送できる。
ローカルPC側でpublicフォルダのとこにいくかpublicフォルダの方を持ってくるかして、
1 | scp -P 50000 -r -i key.pem public username@118.27.14.98:/usr/local/openresty/nginx/ |
とすると失敗する。
1 | scp: /usr/local/openresty/nginx//public: Permission denied |
権限がないらしい。
今public
を置こうとしている/usr/local/openresty/nginx/
がroot
のものなので、scp
を実行しているusername
には権限がない。root
でscp
を使えば良かったがroot
でのログインはさっき禁止した。順番間違えた。
なのでサーバー側で/usr/local/openresty/nginx/
の所有権をusername
に移す。
1 | chown username /usr/local/openresty/nginx/ |
もう一度scp
1 | scp -P 50000 -r -i key.pem public username@118.27.14.98:/usr/local/openresty/nginx/ |
-P
はポート番号を指定しますという意味。-p
ではない。-r
はフォルダごと送りますという意味。これがないとファイルしか送れない。
3.2. ブログをサーバ上で公開
1 | vi /usr/local/openresty//nginx/conf/nginx.conf |
と打ってnginxの設定ファイルを編集。
1 | location / { |
を
1 | location / { |
にする。
/usr/local/openresty/nginx/sbin/nginx -s reload
と打ってnginxの設定変更を反映。
ブラウザから118.27.14.98
を確認。
見れた。
スマホからも見れた。
参考
Opensouce & Setup
CentOS 8 で ssh ポートを変更
https://mxnl.com/centos-ssh-port/
IT専科
UNIX/Linuxコマンド ABC順
http://www.itsenka.com/contents/development/unix-linux/index-abc.html