「エアコンの安全な修理・適切なフロン回収」はこちら

CentOS7.6サーバー構築 OSインストール後するべき初期設定

さて、いよいよサーバーの本格的な構築を行いますか゛、本ページではSSHによるWindowsからのリモート接続、ウイルス対策、SSl証明書による情報の暗号化、データベースの導入等多数の設定が必要になります。

できるだけ順次立てて説明していくつもりです。ネットにはいろいろな情報がありますがわかりやすく整理したつもりです。

今回はyumを使わずにソースからインストールしていきます。

1.SELinuxの無効化

まず、selinuxを無効化します。selinuxはLinuxの監査やセキュリティを向上させる機能ですが、有効になっているとサービスの動作や、設定内容にかなりの制限が出てきます。そのため、基本的には無効にする場合が多いのが実情です。

ウェブサイトを見ながらサーバー構築を行って、思った通りに動作しない場合は、このselinuxが有効化されていることが原因だったりします。その為、インストール後に忘れずに無効化します。
次のようにすると無効化ができます。(本ページでは一般ユーザー名「jimy」、ホスト名「Lepard」になっています)
一般ユーザーでログイン後、ルートユーザーに権限変更の方法は既知のこととして進めます。

このままでは、サーバーを再起動すればseinuxは有効に戻りますので、永久にselinuxを無効にするには/etc/sysconfig/selinuxファイルを修正します。

赤枠の中「SELINUX=enforcing」を「SELINUX=disabled」に変更する

変更後

2.SSHによるリモート接続の設定

SSHはサーバーへリモートで接続するためのサービスで、基本的にはOSインストール直後に動作していますが、デフォルトの設定ではややセキュリティに難があります。
ここではデフォルトの設定を変更してssh接続のセキュリティを高める設定を行います。

2.1SSHサービスの設定ファイル変更

SSHサービスの設定を変更するために設定ファイルを変更します。
SSHサービスの設定ファイルは"/etc/ssh/sshd_config"になります。設定ファイルをviエディターで開きます。(viエディタの使い方はネットに情報がたくさんありますので調べて下さい)

viエディタで開くと次のような画面が出ます。

「Port 22」の箇所を探してウェルノンポート以外の任意のポート番号に変えます、今回は「Port 3333」に変更して進めていきます(このポート番号を変えるだけでも不正なアクセスは軽減できます)
②「#ListenAddress 0.0.0.0」を探しコメントアウトするため、前の「#」を削除します
③「#PermitRootLogin yes」を探し「PermitRootLogin no」に変更する
 rootユーザーはユーザー名が既に判明しているためパスワードが判明すると、管理者権限でサーバーへログイン出来るため、これを拒否する設定を行います。

SSH の再起動

2.2ファイアウォールの一時的な無効化

とりあえず無効化して、再度有効化します(iptablesの導入)
無効化した後、一度ログアウトして再ログインして下さい。

2.3 Windowsでの設定

Windowsからリモート接続するための設定を始めます、ターミナルエミュレーターは「Tera Term」を使用します。
Tera Termを起動し、起動画面のキャンセルをした後、Tera Termメニューの「設定」から「TCP/IP」を選択すると、次の画面になりますので赤字で説明の通り入力します。
「TCPポート番号」の箇所は上記「SSHサービスの設定ファイル変更」で設定したポート番号を入力します。最後に「OK」をクリック

再度Tera Termメニューの「ファイル」から「新しい接続」を選択すると上記の画面になるのて゜「OK」をクリックすると、次の画面になる

上の画面で「続行」をクリックすると、次の画面になる

情報が正しければ下図のように正常にログインできるはずです。

3.不要サービスの無効化

サーバーを運用する上で明らかに利用しないサービスは無効化(自動起動の停止)しておきます。不要なポートのオープンや、サーバーリソースの無駄遣いを防ぐことを目的として行います。
サービスの無効化は管理用コマンド systemctlを利用します。systemctlにオプションとしてdisableを付与することでサービスを無効化できます。
今後はコマンド入力画面を簡略化します。

4.iptables によるファイアウォールの導入

