2019-12-08に投稿

MinQ開発日記 (4) 本番環境の構築

本番環境構築

CentOS 7

CentOS7が標準で選べます.

Screenshot 2019-12-05 at 18.47.08.png

SSHの設定

パケット・フィルタリングという機能がVPSに備わっておりこれを無効にする必要があったりします.

【初心者向け】さくらVPSのSSH初期設定で22番以外のポートに繋がらない
SSHポート番号を変更したら繋がらなくなった(さくらVPS CentOS7)
さくらの VPS に CentOS7 を入れて SSH と Firewalld の設定につまづいた話 – TURNIP 2
さくらのVPSにおけるポート開放の落とし穴

手順

  1. パッケージのアップデート
  2. 一般ユーザーの設定 & sudoer
  3. ウェルノウン・ポートからの変更
  4. ルート・ログインの不許可
  5. sshd & firewalldの起動
  6. パケット・フィルタリングの無効化
  7. その他

1. パッケージのアップデート

sshでサーバーに接続します.

ssh -p 22 [email protected]

IPアドレス(@マーク以下のxxx.xxx.xxx.xxxのところ)はさくらVPSのコンソールからコピーできます. 以下の画像のIPv4テーブルのアドレス項目に記載されているCSV(Character Seperated Value)です.

名称未設定 - さくらのVPSコントロールパネル 2019-12-07 13-17-02.png

[email protected]と指定したので, ルート・ログインです. ログインしたらとりあえずyumでパッケージを更新しておきます.

yum -y update

2. 一般ユーザーの設定

ルート・ユーザーで管理をやるのは問題があるので, 必要な時だけルート権限で実行できるようにします. ユーザー名を決めて以下を入力します. 今回はcentkunとして進めます.

adduser centkun && passwd centkun

とするとプロンプトが表示されるのでパスワードを確認用も含めて2回入力します.

次はsudoerを設定します. suでルート権限が必要な時にルート・ユーザーになるのも良いのですが, sudoの方が個人的に慣れているのでそうします.

usermod -aG wheel centkun

一般ユーザーに切り替えるにはsuコマンドを利用します.

su centkun

SSHの設定のためにsshd_configへのアクセスが必要ですがcentkunではできないことを確認しましょう.

cat /etc/ssh/sshd_config

Permission deniedと出ればオッケーです. このように一般ユーザーにはルートにしか編集や閲覧ができないなどのアクセス制限が課せられています. suやsudoを使うと一時的にその権限を取得できます. 一先ずサーバーから抜けてcentkunで接続し直します.

exit
ssh -p 22 [email protected]

ここでcentkunをsudoerとして登録します. これはCentOSではwheelというグループに登録することです.

wheel グループに対する sudo 設定の有効化

一旦suコマンドでルート・ユーザーにになってwheelグループにcentkunを追加します.

su
usermod -aG wheel $USER
exit

これで適当なコマンドでsudoerとしてアクセス権を取得できているか見てみましょう.

sudo ls

centkunのパスワードを実行してカレント・ディレクトリの内容が表示されたらオッケーです. 以後はsudoで権限の切り替えを行います.

3. ウェルノウン・ポートからの変更

ポートとは同一ホスト上(コンピュータのこと)で動いている複数のサービス(常駐のプログラムのこと)を区別するための番号です. httpdやsshdなどによって指定するポートが違っています. ポートには三種類あります.

ポート番号名 範囲 説明
Well-know Ports 1~1023 IANAが管理している. 特定のサービス以外には使えない
Registered Ports 1024~49151 IANAが管理している. 自由に使える
Dynamic Ports 49152~65535 IANAが管理していない. 自由に使える

通常はSSHのウェルノウン・ポートである22が指定されています. これまであえてpオプションで明示的に指定しました. またこの設定はさくらVPSのダッシュボードからパケット・フィルタリングで有効/無効に設定できます.

SSHのサービスを提供するsshdの設定なのでsshd_configからポート番号を変更します.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
sudo vim /etc/ssh/sshd_config

Port項目をアンコメントして番号を22から1024以降の番号に変更しましょう. 次はfirewalldの設定を行います.

sudo vim /user/lib/firewalld/services/ssh.xml

のportの部分を利用するポート番号へ変更しておきましょう. これで指定ポートがファイアウォールを通り抜けられます.

4. ルート・ログインの不許可

次はルートでSSHを通じてログイン出来ないようにします.

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.orig
sudo vim /etc/ssh/sshd_config

PermitRootLoginをアンコメントしnoに変更します.

5. sshdの再起動 & firewalldの起動

sshdの設定(sshd_config)を読み込ませるためにsshdを再起動します.

sudo systemctl restart sshd

そしてfirewalldは起動していないので, 起動します.

systemctl start firewalld

後は接続時のセキュリティの設定(CentOS 7)を参考に設定してみましょう.

firewall-cmd --info-service ssh

を確認してportsで指定した番号が表示されていればOKです.

sudo firewall-cmd --zone=public --list-all

応用:SSH 接続用ポート番号の変更
ネコでもわかる!さくらのVPS講座 ~第七回「ファイアウォール”firewalld”について理解しよう」

6. パケット・フィルタリングの無効化

