ConoHa VPS で Ubuntu 14.04 を使い始めてみる

Linux

Linux で Swift を使ってみたくて、まずは ConoHa VPS で Ubuntu 14.04 を動かしてみることにしました。


Apple のプログラミング言語 Swift が Linux 対応になって、自分もそれを使ってみたくなったのですけど、自分がこれまで使用していた Linux は Fedora 23 で、残念ながら Swift は公式にはサポートされていない OS でした。

Fedora 23 でも動かせないかと試してみたのですけど、途中までしかビルドを進められず、もし出来たとしてもその後も何かと苦労しそうだったので、今回は Swift の動作環境として正式表明されている Ubuntu 14.04 を ConoHa VPS の仮想サーバーで動かしてみることにしました。

今回はその Ubuntu の仮想サーバーを立ち上げるまでの方法と併せて、自分はこれまで Debian 系の Linux を使ったことがなかったので、運用する上で必要になりそうなファイアーウォールとシステムアップデート周りについてを簡単にながら調べてみました。

ConoHa で Ubuntu を動かす

ConoHa のアカウントは取得済みだったので、それで ConoHa コントロールパネル にログインしたら サーバー追加 から、新たにひとつ VPS を追加します。

とりあえず、いちばん安いプランを選びつつ、イメージの選択で Ubuntu を選択します。Ubuntu のバージョンは 時点では 14.04 が選べるようになっていたので、今回はその 64 bit 版を選択することにしました。

セキュリティ周りの事前設定

そんな設定手順の中で、接続許可ポートが選択できるのが面白いところでした。

この設定はどうやら OS で設定するものとは別のファイアウォール設定みたいだったので、最終的には OS でファイアーウォールを設定して すべて許可 に設定しましたけど、こうやってセットアップの段階から手軽に設定できるのは嬉しいところに感じました。

SSH 認証キーの登録

他、あらかじめ SSH 認証用の秘密鍵と公開鍵のペアを作っておいて、そのうちの公開鍵をセットアップと合わせて登録できるようになっていました。

こちらは、登録した公開鍵が root アカウントの .ssh/authorized_keys に登録されて、秘密鍵を使って SSH 接続できるように Ubuntu がセットアップされてくれる様子でした。

root パスワードの設定

ところで、設定時に root アカウントのパスワードを設定する欄があるのですけど、何度入力してもエラーで先に進めないことがありました。

これはどうやら、パスワードの要件を満たしていても、パスワード内で半角スペースを使用していると、パスワードを入力できたことになってくれない様子でした。

セットアップ完了

このような感じで幾つか項目を選択したら 追加ボタン を押すだけで、数分ほどで Ubuntu がセットアップされて、利用できるようになりました。

セットアップが終わるともう SSH を使って接続できるようになってましたが、ConoHa コントロールパネルからコンソール接続で直接操作できるようにもなっているので、何らかの理由で Ubuntu へのネットワーク接続ができなくなっても普通に作業を行えます。

Ubuntu のバージョンを確認する

現在実行している Ubuntu バージョンの確認は、Ubuntu にログインしてから次のコマンドを実行することで行えます。

cat /etc/lsb-release

このようにすると、次のようにバージョン情報が表示されます。

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"

SSH の待ち受けポート変更

Ubuntu 14.04 の SSH 待ち受けポートの変更は、Fedora 23 等と同じように /etc/ssh/sshd_config 内の Port を変更することで行えます。

ポート番号の他にも例えば PermitRootLoginno に設定して root による SSH 接続をできなくしたりもできます。


設定を行ったら、次のようにして SSH を再起動することで、新しい設定が有効になります。

service ssh restart

システムのアップデート

Ubuntu 14.04 のシステム周りのアップデートは apt-get を使って行うようです。

とりあえず apt-get -s upgrade を実行することでアップデートできるパッケージを確認できるらしいのでやってみても候補は出なかったので、まだ OS をインストールしたばかりだからかと思ったのですけど、どうやらまず apt-get update を実行して、パッケージの一覧を更新する必要があるようでした。

そうしてから apt-get -s upgrade を実行してみると何やらパッケージリストが表示されるようになり、実際にアップデートするときは apt-get upgrade を実行することで行えるようになった様子でした。

他にも、現在インストールされているものを確認したい時には apt-cache search all を実行すれば良いようです。

ファイアーウォール設定

Ubuntu 14.04 でも、一般的な Linux のように iptables を使ったパケットフィルタリングを行えるようになっているようですが、それを簡単に設定するための ufw というツールが用意されているようなので、これを使ってファイアーウォールを設定してみます。

