Linuxサーバーのセキュリティ強化の25のヒント


Linuxはデフォルトで安全であり、ある程度の拡張に同意していると誰もが言っています(議論の余地のあるトピックです)。ただし、Linuxにはデフォルトでセキュリティモデルが組み込まれています。より安全なシステムを作るのに役立つかもしれないあなたの必要に応じてそれを調整してカスタマイズする必要があります。 Linuxは管理が困難ですが、柔軟性と構成オプションが豊富です。

ハッカーやクラッカーの手から本番環境でシステムを保護することは、システム管理者にとって困難な作業です。これは、「Linuxボックスを保護する方法」または「Linuxボックスの強化」に関連する最初の記事です。この投稿では、Linuxシステムを保護するための25の役立つヒントとコツについて説明します。以下のヒントとコツが、システムを保護するための拡張に役立つことを願っています。

1.物理システムのセキュリティ

BIOSを構成して、BIOSのCD/DVD、外部デバイス、フロッピードライブからの起動を無効にします。次に、BIOSパスワードを有効にし、GRUBをパスワードで保護して、システムの物理アクセスを制限します。

  1. Set GRUB Password to Protect Linux Servers

2.ディスクパーティション

災害が発生した場合に備えて、より高いデータセキュリティを確保するには、異なるパーティションを用意することが重要です。異なるパーティションを作成することにより、データを分離してグループ化できます。予期せぬ事故が発生した場合、そのパーティションのデータのみが破損し、他のパーティションのデータは存続します。次の個別のパーティションが必要であり、サードパーティアプリケーションが/ optの下の個別のファイルシステムにインストールされていることを確認してください。

/
/boot
/usr
/var
/home
/tmp
/opt

3.パッケージを最小化して脆弱性を最小化する

本当にあらゆる種類のサービスをインストールしたいですか?パッケージの脆弱性を回避するために、役に立たないパッケージのインストールを回避することをお勧めします。これにより、あるサービスの侵害が他のサービスの侵害につながる可能性があるリスクを最小限に抑えることができます。脆弱性を最小限に抑えるために、サーバーから不要なサービスを見つけて削除または無効にします。ランレベル3で実行されているサービスを見つけるには、「chkconfig」コマンドを使用します。

# /sbin/chkconfig --list |grep '3:on'

不要なサービスが実行されていることがわかったら、次のコマンドを使用してそれらを無効にします。

# chkconfig serviceName off

「yum」または「apt-get」ツールなどのRPMパッケージマネージャーを使用して、システムにインストールされているすべてのパッケージを一覧表示し、次のコマンドを使用してそれらを削除します。

# yum -y remove package-name
# sudo apt-get remove package-name
  1. 5 chkconfig Command Examples
  2. 20 Practical Examples of RPM Commands
  3. 20 Linux YUM Commands for Linux Package Management
  4. 25 APT-GET and APT-CACHE Commands to Manage Package Management

4.リスニングネットワークポートを確認します

「netstat」ネットワークコマンドを使用すると、開いているすべてのポートと関連するプログラムを表示できます。上で述べたように、「chkconfig」コマンドを使用して、システムからの不要なネットワークサービスをすべて無効にします。

# netstat -tulpn
  1. 20 Netstat Commands for Network Management in Linux

5.セキュアシェル(SSH)を使用する

Telnetおよびrloginプロトコルは、セキュリティ違反である暗号化された形式ではなく、プレーンテキストを使用します。 SSHは、サーバーとの通信中に暗号化技術を使用する安全なプロトコルです。

必要な場合を除いて、rootとして直接ログインしないでください。 「sudo」を使用してコマンドを実行します。 sudoは/ etc/sudoersファイルで指定され、VIエディターで開く「visudo」ユーティリティで編集することもできます。

また、デフォルトのSSH22ポート番号を他のより高いレベルのポート番号に変更することをお勧めします。メインのSSH構成ファイルを開き、次のパラメーターをいくつか作成して、ユーザーのアクセスを制限します。

# vi /etc/ssh/sshd_config
PermitRootLogin no
AllowUsers username
Protocol 2
  1. 5 Best Practices to Secure and Protect SSH Server

