さて、いよいよサーバーの本格的な構築を行いますか゛、本ページではSSHによるWindowsからのリモート接続、ウイルス対策、SSl証明書による情報の暗号化、データベースの導入等多数の設定が必要になります。
できるだけ順次立てて説明していくつもりです。ネットにはいろいろな情報がありますがわかりやすく整理したつもりです。
今回はyumを使わずにソースからインストールしていきます。
Contents
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エディタで開くと次のような画面が出ます。
SSH の再起動
1 |
# systemctl restart sshd.service |
2.2ファイアウォールの一時的な無効化
1 |
# iptables -F |
とりあえず無効化して、再度有効化します(iptablesの導入)
無効化した後、一度ログアウトして再ログインして下さい。
2.3 Windowsでの設定
Windowsからリモート接続するための設定を始めます、ターミナルエミュレーターは「Tera Term」を使用します。
Tera Termを起動し、起動画面のキャンセルをした後、Tera Termメニューの「設定」から「TCP/IP」を選択すると、次の画面になりますので赤字で説明の通り入力します。
「TCPポート番号」の箇所は上記「SSHサービスの設定ファイル変更」で設定したポート番号を入力します。最後に「OK」をクリック
再度Tera Termメニューの「ファイル」から「新しい接続」を選択すると上記の画面になるのて゜「OK」をクリックすると、次の画面になる
上の画面で「続行」をクリックすると、次の画面になる
情報が正しければ下図のように正常にログインできるはずです。
3.不要サービスの無効化
サーバーを運用する上で明らかに利用しないサービスは無効化(自動起動の停止)しておきます。不要なポートのオープンや、サーバーリソースの無駄遣いを防ぐことを目的として行います。
サービスの無効化は管理用コマンド systemctlを利用します。systemctlにオプションとしてdisableを付与することでサービスを無効化できます。
今後はコマンド入力画面を簡略化します。
1 2 3 4 5 6 7 8 |
# systemctl disable abrt-xorg.service # systemctl disable dmraid-activation.service # systemctl disable firewalld.service # systemctl disable libstoragemgmt.service # systemctl disable mdmonitor.service # disable postfix.service # disable rngd.service # disable rpcbind.service |
4.iptables によるファイアウォールの導入
CentOSはバージョン7からファイアウォールとしてfirewalldが採用されていますが。本ページでは慣れ親しんでいるiptablesで設定していきます。
ネットにごろごろしている「iptables」の記入の仕方やサンプルを参考にして、shファイルを作成してみました。
サーバーのローカールIPアドレス: 192.168.11.***
SSHポート; 3333
iptables.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/に保存し、権限を与え有効にします。
1 2 |
# chmod 755 /etc/rc.d/myiptable.sh # /etc/rc.d/myiptable.sh |
サーバー起動時に自動で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ファイルのインストール
1 2 3 4 5 6 7 8 9 |
# rpm -Uvh -0.100.2-2.el7.x86_64.rpm # rpm -Uvh -data-0.100.2-2.el7.noarch.rpm # rpm -Uvh -filesystem-0.100.2-2.el7.noarch.rpm # rpm -Uvh -lib-0.100.2-2.el7.x86_64.rpm # rpm -Uvh -scanner-systemd-0.100.2-2.el7.x86_64.rpm # rpm -Uvh -server-systemd-0.100.2-2.el7.x86_64.rpm # rpm -Uvh -update-0.100.2-2.el7.x86_64.rpm # rpm -Uvh -0.100.2-2.el7.x86_64.rpm # rpm -Uvh -10.23-2.el7.x86_64.rpm |
/etc/freshclam.confファイルを編集します。
1 2 3 4 |
# vi /etc/freshclam.conf #DatabaseMirror db.jp.clamav.net コメントアウトする DatabaseMirror db.jp.clamav.net 追加する NotifyClamd /etc/clamd.d/scan.conf 追加する |
/etc/clamd.d/scan.confファイルを編集します。
1 2 3 4 |
# vi /etc/clamd.d/scan.conf #Example コメントアウトする LocalSocket /var/run/clamd.scan/clamd.sock 行頭の#を削除する #User clamscan コメントアウトする |
定義ファイルのアップデート
1 |
# freshclam |
Clam AntiVirus を起動
1 2 |
# systemctl start clamd@scan # systemctl enable clamd@scan |
ウィルススキャンの定期実行(crontabを使用する)
1 2 |
# crontab -e 0 1 * * * /var/www/system/clamscan.sh > /dev/null 2>&1 新規に記入する |
6.サーバー構築設定の前準備 Tripwireのインストール
Tripwireとはファイルの変更・改ざんを検知するためのソフトウェアです。
Tripwire, Inc.による商用の製品も提供されていますが、ここではGitHub上で公開されているOSS版を導入します。 https://github.com/Tripwire/tripwire-open-source
Tripwireはリアルタイムの改ざん検出はできませんが、定期的にチェックを実行することでファイルの変更・改ざんを検知し、レポートすることができます。
6.1Tripwire をダウンロード、インストール
rpmソースファイルは少し古くなれば消えておりますが、新しいバージョンでも同様に行えると思います。
ダウンロード
1 |
# wget http://upload.myvideo.ge/epel/7/x86_64/t/tripwire-2.4.2.2-6.el7.x86_64.rpm |
インストール
1 |
# rpm -Uvh tripwire-2.4.2.2-6.el7.x86_64.rpm |
6.2サイトキーとローカルキーの生成
暗号署名を行うためのサイトキーとローカルキーを生成
1 |
# tripwire-setup-keyfiles |
上のコマンドを実行すると、サイトパスフレーズとローカルパスフレーズの入力を求められるので、別々のパスフレーズを設定します。
6.3 cfgファイルの設定と生成
設定の元となるテキストファイルを編集
1 |
# vi /etc/tripwire/twcfg.txt |
暗号署名した設定ファイルを生成
1 |
# twadmin --create-cfgfile --site-keyfile /etc/tripwire/site.key \ --site-passphrase <サイトパスフレーズ> /etc/tripwire/twcfg.txtt |
6.4ポリシーファイルの設定と生成
ポリシーファイルは、Tripwireによってどのファイル・ディレクトリをどのようなルールで監視するかというポリシーを定めるものです。
ポリシーの記述方法はTripwireについて|トリップワイヤ・ジャパン株式会社 に詳しく掲載されています。
ポリシー設定の元となるテキストファイルを編集
1 |
# vi /etc/tripwire/twpol.txt |
暗号署名したポリシー設定ファイルを生成
1 |
# twadmin --create-polfile --cfgfile /etc/tripwire/tw.cfg \ --site-passphrase <サイトパスフレーズ> /etc/tripwire/twpol.txt |
6.5 データベースの初期化
現在のファイルシステムの状態を記録してベースラインとなるデータベースを作ります。
データベースの初期化
1 |
# tripwire --init --local-passphrase <ローカルパスフレーズ> |
6.6 改ざんチェックを定期的に実行する
チェック方法
1 |
# tripwire --check |
チェック結果の確認
1 |
# twprint --print-report --twrfile <レポートファイルのpath> |
レポートファイルのpathはcfg設定ファイルの REPORTFILE で設定されたpath
データベースの更新
改ざんを検知した後、ファイルシステムの状態を修正するか、Tripwireのデータベースを更新しない限り、以降もずっと改ざんが検知されます。現在のファイルシステムが正しい場合現在の状態をベースのデータベースとして更新します。
1 |
# tripwire --update --accept-all \ --local-passphrase <ローカルパスフレーズ> \ --twrfile <レポートファイルのpath> |
6.7 改ざん検知ポリシーの更新
ポリシー設定の元となるテキストファイルを編集
1 |
# vi /etc/tripwire/twpol.txt |
ポリシー設定ファイルの再生成と、ベースラインの更新を行う
1 |
# tripwire --update-policy --site-passphrase <サイトパスフレーズ> \ --local-passphrase <ローカルパスフレーズ> /etc/tripwire/twpol.txt |
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 のダウンロード
1 2 3 4 5 |
# #wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz # tar zxvf chkrootkit.tar.gz # mkdir -p ~/bin && mv chkrootkit-0.53/chkrootkit ~/bin # rm -rf chkrootkit-0.53/ # rm -f chkrootkit.tar.gz |
7.2chkrootkit確認
1 2 |
# chkrootkit | grep INFECTED 上記chkrootkit実行結果として"INFECTED"という行が表示されなければ問題なし |
7.3chkrootkit定期自動実行設定
chkrootkit.shを次の内容でテキストエディタで作成する
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に保存する。
権限変更
1 |
# chmod 700 /var/www/system/chkrootkit.sh |
cronに追加
1 2 |
# crontab -e # 0 5 * * * /var/www/system/chkrootkit.sh |
「CentOS7.6サーバー構築 OSインストール後するべき初期設定」は以上です。