現在「さくらVPS」 で「512MB」 で「685円/月 」 のプランを利用しています。
今まで「Linux(CentOS)」の動作検証や、RubyやPythonでプログラムを作っていましたが、「Python」+「Django」でWebアプリケーションを作ります。
その理由は、メモリが「512MB」の最安値プランはスペックが低いのでWebアプリケーションに向かないのではと思ったのですが、ディスクがSSDということもあり意外とパフォーマンスがいいということが分かったからです。
さくらVPSの一番安いプラン「512MB」でWebアプリを作成する
さくらVPSの一番安いプラン「512MB」でWebアプリを作成します。
Webアプリは「Python」で開発し「Django」上で表示します。
以下のように設計しました。
セキュリティ設計(開放ポート)
一番重要なセキュリティ設計です。
■解放するポート
HTTP(TCP/80) : all
HTTPS(TCP/443): all
SSH(TCP/22) : all ※鍵認証にする
FTPのポート「TCP/20(データ)」 、「TCP/21(制御)」 は開放しません。
データはFTPプロトコルではなく、SSHプロトコルで送信します。
ドメイン設計
ドメインは既に取得している「box-cm.com」 を利用します。
SSL証明書設計
HTTPSプロトコルでWebアプリケーションにアクセスできるように、「さくらVPS」にSSL証明書を導入します。
SSL証明書は、無料で利用できる「Let’s Encrypt」 を利用します。
レンタルサーバーのサービスを利用せずに、自分で Let’s Encrypt を導入する手順
構築手順
設計は完了したので実際に「さくらVPS」で構築をします。
※設計はざっくりとでいいので事前にテキストファイルなどに書いておくことをお勧めします。
パッケージを最新のアップデート
初めにCentOS7のパッケージを最新にアップデートします。
コマンドは「yum update」 を実行します。
定期的に「yum update」 で最新にアップデートをすることで脆弱性対応をしましょう。
[root@SAKURA_VPS ~]# yum update
アップデートが完了したら「reboot」 コマンドでOSを再起動します。
[root@SAKURA_VPS ~]# reboot
firewalldの設定手順
詳しい「CentOS7」 での「firewalld」 設定手順は以下の記事を参考してください。
【さくらVPS】【CentOS7】Firewalld を設定する
■現在のファイアウォール(firewalld)の設定を確認する
初めに現在の設定を確認します。
現在、firewalld.serviceが起動しているかどうか、自動起動になっているか確認します。
[root@SAKURA_VPS log]# systemctl status firewalld.service
● firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 土 2017-09-23 11:52:35 JST; 1 months 4 days ago
Docs: man:firewalld(1)
Main PID: 18253 (firewalld)
CGroup: /system.slice/firewalld.service
mq18253 /usr/bin/python -Es /usr/sbin/firewalld –nofork –nopid
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
[root@SAKURA_VPS log]# systemctl list-unit-files | grep firewalld.service
firewalld.service enabled ← 自動起動も「ON」になっています。
[root@SAKURA_VPS log]#
もし「firewalld.service」 が「停止」 していたら、「自動起動」 の設定になっていなかったら以下の手順で設定します。
[root@SAKURA_VPS html]# systemctl start firewalld.service ← firewalld.serviceを起動します。
[root@SAKURA_VPS html]# systemctl enable firewalld.service ← firewalld.serviceを自動起動する設定にします。
「firewall-cmd –list-all」 コマンドで現在のファイアウォールの設定を確認します。
[root@SAKURA_VPS html]# firewall-cmd –list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh http ← これが現在許可されているサービスです。
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@SAKURA_VPS html]#
現在「ssh」と「http」だけなので「https」 を追加します。
■httpsのポートを設定する(httpsを解放する)
以下のコマンドでhttpsのサービス(ポート)を解放します。
[root@SAKURA_VPS html]# firewall-cmd –permanent –zone=public –add-service=https
success
[root@SAKURA_VPS html]#
–permanent ← permanentオプションで恒久対応します。(OSを再起動しても設定は消えません)
–zone=public ← firewalld.serviceにはゾーン(zone)があります。ゾーンを各NICに割り当てます。
ちなみに環境的には
NICは1つのみ
デフォルトのゾーンは「public」
なので、明示的に「public」に割り当てています。
デフォルトのゾーンの確認コマンド
[root@SAKURA_VPS html]# firewall-cmd –get-default-zone
public
■firewalld の再起動
firewalld.serviceへの設定を反映させるために、一度「firewalld.service」を再起動します。
[root@SAKURA_VPS html]# systemctl restart firewalld ← firewalld.serviceを再起動します。
[root@SAKURA_VPS html]# systemctl status firewalld -l ← firewalld.serviceのステータスを確認します。「-l」オプションを付けることでログを全文表示させます。
● firewalld.service – firewalld – dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 土 2017-10-28 13:07:41 JST; 1min 42s ago
Docs: man:firewalld(1)
Main PID: 17604 (firewalld)
CGroup: /system.slice/firewalld.service
mq17604 /usr/bin/python -Es /usr/sbin/firewalld –nofork –nopid
10月 28 13:07:40 tkx-2xx-3xxxx.vs.sakura.ne.jp systemd[1]: Starting firewalld – dynamic firewall daemon…
10月 28 13:07:41 tkx-2xx-3xxxx.vs.sakura.ne.jp systemd[1]: Started firewalld – dynamic firewall daemon.
10月 28 13:07:42 tkx-2xx-3xxxx.vs.sakura.ne.jp firewalld[17604]: WARNING: ICMP type ‘beyond-scope’ is not supported by the kernel for ipv6.
10月 28 13:07:42 tkx-2xx-3xxxx.vs.sakura.ne.jp firewalld[17604]: WARNING: beyond-scope: INVALID_ICMPTYPE: No supported ICMP type., ignoring for run-time.
10月 28 13:07:42 tkx-2xx-3xxxx.vs.sakura.ne.jp firewalld[17604]: WARNING: ICMP type ‘failed-policy’ is not supported by the kernel for ipv6.
10月 28 13:07:42 tkx-2xx-3xxxx.vs.sakura.ne.jp firewalld[17604]: WARNING: failed-policy: INVALID_ICMPTYPE: No supported ICMP type., ignoring for run-time.
10月 28 13:07:42 tkx-2xx-3xxxx.vs.sakura.ne.jp firewalld[17604]: WARNING: ICMP type ‘reject-route’ is not supported by the kernel for ipv6.
10月 28 13:07:42 tkx-2xx-3xxxx.vs.sakura.ne.jp firewalld[17604]: WARNING: reject-route: INVALID_ICMPTYPE: No supported ICMP type., ignoring for run-time.
[root@SAKURA_VPS html]#
■firewalld.service のログに「WARNING」が出力されている
このサーバーはインターネットに晒されている状態なので「systemctl status xxx -l」でログを全文表示させて確認しました。
その結果「WARNING」が出力されていることが分かります。
現在の環境を確認します。
[root@SAKURA_VPS ~]# uname -a
Linux tkx-2xx-3xxxx.vs.sakura.ne.jp 3.10.0-693.5.2.el7.x86_64 #1 SMP Fri Oct 20 20:32:50 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
[root@SAKURA_VPS ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
「firewalld」と「iptables」のバージョンを確認します。
[root@SAKURA_VPS ~]# rpm -qa | grep firewall
python-firewall-0.4.4.4-6.el7.noarch
firewalld-0.4.4.4-6.el7.noarch
fail2ban-firewalld-0.9.7-1.el7.noarch
firewalld-filesystem-0.4.4.4-6.el7.noarch
[root@SAKURA_VPS ~]# rpm -qa | grep iptables
iptables-1.4.21-18.2.el7_4.x86_64
iptablesコマンドを実行します。
[root@SAKURA_VPS ~]# iptables -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all — 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all — 0.0.0.0/0 0.0.0.0/0
INPUT_direct all — 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES_SOURCE all — 0.0.0.0/0 0.0.0.0/0
INPUT_ZONES all — 0.0.0.0/0 0.0.0.0/0
DROP all — 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
REJECT all — 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
target prot opt source destination
ACCEPT all — 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
ACCEPT all — 0.0.0.0/0 0.0.0.0/0
FORWARD_direct all — 0.0.0.0/0 0.0.0.0/0
FORWARD_IN_ZONES_SOURCE all — 0.0.0.0/0 0.0.0.0/0
FORWARD_IN_ZONES all — 0.0.0.0/0 0.0.0.0/0
FORWARD_OUT_ZONES_SOURCE all — 0.0.0.0/0 0.0.0.0/0
FORWARD_OUT_ZONES all — 0.0.0.0/0 0.0.0.0/0
DROP all — 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
REJECT all — 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
OUTPUT_direct all — 0.0.0.0/0 0.0.0.0/0
Chain FORWARD_IN_ZONES (1 references)
target prot opt source destination
FWDI_public all — 0.0.0.0/0 0.0.0.0/0 [goto]
FWDI_public all — 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_IN_ZONES_SOURCE (1 references)
target prot opt source destination
Chain FORWARD_OUT_ZONES (1 references)
target prot opt source destination
FWDO_public all — 0.0.0.0/0 0.0.0.0/0 [goto]
FWDO_public all — 0.0.0.0/0 0.0.0.0/0 [goto]
Chain FORWARD_OUT_ZONES_SOURCE (1 references)
target prot opt source destination
Chain FORWARD_direct (1 references)
target prot opt source destination
Chain FWDI_public (2 references)
target prot opt source destination
FWDI_public_log all — 0.0.0.0/0 0.0.0.0/0
FWDI_public_deny all — 0.0.0.0/0 0.0.0.0/0
FWDI_public_allow all — 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp — 0.0.0.0/0 0.0.0.0/0
Chain FWDI_public_allow (1 references)
target prot opt source destination
Chain FWDI_public_deny (1 references)
target prot opt source destination
Chain FWDI_public_log (1 references)
target prot opt source destination
Chain FWDO_public (2 references)
target prot opt source destination
FWDO_public_log all — 0.0.0.0/0 0.0.0.0/0
FWDO_public_deny all — 0.0.0.0/0 0.0.0.0/0
FWDO_public_allow all — 0.0.0.0/0 0.0.0.0/0
Chain FWDO_public_allow (1 references)
target prot opt source destination
Chain FWDO_public_deny (1 references)
target prot opt source destination
Chain FWDO_public_log (1 references)
target prot opt source destination
Chain INPUT_ZONES (1 references)
target prot opt source destination
IN_public all — 0.0.0.0/0 0.0.0.0/0 [goto]
IN_public all — 0.0.0.0/0 0.0.0.0/0 [goto]
Chain INPUT_ZONES_SOURCE (1 references)
target prot opt source destination
Chain INPUT_direct (1 references)
target prot opt source destination
REJECT tcp — 0.0.0.0/0 0.0.0.0/0 multiport dports 22 match-set fail2ban-sshd src reject-with icmp-port-unreachable
Chain IN_public (2 references)
target prot opt source destination
IN_public_log all — 0.0.0.0/0 0.0.0.0/0
IN_public_deny all — 0.0.0.0/0 0.0.0.0/0
IN_public_allow all — 0.0.0.0/0 0.0.0.0/0
ACCEPT icmp — 0.0.0.0/0 0.0.0.0/0
Chain IN_public_allow (1 references)
target prot opt source destination
ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:22 ctstate NEW
ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 ctstate NEW
ACCEPT tcp — 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 ctstate NEW
Chain IN_public_deny (1 references)
target prot opt source destination
Chain IN_public_log (1 references)
target prot opt source destination
Chain OUTPUT_direct (1 references)
target prot opt source destination
[root@SAKURA_VPS ~]#
特に問題はなさそうです。
調べてみましたが、現在のところ原因不明なので先に進めます。
■解放ポートの確認
httpsが開放されていることを確認します。
[root@SAKURA_VPS ~]# firewall-cmd –list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh http https ← httpsも開放されています。
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
[root@SAKURA_VPS ~]#
DNSの設定(グローバルIPアドレスとドメイン名の紐付)
ドメイン名(FQDN):box-cm.com
グローバルIPアドレス:160.16.217.115
「160.16.217.115」と「box-cm.com」を結び付けます。
「さくらのVPS」に「お名前.com」で取得した独自ドメインを割り当てる手順
今回はさくらVPS提供のネームサーバー(DNSサーバー)を利用せずに「お名前.com」のネームサーバー(DNSサーバー)で名前解決をする方法を選択します。
お名前.comの「ドメインNavi」にログインする
お名前.comの「ドメインNavi」にログインします。
https://www.onamae.com/navi/domain.html
以下のログイン画面が表示されるので
を入力して「ログイン」 ボタンをクリックしてログインします。
「ドメインNavi」にログインしたら「ドメイン設定」タブをクリックします。
以下の「このサイトを離れてもよろしいですか?」 の確認画面が表示されたら「このページを離れる」 ボタンをクリックします。
左側ペインより「ネームサーバーの設定」 –「DNS関連機能の設定」 をクリックします。
下図のように対象のドメインにチェックを入れて「次へ進む」 ボタンをクリックします。
下図のように「DNSレコード設定を利用する」 の「設定する」 ボタンをクリックします。
下図のように紐付したい「ドメイン」 と「IPアドレス」 を設定します。
IPアドレスを設定したら下の方にスクロールをして「確認画面へ進む」 ボタンをクリックします。
DNSレコードの設定を確認して「設定する」 ボタンをクリックします。
下図のように「DNSレコード設定」 が「完了」 になっていることを確認します。
※設定が反映されるのに大体数時間かかります。
ドメイン設定確認
以下のコマンドでドメイン設定が反映されていることを確認します。
[test@SAKURA_VPS ~]$ nslookup box-cm.com
Server: 210.188.224.10
Address: 210.188.224.10#53
Non-authoritative answer:
Name: box-cm.com
Address: 160.16.217.115 ← 名前解決ができています。
[test@SAKURA_VPS ~]$
※もしうまくいかない場合は、いろいろと設定をいじらずに、数時間待ってみましょう。
まとめ
Part.1は以上で一旦完了です。
Part.2では「Let’s Encrypt」を「さくらVPS」に設定して「https://box-cm.com」にアクセスできるように設定をします。
コメント