6.システムを最新の状態に保つ

利用可能な場合は、常に最新リリースのパッチ、セキュリティ修正、カーネルでシステムを最新の状態に保ちます。

# yum updates
# yum check-update

7.ロックダウンcronジョブ

Cronには独自の機能が組み込まれており、ジョブを実行できるユーザーと実行したくないユーザーを指定できます。これは、/ etc /cron.allowおよび/etc/cron.denyと呼ばれるファイルを使用して制御されます。 cronを使用してユーザーをロックするには、cron.denyにユーザー名を追加し、ユーザーがcron.allowファイルでcronaddを実行できるようにします。すべてのユーザーがcronを使用できないようにする場合は、「ALL」行をcron.denyファイルに追加します。

# echo ALL >>/etc/cron.deny
  1. 11 Cron Scheduling Examples in Linux

8.USBスティックを無効にして検出する

多くの場合、データが盗まれるのを防ぎ、保護するために、ユーザーがシステムでUSBスティックを使用することを制限したいことがあります。ファイル「/etc/modprobe.d/no-usb」を作成し、以下の行を追加してもUSBストレージは検出されません。

install usb-storage /bin/true

9.SELinuxをオンにします

Security-Enhanced Linux(SELinux)は、カーネルで提供される強制的なアクセス制御セキュリティメカニズムです。 SELinuxを無効にすることは、システムからセキュリティメカニズムを削除することを意味します。システムがインターネットに接続されていて、一般の人がアクセスしている場合は、削除する前によく考えてから、もう少し考えてください。

SELinuxは、3つの基本的な操作モードを提供します。

  1. Enforcing: This is default mode which enable and enforce the SELinux security policy on the machine.
  2. Permissive: In this mode, SELinux will not enforce the security policy on the system, only warn and log actions. This mode is very useful in term of troubleshooting SELinux related issues.
  3. Disabled: SELinux is turned off.

「system-config-selinux」、「getenforce」、または「sestatus」コマンドを使用して、コマンドラインからSELinuxモードの現在のステータスを表示できます。

# sestatus

無効になっている場合は、次のコマンドを使用してSELinuxを有効にします。

# setenforce enforcing

また、「/ etc/selinux/config」ファイルから管理することもできます。このファイルで有効または無効にできます。

10. KDE / GNOMEデスクトップを削除します

専用のLAMPサーバーでKDEやGNOMEなどのXWindowデスクトップを実行する必要はありません。それらを削除または無効にして、サーバーのセキュリティとパフォーマンスを向上させることができます。単純に無効にするには、ファイル ‘/ etc/inittab‘を開き、実行レベルを3に設定します。システムから完全に削除する場合は、以下のコマンドを使用します。

# yum groupremove "X Window System"

11.IPv6をオフにします

IPv6プロトコルを使用していない場合は、ほとんどのアプリケーションまたはポリシーがIPv6プロトコルを必要とせず、現在サーバーでは必要ないため、IPv6プロトコルを無効にする必要があります。ネットワーク構成ファイルに移動し、次の行を追加して無効にします。

# vi /etc/sysconfig/network
NETWORKING_IPV6=no
IPV6INIT=no

12.ユーザーが古いパスワードを使用することを制限する

これは、ユーザーが同じ古いパスワードを使用できないようにする場合に非常に便利です。古いパスワードファイルは/ etc/security/opasswdにあります。これは、PAMモジュールを使用して実現できます。

RHEL/CentOS/Fedoraの下にある ‘/etc/pam.d/system-auth‘ファイルを開きます。

# vi /etc/pam.d/system-auth

Ubuntu/Debian/LinuxMintで「/etc/pam.d/common-password」ファイルを開きます。

# vi /etc/pam.d/common-password

次の行を「auth」セクションに追加します。

auth        sufficient    pam_unix.so likeauth nullok

次の行を「password」セクションに追加して、ユーザーが自分の最後の5つのパスワードを再利用できないようにします。

password   sufficient    pam_unix.so nullok use_authtok md5 shadow remember=5

