CentOS7　インストール後のセキュリティ対策

# はじめに
セキュリティ対策を行います。

- 管理用アカウントを作成
- su コマンドを実行可能なユーザを限定
- root 宛メールの転送設定
- ssh 設定のログイン設定
- アンチウィルス用リポジトリ
- アンチウィルス
- ファイル改ざん検知

# 設定手順
## 管理用アカウントを作成
概要
　・管理用のユーザアカウントを作成する
　・管理ユーザでログインし su コマンドで root ユーザにスイッチする

ユーザ追加

~~~
useradd [username]
usermod -G wheel [username]
~~~

パスワード変更

~~~
passwd [username]
~~~

## su コマンドを実行可能なユーザを限定
概要
　・su コマンドを実行できるユーザを wheel グループのユーザに限定

設定変更
　・pam_wheel.so を使う auth をコメントをはずす

~~~
cp -p /etc/pam.d/su /etc/pam.d/su.org
vi /etc/pam.d/su
~~~

~~~Ini:/etc/pam.d/su
# Uncomment the following line to require a user to be in the "wheel" group.
auth            required        pam_wheel.so use_uid
~~~

## root 宛のメールを転送
概要
　・root 宛に届くメールを管理者に転送する

インストール

~~~
yum -y install mailx
~~~

設定変更
　・root 宛のメールを管理者に転送

~~~
cp -p /etc/aliases /etc/aliases.org
vi /etc/aliases
~~~
~~~Ini:/etc/aliases
# Person who should get root's mail
root:           [username]
~~~

設定反映

~~~
newaliases
~~~


## ssh 設定のログイン設定
概要
　・アクセスポートを変更
　・root ユーザのログイン禁止
　・パスワード使用しないログインの禁止

設定変更
　・Port を 10022 に設定
　・PermitRootLogin を no に設定
　・PermitEmptyPasswords を no に設定

~~~
cp -p /etc/ssh/sshd_config /etc/ssh/sshd_config.org
vi /etc/ssh/sshd_config
~~~
~~~Ini:/etc/ssh/sshd_config
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 10022
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

...

# Authentication:

#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

...

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
PermitEmptyPasswords no
PasswordAuthentication yes
~~~

設定反映

~~~
systemctl restart sshd
~~~

## アンチウィルス用リポジトリ
概要
　・アンチウィルス（clamav）のインストール用にリポジトリを追加、clamav 以外を使用するのであれば不要
　・通常時は使用しないように設定

インストール

~~~
rpm -ivh http://ftp.riken.jp/Linux/fedora/epel/7/x86_64/e/epel-release-7-9.noarch.rpm
yum -y update epel-release.noarch
~~~

設定変更
　・epel セクションの enabled を 0 に設定

~~~
cp -p /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.org
vi /etc/yum.repos.d/epel.repo
~~~
~~~Ini:/etc/yum.repos.d/epel.repo
[epel]
name=Extra Packages for Enterprise Linux 7 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&arch=$basearch
failovermethod=priority
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
~~~

※以降、epel リポジトリを使用する場合は yum コマンドに --enablerepo=epel オプションが必要

## アンチウィルス
概要
　・アンチウィルスソフト（clamav）を利用する

インストール

~~~
yum -y --enablerepo=epel install \
        clamav clamav-server \
        clamav-server-systemd \
        clamav-update clamav-scanner
~~~

設定変更
　・Example をコメントアウト

~~~
cp -p /etc/freshclam.conf /etc/freshclam.conf.org
vi /etc/freshclam.conf
~~~
~~~Ini:/etc/freshclam.conf
# Comment or remove the line below.
#Example
~~~

設定変更
　・FRESHCLAM_DELAY をコメントアウト

