サーバ構築のベース設定メモ
早速だけどOSインストール後の初期設定をメモっておく。OSインストールは「ベース」「開発ツール」のみで構成することが多い。
ちなみに、この記事はCentOS、Scientific Linuxを前提にしてます。ちなみにいつも使っていたOSはScientific Linuxでした。調べたけど、7系でも使える所は使えるとは思う。
ただ、サービスの起動方法とか7系だとserviceコマンドとか使わないから今回は主に6系OS用かなと。
###
### sshの制限
###
datetime=`date '+%Y%m%d%H%M%S'`
cp /etc/hosts.allow /etc/hosts.allow."$datetime"
config=`cat << 'EOS'
# コメント
sshd: IPアドレス
sshd: IPアドレス
EOS`
echo "${config}" > /etc/hosts.allow
datetime=`date '+%Y%m%d%H%M%S'`
cp /etc/hosts.deny /etc/hosts.deny."$datetime"
:> /etc/hosts.deny
echo "sshd:ALL" >> /etc/hosts.deny
###
### host名
###
7系OSでは、nmcliコマンドが推奨だから直接書換えはしない方が良さそう。
あとは、IPv6もカーネルパラメータでOFFる形が推奨みたい。
datetime=`date '+%Y%m%d%H%M%S'`
cp /etc/sysconfig/network /etc/sysconfig/network."$datetime"
:> /etc/sysconfig/network
echo 'NETWORKING=yes' >> /etc/sysconfig/network
echo 'NETWORKING_IPV6=no' >> /etc/sysconfig/network
echo 'GATEWAY=IPアドレス' >> /etc/sysconfig/network
echo 'HOSTNAME=ホスト名' >> /etc/sysconfig/network
datetime=`date '+%Y%m%d%H%M%S'`
cp /etc/hosts /etc/hosts."$datetime"
:> /etc/hosts
echo "127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ホスト名" >> /etc/hosts
echo "::1 localhost localhost.localdomain localhost6 localhost6.localdomain6" >> /etc/hosts
echo "IPアドレス ホスト名" >> /etc/hosts
###
### logローテート
###
運用してみると、半月~1ヶ月くらいはlogを残したくなる。環境によっては1ヶ月はディスク容量的に厳しいだろうから大体半月かな。
datetime=`date '+%Y%m%d%H%M%S'`
cp /etc/logrotate.conf /etc/logrotate.conf."$datetime"
# 1週間毎の設定を1日毎の設定に変更
sed -i 's/weekly/daily/g' /etc/logrotate.conf
# ローテートファイル数を4個から15個に変更
sed -i 's/rotate 4/rotate 15/g' /etc/logrotate.conf
###
### rsyslog
###
# log dropの回避
vi /etc/rsyslog.conf
# 追記
# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
$SystemLogRateLimitInterval 0 ← 追記
###
### crontab
###
# variable datetime
datetime=`date '+%Y%m%d%H%M%S'`
# file copy
cp /etc/crontab /etc/crontab."$datetime"
config=`cat << 'EOS'
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
0 * * * * root run-parts /etc/cron.hourly/
0 0 * * * root run-parts /etc/cron.daily
0 0 * * 0 root run-parts /etc/cron.weekly
0 0 1 * * root run-parts /etc/cron.monthly
EOS
`
# 設定テンプレート書込
echo "$config" > /etc/crontab
###
### SE linux
###
# variable datetime
datetime=`date '+%Y%m%d%H%M%S'`
# file copy
cp /etc/selinux/config /etc/selinux/config."$datetime"
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
###
### 不要サービスの停止
###
環境によって大きく変わるからここは割愛。
Scientific Linux6系だとデフォルトが下記だったと思う。
acpid 0:off 1:off 2:on 3:on 4:on 5:on 6:off
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
blk-availability 0:off 1:on 2:on 3:on 4:on 5:on 6:off
cpuspeed 0:off 1:on 2:on 3:on 4:on 5:on 6:off
crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off
haldaemon 0:off 1:off 2:off 3:on 4:on 5:on 6:off
ip6tables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off
irqbalance 0:off 1:off 2:off 3:on 4:on 5:on 6:off
kdump 0:off 1:off 2:off 3:on 4:on 5:on 6:off
lvm2-monitor 0:off 1:on 2:on 3:on 4:on 5:on 6:off
mdmonitor 0:off 1:off 2:on 3:on 4:on 5:on 6:off
messagebus 0:off 1:off 2:on 3:on 4:on 5:on 6:off
netconsole 0:off 1:off 2:off 3:off 4:off 5:off 6:off
netfs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ntpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
ntpdate 0:off 1:off 2:off 3:off 4:off 5:off 6:off
postfix 0:off 1:off 2:on 3:on 4:on 5:on 6:off
psacct 0:off 1:off 2:off 3:off 4:off 5:off 6:off
quota_nld 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rdisc 0:off 1:off 2:off 3:off 4:off 5:off 6:off
restorecond 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rngd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
rsyslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
saslauthd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
smartd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sshd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
svnserve 0:off 1:off 2:off 3:off 4:off 5:off 6:off
sysstat 0:off 1:on 2:on 3:on 4:on 5:on 6:off
udev-post 0:off 1:on 2:on 3:on 4:on 5:on 6:off
###
### yum関連
###
datetime=`date '+%Y%m%d%H%M%S'`
cp /etc/sysconfig/yum-autoupdate /etc/sysconfig/yum-autoupdate."$datetime"
sed -i 's|ENABLED="true"|ENABLED="false"|g' /etc/sysconfig/yum-autoupdate
# yumプラグインの追加
yum -y install yum-priorities
# リポジトリの追加
「RPMforge」「EPEL」あたりは追加しておいて損はないはず。SLはDBが重いから追加したリポジトリ使うのもアリかな。特にせっかちな人はw
# RPMforge
wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm --import RPM-GPG-KEY.dag.txt
rm -f RPM-GPG-KEY.dag.txt
vi /etc/yum.repos.d/rpmforge.repo
# 以下の内容で新規作成
[rpmforge]
name=RPMforge RPM repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/dag/redhat/el6/en/$basearch/rpmforge/
gpgcheck=1
enabled=0
# EPEL
wget http://ftp.riken.jp/Linux/fedora/epel/RPM-GPG-KEY-EPEL-6
rpm --import RPM-GPG-KEY-EPEL-6
rm -f RPM-GPG-KEY-EPEL-6
vi /etc/yum.repos.d/epel.repo
# 以下の内容で新規作成
[epel]
name=EPEL RPM Repository for Red Hat Enterprise Linux
baseurl=http://ftp.riken.jp/Linux/fedora/epel/6/$basearch/
gpgcheck=1
enabled=0
# 普段はOFFなので、必要な際に下記のコマンドで使用
yum -y install --enablerepo=rpmforge [パッケージ名]
yum -y install --enablerepo=epel [パッケージ名]
# アップデート確認
yum -y update --enablerepo=rpmforge
yum -y update --enablerepo=epel
# 必要なものをインストール
VPSだと無いものもあるから、一括で入れておいた方が後々の運用もふまえ楽になるパッケージだと思う。環境によっては不要なものもあるでしょう。OSによっても変わります。
yum -y install sysstat wget jwhois bind-utils bind-libs gcc make vim dstat expect telnet
yum -y install --enablerepo=epel iperf fail2ban
yum -y update
###
### turbostat
###
物理サーバだと最近はターボが付いているので、これを入れておくとブーストしているかどうかがわかる。自分はIntel製が多いから付いていないことの方がなかったな。
# インストール
cd /usr/local/src
wget http://mirror.linux.org.au/linux/kernel/people/lenb/acpi/utils/pmtools-latest/turbostat/turbostat.c
wget http://mirror.linux.org.au/linux/kernel/people/lenb/acpi/utils/pmtools-latest/turbostat/Makefile
make
# シンボリックリンク作成
ln -s /usr/local/src/turbostat /ディレクトリパス/turbostat
###
### IPv6をOFFる
###
これも環境によるけど、自身が管理していたサーバでは使うことがなかったからOFF。ちなみに、正確に言うとOFFにはできないから、認識させないようにするっていうのが本当の所なのかな。上で記載した通り7系では非推奨。
# /etc/modprobe.d/ipv6.conf を作成
vi /etc/modprobe.d/ipv6.conf
options ipv6 disable=1
###
### ntp
###
少し前に流行したNTPの脆弱性を狙った攻撃があったのでその対策
# コメントアウト
restrict default kod nomodify notrap nopeer noquery
restrict -6 default kod nomodify notrap nopeer noquery
# 追記
restrict default ignore
restrict -6 default ignore
disable monitor
# 同期するNTPサーバを変更
sed -i 's/server 0.rhel.pool.ntp.org/server ntp1.jst.mfeed.ad.jp iburst/g' /etc/ntp.conf
sed -i 's/server 1.rhel.pool.ntp.org/server ntp2.jst.mfeed.ad.jp iburst/g' /etc/ntp.conf
sed -i 's/server 2.rhel.pool.ntp.org/server ntp3.jst.mfeed.ad.jp iburst/g' /etc/ntp.conf
sed -i 's/server 3.rhel.pool.ntp.org/#server ntp3.jst.mfeed.ad.jp/g' /etc/ntp.conf
# 時刻合わせ
ntpdate ntp.nict.jp
# サービス起動
service ntpd start
###
### kernel panicの自動リブート
###
カーネルパラメータの調整は何のサーバかによって変わりますが、カーネルパニックになった場合を想定して念の為追記しておく。
# デフォルトは設定0で無効となっている
echo 10 > /proc/sys/kernel/panic
datetime=`date '+%Y%m%d%H%M%S'`
cp /etc/sysctl.conf /etc/sysctl.conf."$datetime"
vi /etc/sysctl.conf
# kernel panic Auto Reboot
kernel.panic = 10
# 設定の反映
sysctl -p
###
### bonding
###
これも環境次第ですが、NICが2ポートなら設定しておいて損はないはず。
「updelay、downdelay」はmode6ではいらなかったような気もする。
曖昧なので参考程度にw
# bondingの設定ファイルを作成
vi /etc/modprobe.d/bond0.conf
alias bond0 bonding
vi /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE="bond0"
ONBOOT="yes"
BOOTPROTO="none"
IPADDR="IPアドレス"
NETMASK="ネットマスク"
NM_CONTROLLED="no"
BONDING_OPTS="mode=6 miimon=100 updelay=0 downdelay=0"
ソフトウェア・ミドルウェアに関してはまた別で書こうかと。
これはあくまで自身への備忘録なので、参考にされる方は色々とご理解ください。
もっとこうしたらいいよ!というご指摘は非常にありがたやです。
あとは、最近トレンドの「kickstart,puppet」を使うというのも良いと思う。何台もサーバを構築する場合は効率的かな。