学校のサーバーで公開サーバーを立てるときに気をつけること
さて、いつもどおりの遅刻の私です。
この記事は「横浜医療情報専門学校アドベントカレンダー2017 12/8」の予定だった記事です。
今学校サーバーは私が管理してるんですが、引き継ぎとか、今後誰かかが開発する時に気をつけてほしいところを纏めておこうと思います。
ただ初学者の若輩ものなので不備等はあるかもしれません。見つけましたらお教えください…
サーバー初期設定
サーバーを初期設定する際にすることを纏めておきます。
rootアカウント
Linux上でrootアカウントは「システム管理の最高権限」を示します。ユーザー情報や、ログ、/etc以下の設定ファイルも自由に変更することができます。
そのため、常にrootで操作をすることは危険を伴います。また、不正にアクセスされた際の被害も大きくなります。
なので作業アカウントを作成して、そちらで普段は操作しましょう。
ユーザー作成
adduserコマンドでユーザーを追加してパスワードを設定しますます。
$ adduser [user name] $ passwd [user name]
ユーザーにsudo権限があるwheelグループに追加します。
$ gpasswd -a [user name] wheel
出来たらアカウントを変更しておきましょう。
$ su [user name]
SSH
入ってる前提で進めます
公開鍵を生成して、パスワードログインを無効にする
パスワード認証は破られる可能性もあるので公開鍵認証にしましょう。 まずは鍵を生成しましょう
$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/matsushitashousatoru/.ssh/id_rsa): ./bolgTest <- ファイル名を指定 Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ./bolgTest. Your public key has been saved in ./bolgTest.pub. The key fingerprint is: SHA256:FBbmyWaxLg9KZOtD8jSwX5wE5cD7WzWRmDMEwb5g9XU godan@matsushitashousatorunoMacBook-Pro.local The key's randomart image is: +---[RSA 2048]----+ | .oo++B+ . | | .+o===+ E | | . o+o.O+ o | | =++.*. o | | o.*o*.S. . | | O +o+. | | * o. | | .. | | | +----[SHA256]-----+
鍵をauthorized_keysにリネームして権限を書き換えておきましょう。
$ mv bolgTest.pub authorized_keys $ chmod 600 authorized_keys
秘密鍵はcatなどして中身をローカルに保存しておきましょう
認証を公開鍵にする
sshの設定を変更しましょうファイルは/etc/ssh/sshd_config
です。
ファイル内に以下のコメントアウトがあると思いますので、#を消して有効化しましょう。内容でしたら追加してください。
RSAAuthentication yes PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no
可能ならrootログインも禁止にしておきましょう
ポート周り
sshなどのデフォルトポートは変更しておきましょう。 古典的な手法ですが有効です。
またftpなど暗号化されないものは使用せず閉じておきましょう。 ポートスキャンをして変なところか空いてないか確認すると良いです。
ログ周り
Apacheのアクセスログや、システムログは一定期間保存できるようにしておきましょう。また余分にファイルを溜め込まないためにも余裕がある時に設定を見直すといいです。
モニタリング
Mackerelの学校アカウントがあるのでそちらで死活監視など行いましょう。
Apache設定
デフォルトコンテンツ
Apacheなどには最初からページが入ってるときがありますが、OS情報やバージョン情報などが乗っているため特有の脆弱性を突かれてしまうかのせいもあります。消しておきましょう。
PHPだとPHP Infoやヘッダー情報を消しておきましょう
# /etc/php.ini # headerに情報をださない expose_php = Off
ディレクトリリスニング
ディレクトリリスニングはサーバーのディレクトリをブラウザ上で見えるようにする機能です。ただし、サーバーの中身を不用意に晒すのは個人情報の流出などの問題が有りますのでしっかり無効にしておきましょう。
方法としてhttpd.confか.htaccessで制御出来ます。
#/etc/httpd/conf/httpd.conf #修正前 Options Indexes FollowSymLinks 修正後 Options FollowSymLinks
https対応
最近は暗号化されたHTTPSのほうがデフォルトになっています。またiosアプリなどもhttpsを義務化し始めています。またLineBotなどもHTTPS通信必須ですので対応しましょう。
Let's Encryptをつかえば費用かからず導入出来ます。
さいごに
またどっかで XSSとかSQLインジェクションについて書いておきます…
医療情報を扱う以上セキュリティは切っても切り離せない問題ですが、本校だと実際にサーバー運用する機が少なくココらへんの実際の設定をすることも無いと思います。ただせっかくYMIC PGに所属しているならサーバーでこのようなことを遊ぶ片手間に学んでも良いんじゃないかなぁと思います。ぜひサーバー使い倒してください。
ほんとセキュリティ大事。
もし不備やこうしたらいいよなど情報が有りましたら教えていただけると幸いです。
参考情報
ConohaにVPSを設置して、SSHログイン、ポート番号変更、rootログイン禁止までを30分で!
攻撃を受ける前に! Apache インストール後に必要な8つの変更点