shikoan’s memo

プログラミング初心者のチラ裏

ぷろぐらみんぐ帳

VPSを使い始めたときの初期設定(Ubuntu編)

自分用メモ。

CentOSに飽きたのでUbuntuを使ってみた。基本的には同じ。インストールオプションでUbuntu17.04も選べたが、2018年1月にEodOfLifeを迎えているので、apt installを行うときにちょっと手間取る。後発バージョンを使うか、よりサポート期間の長い16.04を使う。

www.ubuntu.com

以下、Ubuntu16.04での例。TeraTermSSH接続する。

1.ユーザーの追加

rootパスワードを変更しておく。

passwd

rootは作業に適さないので、一般ユーザーを追加する

adduser username

useraddでも追加されるが、adduserのほうがパスワードの設定など包括的にできて良い(気がする)。Full NameとかRoom Numberは全部そのまま初期設定でエンター。

追加したユーザーにsudo権限を付与。

gpasswd -a username sudo

sudoを実行するたびにパスワード入力するのは面倒くさいので、それほど気にしない環境なら以下のように変更(ちゃんとした環境ではやらないように

visudo
# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) NOPASSWD: ALL

Ctrl+O→そのままエンターで上書き保存(エディタはnanoになる)。Ctrl+Xで終了。

2.SSHの設定

SSHのポート設定とルートログインを無効にする。SSHサーバーがインストールされていなければ、「apt install openssh-server」でインストールする。

vi /etc/ssh/sshd_config

Port22は有名すぎてDoS攻撃の対象になるだけなので適当な数字に変更する。編集はiキーを押すと編集開始、ESCキーで編集終了になる。

# What ports, IPs and protocols we listen for
Port XXXX #ここを22から変更

ルートログインも無効にする。

# Authentication:
LoginGraceTime 120
PermitRootLogin no #ここをyesからnoに変更
StrictModes yes

ESCで編集モードを抜けて、「:wq」で設定を保存する。パスワードログインはよほど環境に自信があれば切ってもいいが、再起動後など何かの拍子で公開鍵ログインができなくなることがあるので、自信がなければ残しておいたほうが無難。

SSHサーバーを再起動。

systemctl restart ssh

3.アップデートをかける

apt update
apt upgrade -y

数分かかる

4.ファイアーウォールの設定

再起動後もiptablesの内容が維持されるようにiptables-persistentをインストール(ここだけUbuntuが特殊)

apt install iptables-persistent

これが出てこない場合は3のapt updateやapt upgradeを忘れているはず。以下、設定。ほぼこのサイトを継承。

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP #データを持たないパケットを破棄
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP #SYNflood攻撃と思われるものを破棄
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP #ステルススキャンと思われるものを破棄
iptables -A INPUT -i lo -j ACCEPT #localhostからの通信とpingを許可
iptables -A INPUT -p icmp -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport XXXX -j ACCEPT #SSH用のポートを許可(2で設定したポート番号を入力)
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT #HTTP(80)を許可
iptables -A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT #Webmin(10000)を許可
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #確立済みの接続を許可
iptables -P INPUT DROP #許可した通信以外のサーバーから受信するパケットを拒否
iptables -P OUTPUT ACCEPT #サーバーから送信するパケットの許可

コピペする前にXXXXを指定したSSHポートで置き換えたか注意。これをやらないと次回ログインできなくなる(多分)。変更を保存。

/etc/init.d/netfilter-persistent save

5.公開鍵認証

TeraTermで公開鍵は作成済みのものとする。一旦ログアウトし、一般ユーザーで再ログイン(この場合ポート番号は変更済みのものを入力すること)。

ログインできたら「id_rsa.pub」をドラッグアンドドロップし、「~/」作業ディレクトリに「SCP」で転送。次のコマンドを実行。

mkdir .ssh
chmod 700 .ssh
cat id_rsa.pub > .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
rm -f id_rsa.pub

ログアウトして、公開鍵認証でもログインできるか確認。

できたら終わり。お疲れ様でした。

参考資料

VPSを新規に借りた直後にすべきセキュリティ設定 | Time4VPSのまとめ

さくらのVPSでUbuntu16.04を建てた - Qiita

Ubuntuでiptablesを再起動後にも保持する方法 - Qiita

サクッとUbuntuサーバーの初期設定をする - Qiita

オプション1.Python3.6のインストール

追記:2018/5 公式サイトの方法だとget-pip.py実行時にエラーが出ることがあります。PPAを変更すると暫定的に解決できます。

qiita.com

デフォルトでインストールされているPython3.5だと一部のライブラリ(psutil)が上手く行かなかったので、Python3.6をインストールしたら上手くいった。インストール方法はこちらを参照。

www.python.jp