最後の5つのパスワードのみがサーバーによって記憶されます。最後の5つの古いパスワードのいずれかを使用しようとすると、次のようなエラーが発生します。

Password has been already used. Choose another.

13.ユーザーのパスワードの有効期限を確認する方法

Linuxでは、ユーザーのパスワードは暗号化された形式で「/ etc/shadow」ファイルに保存されます。ユーザーのパスワードの有効期限を確認するには、「chage」コマンドを使用する必要があります。パスワードの有効期限の詳細と最終パスワード変更日が表示されます。これらの詳細は、ユーザーがいつパスワードを変更する必要があるかを決定するためにシステムによって使用されます。

有効期限などの既存のユーザーのエージング情報を表示するには、次のコマンドを使用します。

#chage -l username

ユーザーのパスワードエージングを変更するには、次のコマンドを使用します。

#chage -M 60 username
#chage -M 60 -m 7 -W 7 userName
  1. -M Set maximum number of days
  2. -m Set minimum number of days
  3. -W Set the number of days of warning

14.アカウントを手動でロックおよびロック解除する

ロックおよびロック解除機能は非常に便利です。システムからアカウントを削除する代わりに、1週間または1か月間ロックすることができます。特定のユーザーをロックするには、followコマンドを使用できます。

# passwd -l accountName

注:ロックされたユーザーは、rootユーザーのみが引き続き使用できます。ロックは、暗号化されたパスワードを(!)文字列に置き換えることによって実行されます。このアカウントを使用してシステムにアクセスしようとすると、次のようなエラーが発生します。

# su - accountName
This account is currently not available.

ロックされたアカウントへのアクセスをロック解除または有効にするには、コマンドasを使用します。これにより、暗号化されたパスワードを持つ(!)文字列が削除されます。

# passwd -u accountName

15.より強力なパスワードの適用

多くのユーザーがソフトパスワードまたは弱いパスワードを使用しており、辞書ベースの攻撃またはブルートフォース攻撃によってパスワードがハッキングされる可能性があります。 「pam_cracklib」モジュールは、PAM(Pluggable Authentication Modules)モジュールスタックで使用できます。これにより、ユーザーは強力なパスワードを設定する必要があります。次のファイルをエディタで開きます。

また読む:

# vi /etc/pam.d/system-auth

そして、クレジットパラメータを使用して行を追加します(それぞれ小文字、大文字、数字などのlcredit、ucredit、dcredit、および/またはocredit)

/lib/security/$ISA/pam_cracklib.so retry=3 minlen=8 lcredit=-1 ucredit=-2 dcredit=-2 ocredit=-1

16. Iptablesを有効にする(ファイアウォール)

Linuxファイアウォールを有効にして、サーバーへの不正アクセスを保護することを強くお勧めします。 iptablesのルールを適用して、着信、発信、および転送パケットをフィルタリングします。特定のudp/tcpポート番号で許可および拒否する送信元アドレスと宛先アドレスを指定できます。

  1. Basic IPTables Guide and Tips

17.InittabでCtrl + Alt + Deleteを無効にします

ほとんどのLinuxディストリビューションでは、「CTRL-ALT-DELETE」を押すと、システムが再起動プロセスになります。したがって、誰かが誤ってこれを行った場合、少なくとも本番サーバーでこのオプションを有効にすることはお勧めできません。

これは ‘/ etc/inittab‘ファイルで定義されています。そのファイルをよく見ると、次のような行が表示されます。デフォルトでは、行はコメント化されていません。コメントアウトする必要があります。この特定のキーシーケンスシグナリングは、システムをシャットダウンします。

# Trap CTRL-ALT-DELETE
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now

18.アカウントの空のパスワードの確認

パスワードが空のアカウントは、ウェブ上の誰もが不正にアクセスできるように開かれていることを意味し、Linuxサーバー内のセキュリティの一部です。したがって、すべてのアカウントに強力なパスワードがあり、誰も許可されたアクセス権を持っていないことを確認する必要があります。空のパスワードアカウントはセキュリティリスクであり、簡単にハッキングされる可能性があります。パスワードが空のアカウントがあるかどうかを確認するには、次のコマンドを使用します。