CentOSはバージョン7からファイアウォールとしてfirewalldが採用されていますが。本ページでは慣れ親しんでいるiptablesで設定していきます。
ットにごろごろしている「iptables」の記入の仕方やサンプルを参考にして、shファイルを作成してみました。
サーバーのローカールIPアドレス:  192.168.11.***
SSHポート;  3333
iptables.shサンプル

#!/bin/sh

#設定をクリア
/sbin/iptables -F

#ポリシー設定
/sbin/iptables -t filter -P INPUT DROP
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -P OUTPUT ACCEPT

# PING( ICMP )
/sbin/iptables -A INPUT -p icmp -j ACCEPT

# localhost
/sbin/iptables -A INPUT -i lo -j ACCEPT

# my network
/sbin/iptables -A INPUT -s 192.168.11.0/24 -d 0/0 -p tcp -j ACCEPT
/sbin/iptables -A INPUT -s 192.168.11.0/24 -d 0/0 -p udp -j ACCEPT

# httpd
/sbin/iptables -A INPUT -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 80 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 443 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 443 -j ACCEPT

# sshリモート接続
/sbin/iptables -A INPUT -s 0/0 -p tcp --dport 3333 -j ACCEPT

# SMTP
/sbin/iptables -A INPUT -p tcp --dport 25 -j LOG
/sbin/iptables -A INPUT -p tcp --sport 25 -j LOG
/sbin/iptables -A INPUT -p tcp --dport 25 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 25 -j ACCEPT

# pop3
/sbin/iptables -A INPUT -p tcp --dport 110 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 110 -j ACCEPT

# named
/sbin/iptables -A INPUT -p tcp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 53 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 53 -j ACCEPT
/sbin/iptables -A INPUT -p udp --sport 53 -j ACCEPT

# ftp
/sbin/iptables -A INPUT -p tcp --dport 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 20 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --dport 21 -j ACCEPT
/sbin/iptables -A INPUT -p tcp --sport 21 -j ACCEPT

# ntpd
/sbin/iptables -A INPUT -p udp --dport 123 -j ACCEPT

# restart
#/etc/rc.d/init.d/iptables save
#/etc/rc.d/init.d/iptables restart

上記内容をテキストエディタで作成し、ファイル名の拡張子を「.sh」とします。

たとえば「myiptable.sh」とします。
「myiptable.sh」を/etc/rc.d/に保存し、権限を与え有効にします。

サーバー起動時に自動でiptables を有効になるようデーモンディレクトリーの「rc.local」ファイルをviエディタで開き「myiptable.sh」を記入します。

ここで一度サーバーを再起動して下さい。

5.サーバー構築設定の前準備 ウィルス対策

Linux 用のフリーのアンチウィルスソフトであるClam AntiVirus を利用します。

5.1Clam AntiVirus ダウンロードとインストール

Linuxのパッケージインストールを大変ややこしく、相互に依存するファイルも厳密に指定されていますので、もれなくファイルを入れなくてはエラーが頻発します。
また、必要なファイルをネットで探しても見つかりにくく、面倒ですががんばって下さい。とりあえず依存関係で必要なファイルをできるだけ記載します。

必要なファイル
clamav-0.100.2-2.el7.x86_64.rpm
clamav-data-0.100.2-2.el7.noarch.rpm
clamav-filesystem-0.100.2-2.el7.noarch.rpm
clamav-lib-0.100.2-2.el7.x86_64.rpm
clamav-scanner-systemd-0.100.2-2.el7.x86_64.rpm
clamav-server-systemd-0.100.2-2.el7.x86_64.rpm
clamav-update-0.100.2-2.el7.x86_64.rpm
clamd-0.100.2-2.el7.x86_64.rpm
pcre2-10.23-2.el7.x86_64.rpm

rpmファイルのインストール

/etc/freshclam.confファイルを編集します。

/etc/clamd.d/scan.confファイルを編集します。

定義ファイルのアップデート

Clam AntiVirus を起動

ウィルススキャンの定期実行(crontabを使用する)

6.サーバー構築設定の前準備 Tripwireのインストール

Tripwireとはファイルの変更・改ざんを検知するためのソフトウェアです。
Tripwire, Inc.による商用の製品も提供されていますが、ここではGitHub上で公開されているOSS版を導入します。 https://github.com/Tripwire/tripwire-open-source

