2015年1月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 コメント:

コメントを投稿