Ubuntu Server 16.04構築時のオススメ環境設定


はじめに

自分用にメモしていましたが、改めて「構築時のオススメ環境設定をまとめておこう」という記事です。
オススメと言いつつ、最低限必要な設定のような気もします。。

前提条件

本記事は下記環境を前提とします。
(前提以外の環境でも出来る内容だとは思いますが。。)

  • Ubuntu Server 16.04
  • DMZなど外部に晒される環境のサーバである
  • ソフトウェアの選択で最小限構成である「Standard System Utilities」のみを選択している
  • 日本語インストーラでインストールしてしまった

最後のはデフォルト設定でインストールしていれば防げたような気もしますが、
インストールし直しが面倒だったので、対策を打ちました。

オススメ設定一覧

オススメ設定リストを示します。
自宅サーバをセキュアに運用したいのであれば、必要な設定だと思います。

  • tty日本語文字化け対応(*1)
  • ssh有効化
  • sshポート番号変更
  • ssh鍵認証設定
  • ファイアウォール(ufw)の設定
  • ウィルススキャンソフトのインストール(*2)

(*1)は前提条件にも記載した通り、日本語インストーラでインストールしてしまったからかもしれません。
後で言語パックを設定した方は不要かもしれませんので、参考まで。

(*2)はお好みで。デスクトップPCであれば必要かもしれませんが、サーバではそれほど重要ではないかもしれません。

設定手順

準備

sudo apt-get updateにて、aptを最新状態にしておきます。

・・・それだけです。

tty日本語文字化け対応(*1)

サーバ側コンソールで、日本語メッセージが文字化けします。
具体的には下記のような表示が・・・
◆ ◆ ◆ ◆ ◆ ◆ ◆ ・・・・

そこで.bashrcに次のcase文を記述します

case $TERM in
    linux) LANG=c;;
    *) LANG=ja_JP.UTF-8;;
esac

こうすると、サーバ側コンソールでログインした時はLANG=Cとなり英語表示になるため、文字化けしなくなります。
リモート接続側は日本語表示のままですので、ご安心を。

ssh有効化&sshポート番号変更

サーバなので、通常はリモートから接続して作業するでしょう。
なので、ssh接続ができるようにしておきます。

$ sudo apt-get install openssh-server
$ sudo service ssh status

ただ、このままだとデフォルトポート:22を使用することになります。
これでは攻撃を受け放題なので、ポート番号を変更しておきましょう。

$ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
$ sudo vi /etc/ssh/sshd_config

ポート番号は未使用のポートに変更します。(任意のポート番号)
PermitRootLoginはrootユーザでのログインを許可するかどうか。です。
こちらも許可しない=noにしておきましょう。

  • Port 22 -> Port xxxxx
  • PermitRootLogin yes -> PermitRootLogin no

設定が完了したら、サービスを再起動して反映して完了です。

$ sudo service ssh restart

ssh鍵認証設定

sshはパスワード認証ではなく、鍵認証にしてさらにセキュアにしておくと良いと思います。
まずは鍵ファイルの生成からです。
ここでは鍵ファイルは/home/user_name/.sshに配置するものとします。
パスフレーズは設定しておくと尚セキュアですが、ここでは簡略化します。

サーバ側
$ ssh-keygen -t rsa
※パスフレーズは空のままEnter
$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

次はサーバに接続するクライアント側の設定です。
クライアント側にサーバの秘密鍵を転送しておきます。
sshのポート番号は先ほど変更しているので、「-P」オプションで指定して実行してください。

クライアント側
$ scp -P xxxxx [email protected]:/home/user_name/.ssh/id_rsa ~/.ssh/id_rsa.hostname

これで、クライアント側からパスワード入力なしにssh接続できれば完了です。
接続確認後はパスワードでのログインを制限しておきましょう。

サーバ側
$ sudo vi /etc/ssh/sshd_config

PasswordAuthentication yes -> PasswordAuthentication no

$ sudo service ssh restart

ファイアウォール(ufw)の設定

サーバへのアクセス制御はもちろんファイアウォールです。
ubuntuではufwという簡単に設定できるコマンドがありますので、これを利用します。
インストールされていない場合はsudo apt-get install -y ufwでインストールしましょう。

基本はポート番号の制御です。
ここでは、念のため22番ポートにアクセスが出来ないようにし、sshで使用するポート番号へのアクセスを許可します。
これは内部ネットワークからのアクセスに制限しておきましょう。
大抵はWebサーバとして構築していると思いますので、80番、443番ポートはあけておきましょう。

/bin/bash
$ sudo service ufw status
● ufw.service - Uncomplicated firewall
   Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
   Active: active (exited) since yyyyMMdd HHmmss; Xmin ago
$ sudo ufw status verbose
状態: 非アクティブ
※ufw自体は動作している(active)が、無効化(disable)された状態であることを確認する。
$ sudo ufw deny 22
$ sudo ufw limit from 192.168.xxx.xxx/24 to any port xxxxx
$ sudo ufw allow 80
$ sudo ufw allow 443

$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
ファイアウォールはアクティブかつシステムの起動時に有効化されます。
※これでファイアウォールが有効化されました。

$ sudo ufw status verbose
状態: アクティブ
ロギング: on (low)
Default: deny (incoming), allow (outgoing), deny (routed)
新しいプロファイル: skip

To                         Action      From
--                         ------      ----
22                         DENY IN     Anywhere                  
xxxxx                      LIMIT IN    192.168.xxx.xxx/24                  
80                         ALLOW IN    Anywhere                  
443                        ALLOW IN    Anywhere

※このような表示になればOKです。

実際に稼働されているかは/var/log/ufw.logにて確認できるので、確認してみてください。

ウィルススキャンソフトのインストール(*2)

自分はSophosのAntivirus for Linuxを選択しましたが、無償版のメジャーどころだとClamAVでしょうか。
Sophosにしたい!という方は、下記記事をどうぞ。
Ubuntu Server 16.04にSophos Antivirus for Linuxをインストールする

終わりに

サーバを公開してから/var/log/syslogを覗くと、早速たくさんの方の訪問(攻撃目的)を確認できると思います。
なるべくセキュアに運用するのが得策だと思いますので、参考にしてみてください。

尚、手順は自環境のみの確認ですので、記載内容に誤りがあればコメントください。
よろしくお願いいたします。