はじめに
自分用にメモしていましたが、改めて「構築時のオススメ環境設定をまとめておこう」という記事です。
オススメと言いつつ、最低限必要な設定のような気もします。。
前提条件
本記事は下記環境を前提とします。
(前提以外の環境でも出来る内容だとは思いますが。。)
- 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 user_name@xxx.xxx.xxx.xxx:/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番ポートはあけておきましょう。
$ 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を覗くと、早速たくさんの方の訪問(攻撃目的)を確認できると思います。
なるべくセキュアに運用するのが得策だと思いますので、参考にしてみてください。
尚、手順は自環境のみの確認ですので、記載内容に誤りがあればコメントください。
よろしくお願いいたします。