23CentOSサーバー強化セキュリティのヒント-パート2


CentOSサーバーを保護および強化する方法に関する前のチュートリアルに続き、この記事では、以下のチェックリストに示されるその他のセキュリティのヒントについて説明します。

  1. 20 CentOS Server Hardening Security Tips – Part 1

21.役に立たないSUIDおよびSGIDコマンドを無効にする

setuidビットとsetgidビットがバイナリプログラムに設定されている場合、これらのコマンドは、深刻なセキュリティ問題を引き起こす可能性のある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文字を超える文字と、1111などの3つを超える同一の連続する文字を含めることはできません。

すべてのクラスの文字を含め、ユーザーに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シェルにアクセスできないようにするには、次のコマンドを発行して、ルートシェルを/ etc/passwdファイルの/ usr/sbin/nologinまたは/ bin/falseに変更します。

# usermod -s /bin/false username

新しいユーザーを作成するときにシェルを変更するには、次のコマンドを発行します。

# useradd -s /usr/sbin/nologin username

29.仮想ユーザーコンソールをvlockでロックする

vlockは、Linuxコンソールで1つの複数のセッションをロックするために使用されるプログラムです。プログラムをインストールし、以下のコマンドを実行してターミナルセッションのロックを開始します。

# yum install vlock
# vlock

30.一元化されたシステムを使用してアカウントと認証を管理する

一元化された認証システムを使用すると、アカウントの管理と制御を大幅に簡素化できます。このタイプのアカウント管理を提供できるサービスは、IPAサーバー、LDAP、Kerberos、Microsoft Active Directory、Nis、Samba ADS、またはWinbindです。

これらのサービスの一部は、デフォルトで、暗号化プロトコルとKerberosなどの対称鍵暗号化によって高度に保護されています。

31.USBメディアの強制読み取り専用マウント

blockdevユーティリティを使用すると、すべてのリムーバブルメディアを読み取り専用として強制的にマウントできます。たとえば、次の内容の/etc/udev/rules.d/ディレクトリに80-readonly-usb.rulesという名前の新しいudev構成ファイルを作成します。

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経由のルートログインを防ぐには、ファイル/ etc/ssh/sshd_configを編集して、次の行を追加します。

PermitRootLogin no

33. POSIXACLを使用してシステム権限を拡張する

アクセス制御リストでは、複数のユーザーまたはグループのアクセス権を定義したり、プログラム、プロセス、ファイル、およびディレクトリのアクセス権を指定したりできます。ディレクトリにACLを設定すると、その子孫は同じ権限を自動的に継承します。

例えば、

# setfacl -m u:user:rw file
# getfacl file

34.SELinuxをEnforceモードでセットアップする

Linuxカーネルに対するSELinuxの拡張機能は、強制アクセス制御(MAC)ポリシーを実装し、ユーザーがすべてのユーザー、プログラム、プロセス、ファイル、およびデバイスにきめ細かいアクセス許可を提供するセキュリティポリシーを定義できるようにします。

カーネルのアクセス制御の決定は、認証されたユーザーIDではなく、セキュリティに関連するすべてのコンテキストに基づいています。

Selinuxステータスを取得してポリシーを適用するには、以下のコマンドを実行します。

# getenforce
# setenforce 1
# sestatus

35.SELinux追加ユーティリティをインストールします

policycoreutilsをインストールします-SELinuxを操作するための追加のPythonユーティリティ(audit2allow、audit2why、chcat、およびsemanage)を提供するpythonパッケージ。

すべてのブール値を簡単な説明とともに表示するには、次のコマンドを使用します。

# semanage boolean -l

たとえば、httpd_enable_ftp_serverの値を表示および設定するには、次のコマンドを実行します。

# getsebool httpd_enable_ftp_server

次の例に示すように、ブール値を再起動後も保持するには、setseboolに -P オプションを指定します。

# 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.conf.all.forwarding=0
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 Repositoriesが提供するvpncコマンドラインユーティリティのインストール)などの独自のソリューションを使用して構成できます。

40.外部システムスキャンを実行します

次のような特定のツールを使用して、LAN上のリモートポイントからシステムをスキャンすることにより、システムのセキュリティの脆弱性を評価します。

  1. Nmap – network scanner 29 Examples of Nmap Command
  2. Nessus – security scanner
  3. OpenVAS – used to scan for vulnerabilities and for comprehensive vulnerability management.
  4. Nikto – an excellent common gateway interface (CGI) script scanner Scan Web Vulnerability in Linux

41.システムを内部的に保護する

ウイルス、ルートキット、マルウェアに対する内部システム保護を使用し、グッドプラクティスとして、次のような不正なアクティビティ(DDOS攻撃、ポートスキャン)を検出できる侵入検知システムをインストールします。

  1. AIDE – Advanced Intrusion Detection Environment – http://aide.sourceforge.net/
  2. ClamAV – Antivirus Scanner https://www.clamav.net
  3. Rkhunter – Rootkit Scanner
  4. Lynis – Security Auditing and Scanning Tool for Linux
  5. Tripwire – Security and Data Integrity http://www.tripwire.com/
  6. Fail2Ban – Intrusion Network Prevention
  7. OSSEC – (HIDS) Host-based Intrusion Detection System http://ossec.github.io/
  8. Mod_Security – Protect Brute Force or DDoS Attacks

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%完全に安全になることは決してないことを忘れないでください。