Tripwireはリアルタイムの改ざん検出はできませんが、定期的にチェックを実行することでファイルの変更・改ざんを検知し、レポートすることができます。

6.1Tripwire をダウンロード、インストール

rpmソースファイルは少し古くなれば消えておりますが、新しいバージョンでも同様に行えると思います。
ダウンロード

インストール

6.2サイトキーとローカルキーの生成

暗号署名を行うためのサイトキーとローカルキーを生成

上のコマンドを実行すると、サイトパスフレーズとローカルパスフレーズの入力を求められるので、別々のパスフレーズを設定します。

6.3 cfgファイルの設定と生成

設定の元となるテキストファイルを編集

暗号署名した設定ファイルを生成

6.4ポリシーファイルの設定と生成

ポリシーファイルは、Tripwireによってどのファイル・ディレクトリをどのようなルールで監視するかというポリシーを定めるものです。
ポリシーの記述方法はTripwireについて|トリップワイヤ・ジャパン株式会社 に詳しく掲載されています。

ポリシー設定の元となるテキストファイルを編集

暗号署名したポリシー設定ファイルを生成

6.5 データベースの初期化

現在のファイルシステムの状態を記録してベースラインとなるデータベースを作ります。

データベースの初期化

6.6 改ざんチェックを定期的に実行する

チェック方法

チェック結果の確認

レポートファイルのpathはcfg設定ファイルの REPORTFILE で設定されたpath

データベースの更新
改ざんを検知した後、ファイルシステムの状態を修正するか、Tripwireのデータベースを更新しない限り、以降もずっと改ざんが検知されます。現在のファイルシステムが正しい場合現在の状態をベースのデータベースとして更新します。

6.7 改ざん検知ポリシーの更新

ポリシー設定の元となるテキストファイルを編集

ポリシー設定ファイルの再生成と、ベースラインの更新を行う

7.サーバー構築設定の前準備 chkrootkit の導入

chkrootkitというrootkit検知ツールを導入して、rootkitがLinuxサーバーにインストールされてしまっていないかチェックする。
chkrootkitは、以下のコマンドを使用してチェックするため、コマンド自体がrootkitを検知できないように改竄されてからでは意味がないので、Linuxインストール後の初期の段階で導入しておきます。
この情報は「CentOSで自宅サーバー構築 > rootkit検知ツール導入(chkrootkit)」を参考にさせて頂きました。

【chkrootkitが使用するコマンド】
awk, cut, echo, egrep, find, head, id, ls, netstat, ps, strings, sed, uname

7.1 chkrootkit のダウンロード

7.2chkrootkit確認

7.3chkrootkit定期自動実行設定

chkrootkit.shを次の内容でテキストエディタで作成する

#!/bin/bash

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

LOG=/tmp/$(basename ${0})

# chkrootkit実行
chkrootkit > $LOG 2>&1

# ログ出力
cat $LOG | logger -t $(basename ${0})

# SMTPSのbindshell誤検知対応
if [ ! -z "$(grep 465 $LOG)" ] && \
[ -z $(/usr/sbin/lsof -i:465|grep bindshell) ]; then
sed -i '/465/d' $LOG
fi

# upstartパッケージ更新時のSuckit誤検知対応
if [ ! -z "$(grep Suckit $LOG)" ] && \
[ -z "$(rpm -V rpm -qf /sbin/init)" ]; then
sed -i '/Suckit/d' $LOG
fi

# rootkit検知時のみroot宛メール送信
[ ! -z "$(grep INFECTED $LOG)" ] && \
grep INFECTED $LOG | mail -s "chkrootkit report in hostname" root

7.4 chkrootkit.sh保存と権限変更しcronに追加

chkrootkit.shを/var/www/system/chkrootkit.shに保存する。
権限変更

cronに追加

  cronについて
# 0 5 * * * /var/www/system/chkrootkit.sh
(入力は半角英数字で行ってください。)
*の箇所は実行する日時曜日の種類です
*の左から「分」、「時刻」、「日」、「月」、「曜日」となっています。
上の例でいうと、「0 5 * * *」は毎日5 時00 分に処理を実行します。

「CentOS7.6サーバー構築 OSインストール後するべき初期設定」は以上です。

タイトルとURLをコピーしました