少し放置していたさくらの VPS の OS を再インストールして一から環境構築したので、
その手順をまとめました。
環境
OS:Cent OS 6.8
ローカル環境:Mac
やること
セキュリティとログ監視の設定を行います。
Apache や MySQL などアプリケーションに関しては触れません。
- 作業用ユーザの作成
- SSH 鍵認証の設定
- ファイアウォールの設定
- logwatch の導入
root ログイン
サーバ契約時に送られてきたメールから、サーバの IP アドレスと root のパスワードを確認しておきます。
Mac のターミナルから SSH で接続します。
"Are you sure you want to continue connecting (yes/no)?" と聞かれたら yes と入力します。
ssh root@xx.xx.xx.xx
root パスワードの変更
まず、root のパスワードを変更します。
passwd
yum update
インストール済みのパッケージを更新します。
yum update
日本語化
vim /etc/sysconfig/i18n
LANG="C"
LANG="ja_JP.UTF-8"
作業用ユーザの追加
sudo できるよう wheel グループに追加してあげます。
useradd hoge
passwd hoge
usermod -G wheel hoge
visudo
# %wheel ALL=(ALL) ALL
%wheel ALL=(ALL) ALL
作業用ユーザでログイン
作業用ユーザでログインできることを確認します。
ssh hoge@xx.xx.xx.xx
SSH 鍵認証の設定
公開鍵を入れるディレクトリを作成します。
mkdir ~/.ssh
chmod 700 ~/.ssh
次に、ローカルのターミナルを起動します。
ssh-keygen -t rsa -v
ファイル名を聞かれるので、デフォルトで良ければそのまま Enter します。
パスフレーズを入力します。
ファイルが作成されたらパーミッションを変更します。
cd .ssh
chmod 600 id_rsa.pub
サーバに公開鍵を転送します。
scp id_rsa.pub hoge@xx.xx.xx.xx:~/.ssh/authorized_keys
SSH 鍵認証を使ったログイン
鍵認証でログインできることを確認します。
ssh hoge@xx.xx.xx.xx
SSH のセキュリティ設定
鍵認証の設定ができたところで、以下を禁止してセキュリティを高めます。
- パスワードでのログイン禁止
- root でのログイン禁止
- ポート番号の変更
root 権限で作業します。
sudo -s
vim /etc/ssh/sshd_config
#Port 22
Port 10022
パスワードでのログインを禁止します。
PasswordAuthentication yes
PasswordAuthentication no
root でのログインを禁止します。
#PermitRootLogin yes
PermitRootLogin no
保存後、sshd を再起動します。
service sshd restart
sshd を再起動したら別のターミナルを開き、変更したポート番号でのログインを確認します。
root やパスワードでのログインができないことも確認しておきましょう。
ssh -p 10022 hoge@xx.xx.xx.xx
ファイアウォールの設定
CentOS 6.x では iptables を使用します。
今回は SSH と HTTP のみ許可していますが、必要に応じてその他のポートも開けます。
vim /etc/sysconfig/iptables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 10022 -j ACCEPT
COMMIT
IPv4 は iptables で設定しますが、IPv6 は ip6tables で設定します。
設定している内容は IPv4 と同じです。
vim /etc/sysconfig/ip6tables
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp --tcp-flags ALL NONE -j DROP
-A INPUT -p tcp --tcp-flags ALL ALL -j DROP
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -p icmpv6 --icmpv6-type echo-request -m limit --limit 1/s --limit-burst 4 -j ACCEPT
-A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW --dport 10022 -j ACCEPT
COMMIT
logwatch の導入
logwatch はサーバのログをきれいに整形して、毎日レポートをメールで送ってくれます。
/var/log から手作業でログを確認するという作業から解放されますので、サーバ監視にはかかせませんね。
yum install logwatch
インストールが終わったら設定を行います。
cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
vim /etc/logwatch/conf/logwatch.conf
レポートの送信先メールアドレスを設定します。
自分の環境ではデフォルトで postfix が動いていたので、メールアドレスを指定するだけで送信できました。
MailTo=Root
MailTo=hoge@example.com
次に、ログの詳細度を設定します。
Low、Med、High のいずれかを設定します。この辺はお好みで。
Detail=Low
Detail=Med
最後に、cron に設定されている conf ファイルのパスを変更します。
DailyReport=`grep -e "^[[:space:]]*DailyReport[[:space:]]*=[[:space:]]*" /usr/share/logwatch/default.conf/logwatch.conf | head -n1 | sed -e "s|^\s*DailyReport\s*=\s*||"`
DailyReport=`grep -e "^[[:space:]]*DailyReport[[:space:]]*=[[:space:]]*" /etc/logwatch/conf/logwatch.conf | head -n1 | sed -e "s|^\s*DailyReport\s*=\s*||"`
毎日レポートが送られてきますので、ちゃんと読みましょう!