さくらVPSにはパケット・フィルタリングという機能があってこれはすでにピットフォール(はまりポイント)として知られているようです.

基本的な設定としてWebやSSHなどのサービスへのWellknow-portは変更しておく必要があるらしい. しかしパケット・フィルタリングが有効になっているとファイアウォールやSELinuxの設定をするとリモート接続できなくなる.

無効にするのが重要らしいがこのパケット・フィルタリングの何が嬉しいのかよく分からないです. とりあえず無効にします.

Screenshot 2019-12-06 at 21.07.56.png

注意書通りにファイアウォールとセキュリティ設定を行いましょう.

後は接続時のセキュリティの設定(CentOS 7)を参考に設定行います.

7. その他

SELinuxの設定 && パスワード認証の禁止など

ゼロからはじめるLinuxサーバー構築・運用ガイド 動かしながら学ぶWebサーバーの作り方では必要なように書いていました.

CentOS 7 で sshd のポート番号を変更する方法によると

  • SELinuxは指定してないポートからプロセスの起動を禁止する
  • Firewallは許可されていないポートへそもそもアクセス出来ない

という違いがあるようです. 気になる人は設定してみると良いのかもしれません. 現状以下のようにリモートログインしている.

ssh -p 22 [email protected]

これはパスワード認証方式と呼ぶが, パスワード漏洩・推測などのリスクがある. 暗号を使った公開鍵方式を使うと安全性が高まるらしい.

公開鍵認証を使ったログイン設定と確認

ファイウォールの状態

サービスとしてファイアウォールが有効かどうかを確認する.

$ firewall-cmd --state

runningと出れば起動しています. あるいは

$ systemctl status firewalld.service

こちらは情報量が多いですがactive (running)となっていれば起動していることがわかります.

ファイアウォールの現在の設定を確認する.

firewall-cmd --list-all

ファイアウォールの管理

サービスとしてのファイアウォールを管理するにはsystemctlコマンドを使います.

systemctl start firewalld
systemctl stop firewalld
systemctl restart firewalld

さくらVPSはデフォルトではfirewalldが起動していなかったのでstartしておく必要があります.

ネコでもわかる!さくらのVPS講座 ~第七回「ファイアウォール”firewalld”について理解しよう」
CentOS 7 firewalld よく使うコマンド
CentOS 7でSSHのポート番号を変更する(SELinux・firewalld)

以上これで良い, といことはないんでしょうがLinuxの勉強不足でよく分かりません.

アプリケーションの環境

goのインストール

以下の画像ようにリンクを辿ります.

Documentation - The Go Programming Language 2019-12-07 20-04-57.png

Getting Started - The Go Programming Language 2019-12-07 20-08-44.png

Downloads - The Go Programming Language 2019-12-07 20-09-28.png

最後の画像のリンク先をコピーします. ダウンロードしたバイナリを/usr/local以下に配置します.

sudo wget https://dl.google.com/go/go1.13.5.linux-amd64.tar.gz
sudo tar -xvf go1.13.5.linux-amd64.tar.gz
mv go /usr/local

.bashrc以下にgoのパスを設定します. goのパスはやや独善的(opinionated)に決定されていますが, プロジェクトの保存場所に迷ったり生成した実行可能バイナリに一々パスを通さなくていいので便利です. ただし実際に配置されるのはwebアプリのバイナリだけなので, こんな複雑なフォルダ構成は必要ない気もしますが・・・.

export PATH=$PATH:/usr/local/go/bin # 1
export GOPATH=$HOME/go/package:$HOME/go/workspace # 2
export PATH=$HOME/go/package/bin:$HOME/go/workspace/bin:$PATH # 3
  1. goコマンドへのパスです. これでコマンドラインからgoが使えます.
  2. GOPATHはgoのプロジェクトを管理するフォルダを指定します. プロジェクトには二つあって, 外部パッケージと自作パッケージです. go getで取得した外部パッケージはGOPATHの最初に指定したフォルダにインストールされます. 自作パッケージはworkspace以下に作成します.
  3. コンパイルしたプロジェクトはbin以下に出力されますので, このパスを追加しておくとコマンドラインから直ぐ呼び出せます.

MariaDBのインストール

yumでインストールできます.

sudo yum -y install mariadb-server.x86_64

MariaDBはサービスとして実行されるのでsystemctlを使って起動します.

Install MariaDB on CentOS 7

まとめ

サーバーはめんどくさいということでしたが, 基本的なことしかしてないためかそれほど迷うことはなかったです.

とりあえずGoとMariaDBはやったので, 次回はデプロイをやりたいです. 公開までもう少しです.

Reference

接続時のセキュリティの設定(CentOS 7)
An Introduction to SELinux on CentOS 7 – Part 1: Basic Concepts
How to Set Up a Firewall with FirewallD on CentOS 7
1.6. ENHANCING SYSTEM SECURITY WITH A FIREWALL, SELINUX AND SSH LOGINGS

ツイッターでシェア
みんなに共有、忘れないようにメモ

ブレイン

Androidアプリ開発者を目指しています. 興味あることリスト: https://t.co/ew3bb6grdJ Github: https://t.co/9btqysHqWr Qiita: https://t.co/ZVRhjouauX

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント