2015/01/30

Linuxサーバを作る ④

アカウントセキュリティ

動けばいいじゃんと軽視されがちですが、私は大事だと考えています。

パスワードポリシー

ユーザーパスワードは8文字以上、大小文字・数字・記号も必須にしましょう。
またログインの際に一定回数パスワード認証に失敗したらロックするようにもします。
 # vim /etc/login.defs
 #PASS_MIN_LEN   5
 PASS_MIN_LEN    8
 # vim /etc/pam.d/system-auth-ac
 auth        required      pam_env.so
 auth        required      pam_tally2.so pam_tally2.so onerr=fail deny=10 unlock_time=120
 auth        sufficient    pam_unix.so nullok try_first_pass
 auth        requisite     pam_succeed_if.so uid >= 500 quiet
 auth        required      pam_deny.so

 account     required      pam_unix.so
 account     required      pam_tally2.so
 account     sufficient    pam_localuser.so
 account     sufficient    pam_succeed_if.so uid < 500 quiet
 account     required      pam_permit.so

 #password    requisite     pam_cracklib.so try_first_pass retry=3 type=
 password    requisite     pam_cracklib.so try_first_pass retry=10 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1
 #password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
 password    sufficient   pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=1
 password    required      pam_deny.so
 # vim /etc/pam.d/password-auth-ac
 auth        required      pam_env.so
 auth        required      pam_tally2.so pam_tally2.so onerr=fail deny=10 unlock_time=120
 auth        sufficient    pam_unix.so nullok try_first_pass
 auth        requisite     pam_succeed_if.so uid >= 500 quiet
 auth        required      pam_deny.so

 account     required      pam_unix.so
 account     required      pam_tally2.so
 account     sufficient    pam_localuser.so
 account     sufficient    pam_succeed_if.so uid < 500 quiet
 account     required      pam_permit.so

 #password    requisite     pam_cracklib.so try_first_pass retry=3 type=
 password    requisite     pam_cracklib.so try_first_pass retry=10 minlen=8 dcredit=-1 ucredit=-1 lcredit=-1
 #password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
 password    sufficient   pam_unix.so sha512 shadow nullok try_first_pass use_authtok remember=1
 password    required      pam_deny.so
設定に失敗すると上手くログインできなくなってしまうので注意して設定・確認しましょう。
※参考
説明
retry=N N回まで失敗が許されます。
type=XXX プロンプトに使われる文字列。
difok=N 現在のパスワードと N文字以上異なれば許可。
minlen=N パスワードが N文字以上だと許可。
dcredit=-N 数字が N文字以上含まれていれば許可。
ucredit=-N 大文字が N文字以上含まれていれば許可。
lcredit=-N 小文字が N文字以上含まれていれば許可。
ocredit=-N その他の文字が N文字以上含まれていれば許可。

権限昇格制限

複数人、複数拠点で運用するサーバであればきちんと設計・制限しておきましょう。

sudo権限

下記記事を参考にして頂ければと。
sudo関連のあれこれ

su権限

suコマンドを利用できるユーザーをwheelグループ所属ユーザーのみとする。
下記ファイルのコメントアウトを解除します。
 # vim /etc/pam.d/su
 auth            required        pam_wheel.so use_uid
 # vim /etc/login.defs
 SU_WHEEL_ONLY yes

不要サービスの停止

サーバ目的で利用するのであれば余計なリソースやポートが空かないよう。
不要なサービスを停止しておきましょう。
 # chkconfig --list

カーネルパラメータの調整

最低限の設定を。

Smurf攻撃対策

 # vim /etc/sysctl.conf
 net.ipv4.icmp_echo_ignore_broadcasts = 1
kernelパニック発生時にOSを再起動するようにする。
 # vim /etc/sysctl.conf
 kernel.panic = 10
設定を反映
 # sysctl -p
この時、追記した項目以外で下記のようなエラーが出力されます。
error: "net.bridge.bridge-nf-call-ip6tables" is an unknown key
error: "net.bridge.bridge-nf-call-iptables" is an unknown key
error: "net.bridge.bridge-nf-call-arptables" is an unknown key
こちらはネットワークブリッジを利用する目的以外でブリッジモジュールがインストールされていた場合、デフォルトで有効化されてしまうことを防ぐためにあえて記載してあるらしいです。
なのでそのままでもよいのですが、エラーが出ているという事はブリッジモジュールをインストールしていないという事なので、
エラーが気になる方はコメントアウトしてもいいかもしれません。

ACL

Linux標準のACLと言えばiptablesがあります。
AWSなんかではインスタンス単位でACLを設定できるためあまりメリットはないですが
GW/FWで制御するような環境であれば設定しておりて損はないと思いますので設定しましょう。
私は設定スクリプトを作成し、デーモン利用ではなく利用します。
サーバ再起動時なんかには自動でスクリプトを実行するようにしておくとよりいいですね。

セキュリティアップデート

サーバとして利用を開始する前には一度フルアップデートを実施したほうがよいでしょう。
構築作業中やインストールに利用したテンプレート・メディアによっては脆弱性に対するパッチが当たっていない場合があります。
 # yum update
※kernelのアップデートについては利用基盤やハード環境を考慮して行ってください。
 場合によってはサポートを受けられなくなる可能性があります。
サービスインしてしまうとなかなかアップデートを気軽に行えなくなってしまうのが面倒ですね。

sysstatの設定

今や標準でインストールされているsysstat。
そのままでも問題ありませんが、運用に合わせて設定を変更します。
初期設定だと28日分のシステムログを保持するようになっています。
もっと保持しておきたい場合。
 # vim /etc/sysconfig/sysstat
 HISTORY=365
 # vim /usr/lib64/sa/sa1
 HISTORY=365
 # vim /usr/lib64/sa/sa2
 HISTORY=365
またデフォルトでは10分おきにシステムログを取得します。それを5分毎に変更します。
 # vim /etc/cron.d/sysstat
 # Run system activity accounting tool every 10 minutes
 #*/10 * * * * root /usr/lib64/sa/sa1 1 1
 */5 * * * * root /usr/lib64/sa/sa1 1 1
 # 0 * * * * root /usr/lib64/sa/sa1 600 6 &
 # Generate a daily summary of process accounting at 23:53
 #53 23 * * * root /usr/lib64/sa/sa2 -A
 58 23 * * * root /usr/lib64/sa/sa2 -A 

時刻同期設定

同期サーバの設定

インターネット上でシステム時刻を同期・調整するようにします。
最近のOSではPTP時刻同期に対応してきていますが、こちらはNTPで設定します。
今回は外部のNTPサーバを参照しするクライアントとして設定します。
どのサーバを参照するか。ある程度信頼性が求められるので怪しげなサーバは参照しないようにしましょう。
私はよく下記サービスを参照します。
インターネットマルチフィード 公開NTPサービス
 # vim /etc/ntp.conf
 server ntp1.jst.mfeed.ad.jp iburst
 server ntp2.jst.mfeed.ad.jp iburst
 server ntp3.jst.mfeed.ad.jp iburst
iburstを指定することで、初期時刻同期の収束時間が短くなるそうです。

ipv6の無効化

 # vim /etc/ntp.conf
 #restrict -6 ::1

脆弱性・DDOS対策

NTPのDDOS対策
 # vim /etc/ntp.conf
 disable monitor

slewモード設定

時刻同期方法をでデフォルトでslewモードにする
 # vim /etc/sysconfig/ntpd
 OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g -x"

NTP起動

ntpdを起動し同期を開始しましょう。
 # chkconfig ntpd on
 # service ntpd start

ntpdateの設定

サーバ再起動時にはハードウェア時刻を参照し、起動します。
運用にてシステム時刻とハード時刻の同期を行っていれば大きな誤差なく起動しますが、
ハード時刻がずれていた場合に時刻誤差が大きく起動してこないよう
OS起動時にntpdateを実行するように設定しておきます。
 # vim /etc/ntp/step-tickers
 # List of servers used for initial synchronization.
 ntp1.jst.mfeed.ad.jp
 ntp2.jst.mfeed.ad.jp
 ntp3.jst.mfeed.ad.jp

起動設定

 # chkconfig ntpdate on
長かったなー。
以上で商用?サーバを構築しよう!の初期設定が完了です。
個人利用であったり、そこまで求められないよっていう設定もあるとおもいます。
知らなかったことがあり、だれかの助けになっていれば幸いです。

他ミドルウェアのついてもボチボチ書いていきたいとおもっています。


Linuxシステム[実践]入門 Software Design plus
技術評論社 (2013-08-20)
売り上げランキング: 4,627

0 コメント:

コメントを投稿