- ファイヤーウォールの設定。ポートをとにかく閉じまくる。
- 作業ユーザ追加。作業ユーザのパスワード設定。
- 作業ユーザに ssh用公開鍵設置
- su でrootになれるユーザを作業ユーザのみ制限
- sudo が使えるユーザ制限を作業ユーザのみに制限
- root のパスワードを消す(オプション)
- ソフトは基本 yum とか apt-get で標準のリポジトリから入れれるなら,そっちをつかう。ソースのダウンロードはできるだけしない。標準リポジトリに無い場合は,別のリポジトリ(できるだけメジャーなの)から入れれないか探し,リポジトリをついかする。自分でコンパイルすると大変なだけではなく,セキュリティの修正でバージョンアップした場合再度ダウンロードとコンパイルをしないといけないし,自分でいつ更新されたか調べる必要がある。また,自動設定の不具合がないとも限らないし,gccとかの組み合わせが悪いと変なセキュティホールが出てしまうかもしれない。
- chkrootkit を入れる
- logwatchを入れる
- ssh サーバインストール
- sshでrootログイン不可に変更
sshサーバはわざとデフォルトでrootログインは有効なので無効にする。 - ssh サーバのポート22から別のものに変更
これをしないとSSHサーバへのクラッキングが多すぎて/var/log/secureログが大変になる。 - denyhosts インストール
sshサーバとかへの不正アクセスをしてくるやつのIPアドレスを /etc/hosts.deny に追加して自動拒否設定するソフト。 - パスワード認証無効化
パスワードクラックを不可能にしておく。 - AllowUsers でsshでログインできるユーザを限定
- sshサーバを自動起動設定
chkconfig sshd on とか - sshをファイヤーウォールの許可設定
- アクセス可能なIPアドレス制限をかける。アクセス元IPアドレスが変わらないないか,範囲がはっきりわかっているなら,かける。
- sshでrootログイン不可に変更
- Webサーバ Apacheを入れる
- ServerTokens Prod
ServerSignature Off
サーバの 情報をほぼ出さなくする。 - Options の Indexes を消して index.html が無い時ディレクトリ内のファイルを一覧出さないようにする。
- 403 エラーを 404 エラーに偽装する。
- KeepAlive On
をして1回の接続で複数ファイル取得できるようにする。セキュリティ設定ではない。ウェブサーバのパフォーマンスの設定。
- ServerTokens Prod
- PHPを入れる。PHP5.3系以上とPHP5.2系とPHP5.1系以下で設定・動作が結構違うのでインストール時PHPのバージョンに注意。使いたいアプリが対応しているかどうか確認。後で入れなおすのは大変なので要注意。
- php.ini の設定
- expose_php=off
でPHPの情報を出さないようにする - [PHP]
default_charset=”UTF-8″
[mbstring]
mbstring.internal_encoding=”UTF-8″
でデフォルトの文字コードはUTF-8 - [PHP]
memory_limit でPHPのメモリ使用量を調整。 - [PHP]
upload_max_filesize でPHPでアップロードできるファイルサイズ上限の設定。同時に post_max_size でPOSTできる上限のサイズも設定。 - 他,まだあったはず。
- 終わったら apacheの再起動
- expose_php=off
- php.ini の設定
- MySQLサーバを入れる
- my.cnf 設定
[mysqld]
default-character-set = utf8
デフォルトの文字コードを UTF-8にしておく。 - bind-address = 127.0.0.1
接続できるアドレスを ローカルからのみにしておく。
- my.cnf 設定
- phpからmysqlの接続ライブラリを入れる。
- phpのgd とかpearとかもろもろを入れる。必要な拡張機能をどかどか入れる。
- phpMyAdmin を入れる。yumでも入れれるようになったよ。
- http://ほにゃらら/phpmyadmin/ から別の URLに変更。phpMyAdmin標準ディレクトリへのクラッキングが非常に多い。以前のバージョンにセキュリティホールがあったためだ。
とにかく全然推測できない URLにすること。 conf.d/phpMyAdmin.conf に Alias でディレクトリが書いてある場合がある。 - config.inc.php の
$cfg[‘blowfish_secret’] = ”; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
をなんかランダムで適当文字を代入するようにする。まぁCOOKIE認証をしなければ設定しなくでもよいが。
例
$cfg[‘blowfish_secret’] = ‘ここにランダムな文字’; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
- http://ほにゃらら/phpmyadmin/ から別の URLに変更。phpMyAdmin標準ディレクトリへのクラッキングが非常に多い。以前のバージョンにセキュリティホールがあったためだ。
- ファイヤーウォールを調整。
iptables の設定はシンプルにすること。完璧に意味を理解して使うこと。よくわからないとか,複雑にしすぎて設定ミスがあってセキュリティホールになってしまうかもしれないし,設定ミスでリモートからつなぐことができなくなるかもしれない。
これ以外にもいろいろ設定している。長いので省略。