さくらのVPSを Ubuntu 16.04 にリニューアル
at 2017-06-04 05:56 (UTC)
さくらのVPSのOSをいったんリセットした。新しく Ubuntu 16.04 をインストールしたのでそのメモ。
Ubuntu 16.04 のインストール
- コントロールパネルの “各種設定” -> “OSインストール” -> “標準OSインストール” を選択
- インストールOSは “Ubuntu 16.04 amd64” を選択し、管理ユーザのパスワードを設定
- “設定内容を確認する” -> “インストールを実行する” をクリック
- ステータスが “稼働中” になるまで待機
作業ユーザーを作成
デフォルトの管理ユーザーは ubuntu
となるので、自分が使いやすいユーザーを登録する。
adduser myuser
とし、パスワードを設定sudo
が使用できるようにsudo gpasswd -a myuser sudo
を実行- ログアウトし、作成したユーザーでログインする
初回アップデート
% sudo apt update
% sudo apt upgrade
SSH
公開鍵をコピー
$ scp .ssh/id_rsa.pub user@host:~/
.ssh の設定
$ ssh user@host
% mkdir .ssh
% cat id_rsa.pub >> .ssh/authorized_keys
% chmod 600 .ssh/authorized_keys
% chmod 700 .ssh
% exit
秘密鍵でログインできるか確認
$ ssh host
rootログインとパスワードでの認証を禁止する
% sudo vi /etc/ssh/sshd_config
root ログイン禁止
-PermitRootLogin prohibit-password
+PermitRootLogin no
パスワード認証禁止
-PasswordAuthentication yes
+PasswordAuthentication no
ssh の再起動
% sudo service ssh restart
確認
$ ssh root@host
permission denied (publickey). # ログイン不可
使用するポートを変更する
sshd_config を変更する
% sudo vi /etc/ssh/sshd_config
-Port 22
+Port 12345
services の設定も変更する
% sudo vi /etc/services
-ssh 22/tcp # SSH Remote Login Protocol
-ssh 22/udp
+ssh 12345/tcp # SSH Remote Login Protocol
+ssh 12345/udp
iptables の設定
ポートの設定は変更したが、デフォルトでは iptables
により 22 番ポートでの接続しか許可されていないので上書きする。
# iptables-persistent をインストール
# このとき現在の設定から rules.v4, rules.v6 が作成される
% sudo apt install iptables-persistent
# 設定スクリプトを作成
% sudo vi /etc/iptables/iptables.sh
# 設定スクリプトを実行
% sudo sh /etc/iptables/iptables.sh
# 正しく設定されているかを確認
% sudo iptables -L
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT all -- anywhere anywhere
DROP all -- 10.0.0.0/8 anywhere
DROP all -- 172.16.0.0/12 anywhere
DROP all -- 192.168.0.0/16 anywhere
ACCEPT icmp -- anywhere anywhere icmp echo-request
ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:https
ACCEPT tcp -- anywhere anywhere tcp dpt:12345
LOG all -- anywhere anywhere limit: avg 1/sec burst 5 LOG level warning prefix "[IPTABLES INPUT] : "
DROP all -- anywhere anywhere
Chain FORWARD (policy DROP)
target prot opt source destination
LOG all -- anywhere anywhere limit: avg 1/sec burst 5 LOG level warning prefix "[IPTABLES FORWARD] : "
DROP all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- anywhere anywhere
# rules.v4 が更新されているかを確認
% sudo cat /etc/iptables/rules.v4
# Generated by iptables-save v1.4.21 on Sun Jun 11 15:24:04 2017
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -s 10.0.0.0/8 -j DROP
-A INPUT -s 172.16.0.0/12 -j DROP
-A INPUT -s 192.168.0.0/16 -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 12345 -j ACCEPT
-A INPUT -m limit --limit 1/sec -j LOG --log-prefix "[IPTABLES INPUT] : "
-A INPUT -j DROP
-A FORWARD -m limit --limit 1/sec -j LOG --log-prefix "[IPTABLES FORWARD] : "
-A FORWARD -j DROP
-A OUTPUT -o lo -j ACCEPT
COMMIT
# Completed on Sun Jun 11 15:24:04 2017
# 現在の設定を永続化する
# ここは ipatables-persistent ではなく netfilter-persistent となるのに注意
% sudo service netfilter-persistent start
ちなみに iptables.sh の中身
#!/bin/sh
# Initialize table
/sbin/iptables -F
# Delete declaration chain
/sbin/iptables -X
# Set default rules
/sbin/iptables -P INPUT DROP
/sbin/iptables -P OUTPUT ACCEPT
/sbin/iptables -P FORWARD DROP
# Allow access from localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT
# Destroy access from private ip addresses
/sbin/iptables -A INPUT -s 10.0.0.0/8 -j DROP
/sbin/iptables -A INPUT -s 172.16.0.0/12 -j DROP
/sbin/iptables -A INPUT -s 192.168.0.0/16 -j DROP
# Allow ping
/sbin/iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Allow reply to external that is done from internal
/sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Destroy access from dropped ip addresses
if [ -s /etc/iptables/drop_ip ]; then
for ip in `cat /etc/iptables/drop_ip`
do
/sbin/iptables -I INPUT -s $ip -j DROP
done
fi
# Allow accesses from defined services.
# HTTP
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# HTTPS
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# ssh
/sbin/iptables -A INPUT -p tcp --dport 12345 -j ACCEPT
# Destroy unmatched accesses with logging
/sbin/iptables -A INPUT -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES INPUT] : '
/sbin/iptables -A INPUT -j DROP
/sbin/iptables -A FORWARD -m limit --limit 1/s -j LOG --log-prefix '[IPTABLES FORWARD] : '
/sbin/iptables -A FORWARD -j DROP
# Save rule
/sbin/iptables-save > /etc/iptables/rules.v4
確認
$ ssh host
#=> エラーとなる
$ ssh host -p 12345
#=> ログインできる
ホスト名を変更
以前のホスト名設定のままになっていたので、修正する
```bash % sudo vi /etc/hostname
ファイル内容を新しいホスト名に変更
```bash
% sudo vi /etc/hosts
古いホスト名を新しいホスト名に変更
新しいホスト名はピリオドを含むのでプロンプトにフルホスト名を表示するように変更
% sudo vi .bashrc
-PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
+PS1='${debian_chroot:+($debian_chroot)}\u@\H:\w\$ '
とりあえず今日はここまで。