CentOS サーバーのセキュリティ強化に関する 23 のヒント - パート 2
CentOS サーバーを保護して強化する方法に関する前回のチュートリアルに引き続き、この記事では、以下のチェックリストに示されているその他のセキュリティに関するヒントについて説明します。
要件
- CentOS サーバーのセキュリティ強化に関する 20 のヒント – パート 1
21. 無駄な SUID および SGID コマンドを無効にする
setuid ビットと setgid ビットがバイナリ プログラムに設定されている場合、これらのコマンドは、root 権限などの他のユーザーまたはグループの権限でタスクを実行できます。重大なセキュリティ問題が露呈する可能性があります。
多くの場合、バッファ オーバーラン攻撃では、このような実行可能バイナリを悪用して、root パワー ユーザーの権限で未承認のコードを実行する可能性があります。
find / -path /proc -prune -o -type f \( -perm -4000 -o -perm -2000 \) -exec ls -l {} \;
setuid ビットの設定を解除するには、以下のコマンドを実行します。
chmod u-s /path/to/binary_file
setgid ビットの設定を解除するには、以下のコマンドを実行します。
chmod g-s /path/to/binary_file
22. 所有されていないファイルとディレクトリを確認する
有効なアカウントによって所有されていないファイルまたはディレクトリは、削除するか、ユーザーおよびグループからのアクセス許可を割り当てる必要があります。
以下の find コマンドを発行して、ユーザーとグループのないファイルまたはディレクトリをリストします。
find / -nouser -o -nogroup -exec ls -l {} \;
23. 世界中で書き込み可能なファイルをリストする
誰でも書き込み可能なファイルをシステム上に保持すると、誰でも変更できるため危険が生じる可能性があります。次のコマンドを実行して、常に誰でも書き込み可能なシンボリックリンクを除く、ワード書き込み可能なファイルを表示します。
find / -path /proc -prune -o -perm -2 ! -type l –ls
24. 強力なパスワードを作成する
8 文字以上のパスワードを作成します。パスワードには数字、特殊文字、および大文字を含める必要があります。 pwmake を使用して、/dev/urandom ファイルから 128 ビットのパスワードを生成します。
pwmake 128
25. 強力なパスワード ポリシーを適用する
/etc/pam.d/passwd ファイルに以下の行を追加して、システムに強力なパスワードの使用を強制します。
password required pam_pwquality.so retry=3
上記の行を追加すると、入力するパスワードには、abcd などの単調シーケンスで 3 つを超える文字や、 などの 3 つを超える連続する同一の文字を含めることはできません。 1111 番です。
すべてのクラスの文字を含む最小長が 8 文字のパスワードの使用をユーザーに強制するには、文字シーケンスと連続文字の強度チェックを行い、次の行を /etc/security に追加します。 /pwquality.conf ファイル。
minlen = 8
minclass = 4
maxsequence = 3
maxrepeat = 3
26. パスワードエージングを使用する
chage コマンドは、ユーザー パスワードのエージングに使用できます。ユーザーのパスワードの有効期限が 45 日になるように設定するには、次のコマンドを使用します。
chage -M 45 username
パスワードの有効期限を無効にするには、次のコマンドを使用します。
chage -M -1 username
次のコマンドを実行して、即時パスワードの有効期限を強制します (ユーザーは次回ログイン時にパスワードを変更する必要があります)。
chage -d 0 username
27. アカウントをロックする
ユーザー アカウントは、passwd または usermod コマンドを実行することでロックできます。
passwd -l username
usermod -L username
アカウントのロックを解除するには、passwd コマンドの -u
オプションと usermod の -U
オプションを使用します。
28. アカウントのシェルアクセスを防止する
システム アカウント (通常のアカウントまたはサービス アカウント) が bash シェルにアクセスできないようにするには、root シェルを /usr/sbin/nologin または /bin/false に変更します。次のコマンドを実行して、/etc/passwd ファイルを作成します。
usermod -s /bin/false username
新しいユーザーの作成時にシェルを変更するには、次のコマンドを発行します。
useradd -s /usr/sbin/nologin username
29. vlock で仮想ユーザー コンソールをロックする
vlock は、Linux コンソールで 1 つの複数のセッションをロックするために使用されるプログラムです。プログラムをインストールし、以下のコマンドを実行してターミナル セッションのロックを開始します。
yum install vlock
vlock
30. 一元管理システムを使用してアカウントと認証を管理する
集中認証システムを使用すると、アカウントの管理と制御が大幅に簡素化されます。このタイプのアカウント管理を提供できるサービスは、IPA Server、LDAP、Kerberos、Microsoft Active Directory、Nis、Samba ADS、または Winbind です。
これらのサービスの一部は、デフォルトで、Kerberos などの暗号化プロトコルと対称キー暗号化を使用して高度にセキュリティが保護されています。
31. USB メディアの強制読み取り専用マウント
blockdev ユーティリティを使用すると、すべてのリムーバブル メディアを強制的に読み取り専用としてマウントできます。たとえば、80-readonly-usb.rules という名前の新しい udev 構成ファイルを /etc/udev/rules.d/ ディレクトリに作成します。次の内容で:
SUBSYSTEM=="block",ATTRS{removable}=="1",RUN{program}="/sbin/blockdev --setro %N"
次に、以下のコマンドを使用してルールを適用します。
udevadm control -reload
32. TTY 経由のルートアクセスの無効化
root アカウントがすべてのコンソール デバイス (TTY) 経由でシステム ログインを実行できないようにするには、次のコマンド ターミナル プロンプトを root で入力して securetty ファイルの内容を消去します。
cp /etc/securetty /etc/securetty.bak
cat /dev/null > /etc/securetty
このルールは SSH ログイン セッションには適用されないことに注意してください
SSH 経由での root ログインを防止するには、ファイル /etc/ssh/sshd_config を編集し、以下の行を追加します。
PermitRootLogin no
33. POSIX ACL を使用してシステム権限を拡張する
アクセス制御リストでは、複数のユーザーまたはグループに対するアクセス権を定義し、プログラム、プロセス、ファイル、およびディレクトリに対する権限を指定できます。ディレクトリに ACL を設定すると、その子孫は同じ権限を自動的に継承します。
例えば、
setfacl -m u:user:rw file
getfacl file
34. SELinux を強制モードでセットアップする
Linux カーネルのSELinux 拡張機能では、強制アクセス制御 (MAC) ポリシーが実装されており、ユーザーは、すべてのユーザー、プログラム、プロセス、ファイル、デバイスに対してきめ細かなアクセス許可を提供するセキュリティ ポリシーを定義できます。
カーネルのアクセス制御の決定は、認証されたユーザー ID ではなく、セキュリティ関連のすべてのコンテキストに基づいています。
Selinux ステータスを取得し、ポリシーを適用するには、以下のコマンドを実行します。
getenforce
setenforce 1
sestatus
35. SELinux 追加ユーティリティのインストール
SELinux を操作するための追加の Python ユーティリティを提供する policycoreutils-python パッケージをインストールします: audit2allow、audit2why、chcat と セマネージ です。
すべてのブール値を短い説明とともに表示するには、次のコマンドを使用します。
semanage boolean -l
たとえば、httpd_enable_ftp_server の値を表示および設定するには、次のコマンドを実行します。
getsebool httpd_enable_ftp_server
ブール値の値を再起動後も保持するには、次の例に示すように、-P
オプションを setsebool に指定します。
setsebool -P httpd_enable_ftp_server on
36. 集中ログサーバーを使用する
機密ユーティリティのログ メッセージを集中ログ サーバーに送信するように rsyslog デーモンを構成します。また、logwatch ユーティリティを使用してログ ファイルを監視します。
ログ メッセージをリモート サーバーに送信すると、システムが侵害されると、悪意のあるユーザーはアクティビティを完全に隠すことができなくなり、リモート ログ ファイルに常に痕跡が残ります。
37. プロセスアカウンティングを有効にする
psacct ユーティリティをインストールしてプロセス アカウンティングを有効にし、lastcomm コマンドを使用して、システム アカウンティング ファイルに記録されている以前に実行されたコマンドに関する情報を表示し、sa コマンドを使用して、記録された以前に実行されたコマンドに関する情報を要約します。システムアカウンティングファイル内。
38. /etc/sysctl.conf の強化
システムを保護するには、次のカーネル パラメーター ルールを使用します。
ソースルーティングの無効化
net.ipv4.conf.all.accept_source_route=0
IPv4 転送を無効にする
ipv4.conf.all.forwarding=0
IPv6を無効にする
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
特に必要な場合を除き、ICMP リダイレクトされたパケットの受け入れと送信を無効にします。
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.secure_redirects=0
net.ipv4.conf.all.send_redirects=0
リバースパス転送を無効にする
net.ipv4.conf.all.rp_filter=2
すべての ICMP エコー要求を無視します (有効にするには 1 に設定します)
net.ipv4.icmp_echo_ignore_all = 0
39. VPN サービスを使用して、保護されていないパブリック ネットワーク経由で社内にアクセスする
インターネット経由で LAN 構内にリモート アクセスするには、 通信事業者向けのVPN サービスを必ず使用してください。このような種類のサービスは、OpenVPN などの無料のオープン ソース ソリューション、または Cisco VPN などの独自のソリューションを使用して構成できます (Epel リポジトリが提供するvpnc コマンド ライン ユーティリティをインストールします)。
40. 外部システムスキャンの実行
次のような特定のツールを使用して、LAN 経由でリモート ポイントからシステムをスキャンすることにより、システムのセキュリティの脆弱性を評価します。
- Nmap – ネットワーク スキャナー 29 Nmap コマンドの例
- Nessus – セキュリティ スキャナー
- OpenVAS – 脆弱性のスキャンと包括的な脆弱性管理に使用されます。
- Nikto – 優れた共通ゲートウェイ インターフェイス (CGI) スクリプト スキャナー Linux の Web 脆弱性をスキャン
41. システムを内部的に保護する
ウイルス、ルートキット、マルウェアに対する内部システム保護を使用し、次のような不正なアクティビティ (DDOS 攻撃、ポート スキャン) を検出できる侵入検出システムをインストールすることを推奨します。
- AIDE – 高度な侵入検知環境 – http://aide.sourceforge.net/
- ClamAV – ウイルス対策スキャナー https://www.clamav.net
- Rkhunter – ルートキットスキャナー
- Lynis – Linux 用のセキュリティ監査およびスキャン ツール
- トリップワイヤ – セキュリティとデータの整合性 http://www.tripwire.com/
- Fail2Ban – ネットワーク侵入防止
- OSSEC – (HIDS) ホストベースの侵入検知システム http://ossec.github.io/
- Mod_Security – ブルート フォース攻撃または DDoS 攻撃を保護します
42. ユーザー環境変数の変更
以下のコマンドを発行して、日付と時刻の形式を追加してコマンドの実行を保存します。
echo 'HISTTIMEFORMAT="%d/%m/%y %T "' >> .bashrc'
コマンドが入力されるたびに (ログアウトする代わりに) HISTFILE を即座に記録するように強制します。
echo ‘PROMPT_COMMAND="history -a"’ >> .bashrc
ログインセッションのタイムアウトを制限します。アイドル期間中にアクティビティが実行されない場合、シェルを自動的に破棄します。 SSH セッションを自動的に切断するのに非常に便利です。
echo ‘TMOUT=120’ >> .bashrc
以下を実行して、すべてのルールを適用します。
source .bashrc
43. データのバックアップ
システム障害が発生した場合に備えて、tar、cat、rsync、scp、LVM スナップショットなどのバックアップ ユーティリティを使用して、システムのコピーを、できればオフサイトに保存します。
システムが侵害された場合は、以前のバックアップからデータを復元できます。
最後に、システムを安全に保つためにどれだけ多くのセキュリティ対策や逆対策を講じても、マシンが接続され電源がオンになっている限り、100% 完全に安全になることは決してないことを忘れないでください。