« | »

2014.05.30

Ubuntu 12.04 on cloud : basic config

クラウドサービス上でのUbuntuの初期設定について。
ローカルの実機にインストールする場合とは設定する箇所がかなり違う。

この記事では、DegitalOceanにUbuntu 12.04 64bitをインストールした状況で話を進めるが、Amazonなどでも同様だと思う。

前置きとなるが、日本でDegitalOceanを利用する場合は、RegionをSan Franciscoにすると良い。New Yorkは東海岸だし、Amsterdamはヨーロッパなので、物理的に遠くてアクセスが遅い。物理的にはSingaporeがもっとも近いが、回線が細いのか、経路が回り道をしているのか、これも遅い。San Franciscoは他の地域より50%ほど速い。

さて、それではDropletsにUbuntuのイメージをインストールして、初めてrootでsshログインしたところから始める。


キーボードの設定

# dpkg-reconfigure keyboard-configuration

Generic 105-key (Intl) PC → Japanese → Japanese → The default for the keyboard layout → No compose key
など

タイムゾーンの設定

海外のクラウドを使用している場合は、タイムゾーンがクラウドのリージョンに依存する。日本時間で運用したい場合には、タイムゾーンを変更する。
まず、タイムゾーンを確認

$ date

表示された日付にJSTと入っていれば日本時間だが、例えばEDTだと東部夏時間になっている。変更するには、

# dpkg-reconfigure tzdata

Asia > Tokyoを選択する。


テキストエディタや入力設定

設定ではテキストエディタを多用するので、まずは標準で起動するテキストエディタを変更する。
初期設定だとnanoが起動するが、嫌いな人は好きなものに変えるといい。

# update-alternatives --config editor

vi(vim.basic)をカスタマイズしておきたい場合は、ホームディレクトリに.vimrcを作ってオプションを設定しておく。

# cd
# vi .vimrc

色付きが嫌なら :syntax off を記述する、など。


管理者の設定

管理者ユーザとそのホームディレクトリを作って、パスワードを設定する。

# useradd -m yama
# passwd yama

※Ubuntuだと useradd -d /home/hoge でホームディレクトリが作成されないので注意。

続いて、上記のユーザにsudo権限を与える。
visudoしてみるとadminグループがsudoersに入っているが、adminグループ自体は存在しないので、adminグループを作成して管理者ユーザを参加させて、最後に動作確認する。

# groupadd admin
# usermod -G admin yama
# cat /etc/group | grep admin
# su yama
$ sudo su
# exit
$ exit

rootでのsshログインを禁止する。

# vi /etc/ssh/sshd_config

# /etc/init.d/ssh restart
# logout

作成した管理者ユーザでログインし直す。
vimをカスタマイズしたい場合は、こちらのユーザでも.vimrcを編集しておく。

また、キーボードを再設定してもコマンドラインでカーソルキーが文字化けするなど、
キー入力がおかしい場合は、ログインシェルを変更する。

# cat /etc/passwd | grep -e root -e yama

rootはbashなのに、新しく作ったユーザはshになっていたりするので確認。
この/etc/passwdを直接編集しても良いが、

# chsh yama

で、/bin/bashを指定する。

リモートログインしなおすと直る。


アクセス制御

この設定に失敗するとリモートログインも出来なくなって詰むので、スナップショットをとっておくと良い。
Ubuntuではiptablesコマンドを打ったり、iptablesの設定ファイルを編集するよりも格段簡単にファイアウォールを設定する手段がある。
ufwだ。
ufwはiptablesのフロントエンドなので、もちろんiptablesと同様に小回りの効いたアクセス制御を設定することが出来る。

ufwを有効にするには、ufw enableとする。これだけでOS起動時に自動的に有効になる。

# ufw enable

statusオプションでufwが有効になっていることを確認する。

# ufw status

また、無効にしたい場合はdisableにすれば良い。

# ufw disable

ファイアウォールは基本的にホワイトリスティングしていくと思うので、まずは全てのInboundの通信に応答しないようにする。

# ufw default DENY

これを設定をしてもリモートログインが即座に切断されたりはしない。
ただし、DENYは通信に応答しない、つまりタイムアウトする設定なので、拒否したい場合はREJECTを用いる。

続いて、通信に使用する各ポートを開けていけば良い。

# ufw allow 22
# ufw allow ssh

など。どちらの書き方でも良い。
許可を取り消す場合には、deleteする。

# ufw delete allow 22

また、ポート単位ではなく、サービス単位で制御することもできる。
指定可能なサービスはapp listで調べる。

# ufw app list

例えば、Nginxについて制御するなら、下記のように設定する。

# ufw allow "Nginx HTTP"

アクセスログが /var/log/syslog に出力されるが、allowまで残したくない場合はloggingのレベルをlowに設定すれば良い。

# ufw logging low