なお、この ufw は iptables を使ってパケットフィルタリングを実現し、原則として外側から入ってくるパケットに関する制御を行い、外側へ出て行くパケットについては制御しないスタンスを取るそうです。

ufw を有効化する

ConoHa で Ubuntu 14.04 をインストールした直後はまだ ufw が有効化されていないようなので、次のようにして有効化します。

ufw enable

このようにすると、画面に Command may disrupt existing ssh connections. Proceed with operation ? というメッセージが表示されます。つまり SSH 接続が切断される可能性があるかもしれないとのことなので、もし切れても作業を続けられるように ConoHa コントロールパネルのコンソールから作業をすると安心かもしれません。

フィルタリングルールを設定する

そして、フィルタリングのルールを設定します。

今回は、原則は外からの通信を遮断して必要なものだけを通過させる設定をしようと思うので、まずは次のようにして、基本姿勢として 禁止 となるようにルールを設定します。

ufw default DENY

そうした上で、必要な通信を許可していきます。通信の許可は ufw allow コマンドを使って行います。

ufw allow ssh/tcp
ufw allow https/tcp

たとえばこのようにコマンドを実行すると、TCP の ssh (22) ポートと TCP の https (443) ポートとへ外部からアクセスできるようになります。

ポート番号は 22 のように数字で指定することもできますし、上記のように /etc/services に記載されているサービス名で指定することもできます。

フィルタリングルールを削除する

登録したフィルタリングルールを削除するには、登録時のコマンドと同じようにして ufw delete コマンドを実行します。

ufw delete allow https/tcp

たとえばこのようにすることで TCP の https ポートへの許可設定を削除することができます。

アプリケーション名でルールを設定する

また、ufw はアプリケーション単位で設定を持つことができるようになっていて、そのアプリケーション名を使って許可設定を行うことも可能です。

ufw allow OpenSSH

指定できるアプリケーション名は /etc/ufw/applications.d に定義されていて、どんな名前のアプリケーションが定義されているかは、次のコマンドを実行することで確認できるようになっています。

ufw app list

接続元や接続先を細かく指定する

たとえば、IP アドレス 192.168.1.0/24 からに限って OpenSSH アプリへの接続を許可したいような時は、次のように設定できる様子でした。

ufw allow from 192.168.1.0/24 to any app OpenSSH

これは 192.168.1.0/24 から当サーバーの任意の宛先への接続を許可する設定で、最後の app OpenSSH のところは ufw に登録されている OpenSSH アプリへ向けた接続という意味になります。

接続先をアプリ名ではなく、ポート番号で指定したい場合は次のようになるようです。

ufw allow from 192.168.1.0/24 to any port 22

設定内容を確認する

このようにして設定したパケットフィルタリングの設定内容は、次のようにして確認できるようになっています。

ufw status verbose

こうすると、次のように設定内容が表示されます。

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW IN    Anywhere
443/tcp                    ALLOW IN    Anywhere
22/tcp (v6)                ALLOW IN    Anywhere (v6)
443/tcp (v6)               ALLOW IN    Anywhere (v6)

パケットフィルター自体は iptables で実現されているので iptables -L を実行して、フィルタリングの設定内容を確認することも可能です。

設定内容の保存場所

こうして設定した ufw の内容は /etc/ufw/lib/ufw の 2 箇所に保存される様子でした。

たとえば ufw enable を実行すると /etc/ufw/ufw.conf 内の ENABLEyes に設定されます。他にも ufw allow で行った許可設定は /lib/ufw/user.rules などに記録される様子でした。ちなみにここに記した設定は、実際の iptables では ufw-user-input チェインに登録されて運用される様子です。

設定有効化のタイミング

ufw の設定が有効になるタイミングは、基本的には ufw allow コマンドを実行するとすぐに iptables に反映される様子なので、運用開始後は特に注意して操作する必要がありそうです。

ちなみに ufw allow は設定が即座に反映されますけど、いちおう ufw reload という再読み込みのコマンドも用意されている様子でした。使い所としては、設定ファイルを手で書き換えた時などが考えられる気がしますけど、試しにやってみたところ書き加えた設定が消滅したりしたので、とりあえずは ufw allow で設定を調整するのが無難そうです。

設定完了

ufw 周りはもう少し細かい設定ができるようですし、その他の基本的なところもまだ勝手が分からないので、もう少し使って慣れていかないといけないですけど、ともあれこんな感じで、初めて触る Linux ディストリビューションでしたけど、けっこうサクサクとセットアップができた印象でした。

もしかして Ubuntu って、なかなか使い易い Linux かもしれませんね。