いわマン備忘録

備忘録とちょっとした設定メモや小ネタをUPしたいと思っております。

サーバ構築のベース設定メモ

早速だけどOSインストール後の初期設定をメモっておく。OSインストールは「ベース」「開発ツール」のみで構成することが多い。

ちなみに、この記事はCentOSScientific 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」を使うというのも良いと思う。何台もサーバを構築する場合は効率的かな。