~~~
cp -p /etc/sysconfig/freshclam /etc/sysconfig/freshclam.org
vi /etc/sysconfig/freshclam
~~~
~~~Ini:/etc/sysconfig/freshclam
### !!!!! REMOVE ME !!!!!!
### REMOVE ME: By default, the freshclam update is disabled to avoid
### REMOVE ME: network access without prior activation
#FRESHCLAM_DELAY=disabled-warn  # REMOVE ME
~~~

設定変更
　・Example をコメントアウト
　・LocalSocket のファイルパスを変更

~~~
cp -p /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.org
vi /etc/clamd.d/scan.conf
~~~
~~~Ini:/etc/clamd.d/scan.conf
# Comment or remove the line below.
#Example

...

# Path to a local socket file the daemon will listen on.
# Default: disabled (must be specified by a user)
LocalSocket /var/run/clamd.scan/clamd.sock
~~~

ウィルス定義ファイルを更新

~~~
freshclam
~~~

起動設定

~~~
systemctl start clamd.scan
systemctl enable clamd.scan
~~~

ウィルスチェックスクリプト作成
　・epel リポジトリを使用するため、このスクリプトで clamav をアップデート
　・ウィルススキャンを実行する
　・ウィルスが発見された場合、root ユーザ宛にメールを送信する

~~~
vi /etc/cron.daily/virusscan
~~~
~~~bash:/etc/cron.daily/virusscan
#!/bin/bash

MAILTO=root
PATH=/usr/bin:/bin

# excludeopt setup
excludelist=/root/clamscan.exclude
if [ -s $excludelist ]; then
    for i in `cat $excludelist`
    do
        if [ $(echo "$i"|grep \/$) ]; then
            i=`echo $i|sed -e 's/^\([^ ]*\)\/$/\1/p' -e d`
            excludeopt="${excludeopt} --exclude-dir=^$i"
        else
            excludeopt="${excludeopt} --exclude=^$i"
        fi
    done
fi

# clamav update
yum -y update --enablerepo=epel clamav* > /dev/null 2>&1

# virus scan
CLAMSCANTMP=`mktemp`
clamscan --recursive --remove ${excludeopt} / > $CLAMSCANTMP 2>&1
[ ! -z "$(grep FOUND$ $CLAMSCANTMP)" ] && \

# report mail send
grep FOUND$ $CLAMSCANTMP | mail -s "Virus Found in `hostname`" $MAILTO
rm -f $CLAMSCANTMP
~~~

実行権限付与

~~~
chmod 755 /etc/cron.daily/virusscan
~~~

## ファイル改ざん検知
概要
　・ファイル改ざん検知を実行する

インストール

~~~
yum -y install aide
~~~

初期データ作成

~~~
aide --init
cp -p /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz 
~~~

改ざん検知スクリプト作成
　・データを更新する
　・検知結果を root ユーザ宛に送付する

~~~
vi /etc/cron.daily/aide
~~~
~~~bash:/etc/cron.daily/aide
#!/bin/bash

MAILTO=root
LOGFILE=/var/log/aide/aide.log
AIDEDIR=/var/lib/aide

/usr/sbin/aide  -u > $LOGFILE
cp $AIDEDIR/aide.db.new.gz $AIDEDIR/aide.db.gz

x=$(grep "Looks okay" $LOGFILE | wc -l)

if [ $x -eq 1 ]
then
    echo "All Systems Look OK" | /bin/mail -s "AIDE OK" $MAILTO
else
    echo "$(egrep "added|changed|removed" $LOGFILE)" | /bin/mail -s "AIDE DETECTED CHANGES" $MAILTO
fi
exit
~~~

実行権限付与

~~~
chmod 755 /etc/cron.daily/aide
~~~

# 次回予定
ダイナミック DNS でドメインの取得と DiCE の設定

# 更新履歴
2017/08/04 ウィルスチェックスクリプトを修正。
　誤）yum -y update --enablerepo=epel clamav* 2>&1
　正）yum -y update --enablerepo=epel clamav* > /dev/null 2>&1

2017/08/08 文言の修正 orz
　誤）行進履歴
　正）更新履歴