サーバーで絶対に行わなければいけない最低セキュリティ設定


ちゃんとセキュリティログ見てますか?(cat /var/log/secure)
↑おそらくsshのポートを変更していない場合、不正ログインを試みようとした形跡がズラ~って表示されます。
24時間常にサーバーは危険に晒されています。

だるがってはだめです!
サーバーは契約してすぐは穏やかでもそのうち 必ず! 必ずです! 100%です!
中国などからOS自体に不正ログインアタックが行われます。

100%です!
私の管理する50のサーバーではすべて不正ログインを試みた形跡があります。

パスワード認証で、特にセキュリティ対策をしていない場合OSにログインされてしまうのも時間の問題です。

しかも、仮に不正ログインされてもcronを勝手に設定されたりなどなので気づかないことも多いかと思います。

あとは、鍵認証に勝手に追加されているというのもよく聞きます。

データ破壊なんて、攻撃者にメリットないですものね。
目的はそんなものではありません。
そもそも気づかれたら対策されて終わりじゃないですか
攻撃者はあなたのサーバーをあなたに気づかれないように悪いことに利用しようとしているのです。

手順というよりは項目だけ。

【リモートからのルート権限でいきなりログインするのを防止する】

sshからルート権限で動作させたい場合は、一旦一般ユーザーでログイン後「su」コマンドでルートになるようにします。
これで、ルート権限を使用できるようにするには2重ログインが必要になり安全になります。

vim /etc/ssh/sshd_config
PermitRootLogin no

【パスワード認証を無効にする】

※この設定だけを行うとサーバーにsshからログインできなくなります。
RSA(鍵認証)の設定をしてからこの設定をして下さい。
パスワード認証は危険過ぎるので鍵認証だけでsshログインできるようにします。

vim /etc/ssh/sshd_config
PasswordAuthentication no

【sshのポート変更】

※この設定だけを行うとサーバーにsshからログインできなくなる可能性があります。
firewalldなどでの設定が必要なのと、ログインするクライアント側でもコマンドにポートを指定しないといけなくなります。
サーバーの入口を変えて入り口を見つけるとことから初めさせましょう。
普通は22番ポートがサーバーの入り口です。
これを使われていない適当な番号に変更することで入口が分かりません。
ですが、すべての番号に総当りでチェックされたらばれてしまいます。

vim /etc/ssh/sshd_config
「Port 22」 を 「Port xxxxx」 へ書き換える

【denyhostsの導入】

これは不正ログインしようとしているホストIPを自動でアクセス拒否してくれます。
仕組みとして、sshが吐き出すセキュリティログ(ログインに失敗したや存在しないユーザーでログインしようとした等)を監視して、自動的にアクセス拒否のリストに追加してくれるサービスプログラムです。
これを導入するだけでパスワード認証でさえもほぼほぼ防げます。

(yum install epel-release)
yum install denyhosts
vim /etc/denyhosts.conf
「ADMIN_EMAIL」 の行の自分のメールアドレスを追加する(カンマ区切りで複数可)
あとはディフォルトのままでもいい
service denyhosts start(初回は多少時間かかる)
chkconfig denyhosts on
chkconfig --list denyhosts(2〜5がオンになっているかチェック)

【firewalldの導入】

CentOS7から標準搭載されており、標準でオンになっています。
CentOS6までは開きまくっているポート(全て開いてるかも)を自分で使わないポートを塞ぐという設定が必要でしたが、
このfirewalld(すなわちCentOS7以降)ではディフォルトでポートは閉じまくっています。(sshだけ許可されているはずです)
要するに、起動していればディフォルトのままでも一応おkです。

【その他】

他には、脆弱性の多いsshバージョン1を無効化することや、

vim /etc/ssh/sshd_config
「Protocol 2」

webサーバーやphp(できるかな?)などをルート権限で起動させない。
(ユーザーとグループを一般ユーザーに変更する)

できれば毎日、最低週一でアップデート(yum update)を実行する(Heartbleedのようにとんでもないバグ、脆弱性はありまくり)
cronで実行してもいいかと思います
(yum update)を問答無用で実行して、サーバーがおかしくなったことは一度もないので。

phpMyAdmin自体を入れない
Adminじゃないけど
例えば、もし、Webの画像アップロードフォームからphpファイルをアップロードされてみてください。
それで、思い通りにそのphpを実行されてしまいますね。
phpは仕方ない場面だらけかも知れないが、極力使わない。
使うならちゃんと、画像ディレクトリではphpにアクセスしてもphpに処理を流さないようにする。

データベースは全ユーザーをローカルからのみログイン可能にする。
(普通はそれで問題ない場合だらけなはず)
sshでログイン後に
などなど