# cat /etc/shadow | awk -F: '($2==""){print $1}'

19.ログイン前にSSHバナーを表示する

SSH認証の前に、いくつかのセキュリティ警告を含む1つまたは複数のリーガルバナーを用意することをお勧めします。このようなバナーを設定するには、次の記事をお読みください。

  1. Display SSH Warning Message to Users

20.ユーザーアクティビティを監視する

多数のユーザーを処理している場合は、各ユーザーアクティビティとユーザーが消費するプロセスの情報を収集し、後で分析するか、パフォーマンスやセキュリティの問題が発生した場合に分析することが重要です。しかし、ユーザーアクティビティ情報を監視および収集する方法。

「psacct」と「acct」と呼ばれる2つの便利なツールがあり、システム上のユーザーアクティビティとプロセスを監視するために使用されます。これらのツールはシステムバックグラウンドで実行され、Apache、MySQL、SSH、FTPなどのサービスによって消費されるシステムおよびリソースでの各ユーザーアクティビティを継続的に追跡します。インストール、構成、および使用法の詳細については、以下のURLにアクセスしてください。

  1. Monitor User Activity with psacct or acct Commands

21.ログを定期的に確認する

専用のログサーバーにログを移動します。これにより、侵入者がローカルログを簡単に変更できなくなる可能性があります。以下は、一般的なLinuxのデフォルトのログファイル名とその使用法です。

  1. /var/log/message – Where whole system logs or current activity logs are available.
  2. /var/log/auth.log – Authentication logs.
  3. /var/log/kern.log – Kernel logs.
  4. /var/log/cron.log – Crond logs (cron job).
  5. /var/log/maillog – Mail server logs.
  6. /var/log/boot.log – System boot log.
  7. /var/log/mysqld.log – MySQL database server log file.
  8. /var/log/secure – Authentication log.
  9. /var/log/utmp or /var/log/wtmp : Login records file.
  10. /var/log/yum.log: Yum log files.

22.重要なファイルのバックアップ

本番システムでは、重要なファイルのバックアップを取り、災害復旧のために安全保管庫、リモートサイト、またはオフサイトに保管する必要があります。

23.NICボンディング

NICボンディングには2つのタイプのモードがあり、ボンディングインターフェースで言及する必要があります。

  1. mode=0 – Round Robin
  2. mode=1 – Active and Backup

NICボンディングは、単一障害点を回避するのに役立ちます。 NICボンディングでは、2つ以上のネットワークイーサネットカードを結合し、他のサーバーと通信するためのIPアドレスを割り当てることができる単一の仮想インターフェイスを作成します。何らかの理由で1枚のNICカードがダウンしたり利用できなくなったりした場合に、当社のネットワークを利用できます。

24. / bootを読み取り専用のままにします

Linuxカーネルとその関連ファイルは、デフォルトで読み取り/書き込みとして使用される/ bootディレクトリにあります。読み取り専用に変更すると、重要なブートファイルが不正に変更されるリスクが軽減されます。これを行うには、「/ etc/fstab」ファイルを開きます。

# vi /etc/fstab

下部に次の行を追加し、保存して閉じます。

LABEL=/boot     /boot     ext2     defaults,ro     1 2

将来カーネルをアップグレードする必要がある場合は、変更を読み取り/書き込みにリセットする必要があることに注意してください。

25.ICMPまたはブロードキャスト要求を無視する

「/etc/sysctl.conf」ファイルに次の行を追加して、pingまたはブロードキャスト要求を無視します。

Ignore ICMP request:
net.ipv4.icmp_echo_ignore_all = 1

Ignore Broadcast request:
net.ipv4.icmp_echo_ignore_broadcasts = 1

次のコマンドを実行して、新しい設定または変更をロードします

#sysctl -p

上記のリストにある重要なセキュリティまたは強化のヒントを見逃した場合、またはリストに含める必要のあるその他のヒントがある場合。コメントボックスにコメントをドロップしてください。 TecMintは、改善のためのコメント、提案、およびディスカッションを受け取ることに常に関心を持っています。