1
4

More than 3 years have passed since last update.

CentOS7でのセキュリテイ強化

Posted at

大前提

ここに書く事を全てやれば良いわけでは無いと思っている。
AWS,GCP,さくらクラウド等の環境でサービスを提供する場合や、
オンプレ環境でサービスを提供する場合でも、
セキュリティ強化の方法や設計思想は必ずしも同じではない。
何をどこまで、どのようにして、どのレベルで守るかは、
所属する組織や個人で適切に検討する必要がある。
例えば、WAFを導入すればセキュリティが高まると知りつつも、
金額が高いとゆう事で購入できなかったりもする。
セキュリティを高めた結果、運用に支障がでる場合も少なからずある。

超重要

セキュリティを強化するために、あれこれ調査して設定する事も重要ですが、
設定した後に、正しく設定されていることを確認する事が最も重要です。

SELinuxを無効にする

CentOS7の場合は、デフォルトでは有効(enforcing)
selinuxについて深い知見がある場合は、有効のままで良い
自分の場合は、有効にしていると色々と厄介なので無効にする

一時的に無効にする

Permissiveになる
再起動すると有効になる

# setenforce 0

永続的に無効にする

設定ファイルを編集し、OSを再起動し、確認をする

# vi /etc/selinux/config
SELINUX=disabled
# reboot
# getenforce
Disabled

パッケージを定期的にアップデートする

全体的にアップデートする場合や、
特定のパッケージのみアップデート対象から除外する場合や、
特定のパッケージのみアップデートする等状況により異なる
稀にアップデートした事でカーネルが壊れて再起動すると
カーネルパニックが発生する場合もあるので、
必要に応じてOS再起動を検討する
許されるならOS再起動すると良い

全体的にアップデートする

# yum update

特定のパッケージを除外してアップデートする
/etc/yum.confに除外するパッケージを記述する方法もある

# yum update --exclude=パッケージ名

特定のパッケージのみアップデートする

# yum update パッケージ名

sshのポート番号を変更する

ウェルノウンポート(0番~1023番)は設定しない。
エフェメラルポートは避ける
TCPやUDPにおけるポート番号の一覧
エフェメラルポート

エフェメラルポートの範囲を変更できるが基本的にはデフォルトのままで良い
エフェメラルポートの確認

# cat /proc/sys/net/ipv4/ip_local_port_range
32768   60999
# vi /etc/ssh/sshd_config
Port 任意のポート番号

一般権限のユーザー(仮にhoge)を作成し、パスワードを設定する

# useradd hoge
# passwd hoge

公開鍵認証方式でのログイン設定をする

接続元のクライアントマシンで公開鍵を作成する

仮に公開鍵として「id_rsa.pub」を作成したとする

ssh-keygen -t rsa

接続先のサーバーに公開鍵を追加する

一般ユーザーでログインする用にクライアントマシンで作成した公開鍵を追加します
SCP等で公開鍵(id_rsa.pub)を接続先ユーザーのホームディレクトリにコピーしたとする

$ cd
$ mkdir .ssh
$ chmod 700 .ssh/
$ cat id_rsa.pub >> .ssh/authorized_keys 
$ rm id_rsa.pub
$ chmod 600 .ssh/authorized_keys    

sudoを可能にする

無闇にrootユーザーにならないで、root権限の必要なコマンドを実行可能にする
sudoでコマンドを実行することにより、ログに残るようにする
visudoで/etc/sudoersを編集する
可能であれば、sudoで実行するコマンドも制限すると良い
CentOSでuserをsudo可能にする
sudo のセキュリティ(ごく一部CentOS7対応)

rootユーザーでのSSHによるログインを無効にする

# vi /etc/ssh/sshd_config
PermitRootLogin no  
# systemctl restart sshd

SSHでのパスワードに認証によるログインを禁止する

# vi /etc/ssh/sshd_config
PasswordAuthentication no
# systemctl restart sshd

firewalldの設定

基本は全部閉じて、必要なもののみ開ける
CentOS7でのFirewalld設定(ほぼコマンド例)
CentOS7のfirewalldをまじめに使うはじめの一歩(systemdも少し)

# systemctl status firewalld.service
# firewall-cmd --state
running
# firewall-cmd --list-all-zones

historyコマンド実行時のフォーマットをわかりやすくする

コマンドの実行日時を明確にする
何かあった時に時系列がすぐに理解できるのは重要

# /etc/profile.d/history.sh
HISTTIMEFORMAT='%F %T '

時刻同期の設定を適切にする

何かあった時に時間がずれていると調査時に困る。
そもそも時間がずれている事に気づかない事もありうる。

うるう秒対策

# vi /etc/chrony.conf
leapsecmode slew
maxslewrate 1000
smoothtime 400 0.001 leaponly

動作確認をする

# systemctl status chronyd
# chronyc sources
# chronyc tracking

不要サービスを無効化する

デフォルトのままだと、色々といらないものが動いているので、
一覧を表示して、不要と判断できるものは停止していく

systemctl list-unit-files --type=service
systemctl stop 不要なサービス
systemctl disable 不要なサービス

fail2banを設定する

CentOS7での fail2banのインストールと設定方法(with firewalld)

ウイルス対策ソフトをインストールする

ソフトの動作要件を正しく理解する必要がある。
サーバーのリソースを使用することと、
アンチウイルスソフトが悪さをする事もあるので
コストやメリット&デメリットを総合的に判断した上でインストールする
Linuxサーバにアンチウィルス対策ソフトウェアをインストール

ファイル改ざん検知ツールをインストールする

ソフトの動作要件を正しく理解する必要がある。
サーバーのリソースを使用することと、
アンチウイルスソフトが悪さをする事もあるので
コストやメリット&デメリットを総合的に判断した上でインストールする
ファイル改ざん検知ツール AIDE

自サーバー内からポートの空き状況を確認する

# yum -y install lsof
# lsof
# ss -nltu

外部から対象サーバーのポートの空き状況を確認する

# yum -y install nmap
# nmap 対象サーバーのIPアドレス

ログ監視

各種ログをメールで送る等して、毎日ログを確認する

yum -y install logwatch

ホストの侵入検知(chkrootkit/rkhunter/maldetect)

ソフトの動作要件を正しく理解する必要がある。
サーバーのリソースを使用することと、
アンチウイルスソフトが悪さをする事もあるので
コストやメリット&デメリットを総合的に判断した上でインストールする
Linuxセキュリテイ対策 ホストの侵入検知(chkrootkit/rkhunter/maldetect)

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4