Linux/CentOS サーバー セキュリティ構成の一般ガイド

Linux/CentOS サーバー セキュリティ構成の一般ガイド

Linux はオープン システムです。インターネット上には、既成のプログラムやツールが多数存在します。これは、Linux システムに侵入したり、Linux システム上の重要な情報を盗んだりするためのプログラムやツールを簡単に見つけることができるため、ユーザーにとってもハッカーにとっても便利です。ただし、Linux のさまざまなシステム機能を慎重に設定し、必要なセキュリティ対策を講じていれば、ハッカーが悪用する機会はなくなります。

一般的に、Linux システムのセキュリティ設定には、不要なサービスのキャンセル、リモート アクセスの制限、重要なデータの非表示、セキュリティ ホールの修正、セキュリティ ツールの使用、定期的なセキュリティ チェックなどが含まれます。

この記事は参考までに実践的な操作です。IPスプーフィングなどの原理は関係ありませんし、数行のコマンドでセキュリティ上の問題を防ぐことはできません。

ここでは Linux システムにおける基本的なセキュリティ強化方法のみを紹介しており、新しいコンテンツは後で追加される予定です。

注意: 変更する前にすべてのファイルをバックアップする必要があります。

cp /etc/passwd{,.dist}

1. Linuxで未使用のユーザーを無効にする

注意: 直接削除することは推奨されません。ユーザーが必要になったときに、自分で再度追加するのは面倒です。 usermod -Lまたはpasswd -l userを使用してロックすることもできます。

cp /etc/passwd{,.bak}変更する前にバックアップする

vi /etc/passwdユーザーを編集し、先頭に # を追加してこの行をコメントアウトします。

コメントのユーザー名:

# cat /etc/passwd|grep ^#
#adm:x:3:4:adm:/var/adm:/sbin/ログインなし
#lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
#シャットダウン:x:6:0:シャットダウン:/sbin:/sbin/シャットダウン
#停止:x:7:0:停止:/sbin:/sbin/停止
#uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
#オペレータ:x:11:0:オペレータ:/root:/sbin/nologin
#games:x:12:100:games:/usr/games:/sbin/nologin
#ゴーファー:x:13:30:ゴーファー:/var/ゴーファー:/sbin/nologin
#ftp:x:14:50:FTP ユーザー:/var/ftp:/sbin/nologin
#nfsnobody:x:65534:65534:匿名 NFS ユーザー:/var/lib/nfs:/sbin/nologin
#postfix:x:89:89::/var/spool/postfix:/sbin/nologin

Linux 注釈付きグループ:

# cat /etc/group|grep ^#
#adm:x:4:adm、デーモン
#lp:x:7:デーモン
#uucp:x:14:
#ゲーム:x:20:
#ゴーファー:x:30:
#ビデオ:x:39:
#ディップ:x:40:
#ftp:x:50:
#オーディオ:x:63:
#フロッピー:x:19:
#postfix:x:89:

2. Linuxは使われていないサービスをシャットダウンする

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

会社のメールサーバーを使用したメールサービス:

サービス pos​​tfix 停止
chkconfig postfix --level 2345 オフ

汎用 Unix 印刷サービス。サーバーには役立ちません。

サービスカップが止まる
chkconfig cups --level 2345 オフ

電力を節約するために CPU 速度を調整します。一般的にラップトップで使用されます。

サービスCPUスピード停止
chkconfig cpuspeed --level 2345 オフ

Bluetooth ワイヤレス通信。サーバーには役立ちません。

サービス Bluetooth 停止
chkconfig bluetooth --level 2345 オフ

システムのインストール後の初期設定。システムの初回起動後は役に立ちません。

サービスfirstboot停止
chkconfig firstboot --level 2345 オフ

Linux は NFS サービスとクライアントをシャットダウンします:

サービスnetfs停止
chkconfig netfs --level 2345 オフ
サービスnfslock停止
chkconfig nfslock --level 2345 オフ

サービスを復元する場合は、次の操作を実行できます。

サービス acpid 開始 && chkconfig acpid オン

セットアップツールを使用して設定することもできます

3. LinuxでIPV6を無効にする

IPv6 は IPv4 アドレス枯渇の問題を解決するために設計されていますが、当社のサーバーでは通常 IPv6 は使用されません。逆に、IPv6 を無効にすると、ネットワークが高速化されるだけでなく、管理オーバーヘッドが削減され、セキュリティ レベルが向上します。以下の手順では、CentOS で ipv6 を完全に無効にします。

Linux は IPv6 モジュールの読み込みを禁止しています:

システムが ipv6 関連モジュールをロードしないようにするには、 modprobe関連の設定ファイルを変更する必要があります。管理の便宜上、次の内容の新しい設定ファイル/etc/modprobe.d/ipv6off.confを作成します。

エイリアス net-pf-10 オフ
オプション ipv6 無効=1

Linux は IPv6 ベースのネットワークを無効にして、起動しないようにします。

# vi /etc/sysconfig/ネットワーク
NETWORKING_IPV6=いいえ

Linux はネットワーク カードの IPv6 設定を無効にして、IPv4 モードでのみ実行されるようにします。

# vi /etc/sysconfig/ネットワークスクリプト/ifcfg-eth0
IPV6INIT=いいえ
IPV6_AUTOCONF=いいえ

Linux は ip6tables をオフにします:

# chkconfig ip6tables をオフにする

システムを再起動して、変更が有効になっているかどうかを確認します。

# lsmod | grep ipv6
# ifconfig | grep -i inet6

出力がない場合は IPv6 モジュールが無効になっており、出力がある場合は有効になっています。

4. Linux iptablesルール

不正なプログラムによるアクセスを防ぐために Linux ファイアウォールを有効にします。 iptable ルールを使用して、受信パケット、送信パケット、転送パケットをフィルタリングします。送信元アドレスと宛先アドレスに基づいて、特定の UDP/TCP ポートへのアクセスを許可または拒否できます。

ファイアウォール設定の詳細については、ブログ投稿の iptables 設定の例を参照してください。

5. Linux SSHセキュリティ

可能であれば、まず最初に、ssh のデフォルト ポート 22 を変更します。20002 などの大きなポートに変更すると、セキュリティ要素が大幅に向上し、ssh クラッキング ログインの可能性が減少します。

crmやシステム管理ユーザーsysmgrなどの識別可能なアプリケーションユーザーを作成します。

# ユーザー追加 crm -d /apps/crm
# パスワードcrm

# ユーザー追加システムマネージャ
# パスワード システムマネージャ

5.1 Linuxでは、wheelグループのユーザーのみがsuに切り替えることができます。

# usermod -G ホイールsysmgr

# vi /etc/pam.d/su
# ユーザーが「wheel」グループに所属することを要求するには、次の行のコメントを解除します。
認証が必要です pam_wheel.so use_uid

他のユーザーが root に切り替えると、正しいパスワードを入力しても、su: 不正なパスワードというプロンプトが表示されます。

5.2 Linux ログインタイムアウト

ユーザーが 5 分間何も操作せずにオンラインになると、接続が切断されます。/etc/profile に以下を追加します。

エクスポート TMOUT=300
読み取り専用 TMOUT

5.3 Linuxはrootによるリモートログインを禁止している

# vi /etc/ssh/sshd_config
PermitRootLogin いいえ

5.4 Linuxは失敗したログインとロックの回数を制限する

/etc/pam.d/loginの後に追加

auth required pam_tally2.so deny=6 unlock_time=180 even_deny_root root_unlock_time=180

ログインに5回失敗すると、システムは180秒間ロックされます。必要に応じてrootを含めるかどうかを設定できます。

5.5 Linux ログイン IP 制限

(固定IPまたはIPセグメントにバインドする必要があるため、まだ設定されていません)

より厳しい制限は、sshd_config で ssh に許可されるユーザーと送信元 IP アドレスを定義することです。

## 許可された ssh ユーザー sysmgr
AllowUsers [email protected].*
または、tcpwrapper を使用します。

vi /etc/hosts.deny
sshd:すべて
vi /etc/hosts.allow
sshd:172.29.73.23
sshd:172.29.73。

6. Linuxの設定ではログインにキーファイルのみ使用可能

単純なパスワード認証の代わりにキー ファイルを使用すると、セキュリティも大幅に向上します。

[dir@ユーザー名 ~]$ ssh-keygen -t rsa -b 2048
公開/秘密 RSA キー ペアを生成しています。
キーを保存するファイル (/root/.ssh/id_rsa) を入力してください: // デフォルト パス、Enter キーを押しますパスフレーズを入力してください (パスフレーズがない場合は空白): // キー フレーズを入力します。ログイン時に使用します同じパスフレーズをもう一度入力します: 
あなたの識別情報は /root/.ssh/id_rsa に保存されました。
公開鍵は /root/.ssh/id_rsa.pub に保存されました。
キーのフィンガープリントは次のとおりです。
3e:fd:fc:e5:d3:22:86:8e:2c:4b:a7:3d:92:18:9f:64 ルート@ibpak.tp-link.net
キーのランダムアート画像は次のとおりです。
+--[RSA 2048]----+
| |
…
| o++o..oo..o|
+-----------------+

公開鍵の名前を authorized_key に変更します。

$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

秘密鍵ファイル id_rsa をローカル コンピューターにダウンロードし (識別しやすいように hostname_username_id_rsa に名前を変更)、安全な場所に保存します。今後、ユーザー名ユーザーはこの秘密鍵とパスフレーズを使用してこのホストにログインする必要があります (ユーザー名ユーザー自身のパスワードは使用されなくなります)

さらに、/etc/ssh/sshd_configファイルを変更する必要があります。

注釈を開く

RSA認証はい
公開鍵認証はい
承認済みキーファイル .ssh/authorized_keys

ユーザー名ユーザー (他のユーザー、特に root に切り替えることができるユーザー) は ssh キー ファイルを使用してログインする必要がありますが、他の通常のユーザーはパスワードを使用して直接ログインできます。したがって、sshd_config ファイルの末尾に次のコードを追加する必要があります。

マッチユーザーitsection
    パスワード認証なし

sshdサービスを再起動する

# service sshd restart

さらに、この公開鍵と秘密鍵のペアは、別のマシンに別々に保存する必要があることに注意してください。サーバー上の公開鍵や接続側の秘密鍵 (またはキーフレーズ) を紛失すると、サーバーにログインできなくなり、ルート権限を取得できなくなる可能性があります。

7. Linuxの履歴コマンドレコードを減らす

実行されたコマンド履歴が多ければ多いほど、ある程度はメンテナンスが容易になりますが、セキュリティ上の問題も伴います。

vi /etc/profile

HISTSIZE=1000を見つけて、それをHISTSIZE=50に変更します。

またはhistory,history -c

8. Linuxは特別なファイル権限を強化します

権限のないユーザーが権限を取得できないように、次のファイルに変更不可の属性を追加します。

チャット +i /etc/passwd
チャット +i /etc/shadow
チャット +i /etc/group
チャット +i /etc/gshadow
chattr +i /etc/services #システムのサービスポートリストファイルをロックして、サービスの不正な削除や追加を防止します chattr +i /etc/pam.d/su
チャット +i /etc/ssh/sshd_config

ファイルのプロパティを表示する

lsattr /etc/passwd /etc/shadow /etc/services /etc/ssh/sshd_config

注意: 上記の chattr 権限変更を実行すると、ユーザーを追加または削除できなくなります。

再度ユーザーを追加または削除したい場合は、まず上記の設定を解除する必要があります。ユーザーの追加と削除が完了したら、読み取り専用権限のchattr -i /etc/passwdを解除するなど、上記の操作を再度実行してください。 (読み取り専用にリセットすることを忘れないでください)

9. Linuxは一般的なネットワーク攻撃を防ぐ

サイバー攻撃は、数行の設定だけでは回避できません。以下は、攻撃の可能性を最小限に抑え、攻撃の難易度を上げるための簡単な対策ですが、完全に防ぐことはできません。

9.1 Linux の ping 禁止

ping をブロックする 誰もシステムに ping を実行できない場合、セキュリティは自然に向上し、ping フラッドを効果的に防止できます。これを行うには、/etc/rc.d/rc.local ファイルに次の行を追加します。

# エコー 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

または、iptables を使用して ping を無効にします。

iptables -A 入力 -p icmp --icmp-type 0 -s 0/0 -j ドロップ

他のホストへの ping を許可しない:

iptables -A 出力 -p icmp --icmp-type 8 -j DROP

9.2. LinuxはIPスプーフィングを防止する

IP スプーフィング攻撃を防ぐには、/etc/host.conf ファイルを編集して次の行を追加します。

order hosts,bind #名前の解釈 ordermulti on #ホストが複数のIPアドレスを持つことを許可するnospoof on #IPアドレスのスプーフィングを禁止する

9.3 LinuxはDoS攻撃を防ぐ

DoS タイプの攻撃は、システムのすべてのユーザーに対して、プロセスの最大数やメモリ使用量などのリソース制限を設定することで防止できます。
/etc/security/limits.conf に次の行を追加できます。

* ソフトコア 0
* ソフト nproc 2048
* ハード nproc 16384
* ソフトノーファイル 1024
* ハードnofile 65536

core 0 はコアファイルの作成が禁止されていることを意味します。nproc nproc 128プロセスの最大数を 20 に制限します。nofile nofile 64ユーザーが同時に開くことができるファイルの最大数を 64 に制限します。* は、root を除くシステムにログインしているすべてのユーザーを意味します。

次に、/etc/pam.d/login ファイルを編集して、次の行が存在するかどうかを確認する必要があります。

session required pam_limits.so

limits.confパラメータの値は、特定の状況に応じて調整する必要があります。

10. Linuxは既知のセキュリティ脆弱性を修正

Linux では、 udevheartbleedshellshockghostなどの破壊的な脆弱性が時折発生することがあります。サーバーが外部ネットワークに公開されている場合は、時間内に修復する必要があります。

11. Linuxログセキュリティチェックを定期的に行う

侵入者がローカル ログを簡単に変更できないように、ログを専用のログ サーバーに移動します。以下は、一般的な Linux のデフォルトのログ ファイルとその用途です。

/var/log/message – システムログまたは現在のアクティビティログを記録します。
/var/log/auth.log – 認証ログ。
/var/log/cron – Crond ログ (cron ジョブ)。
/var/log/maillog – メール サーバーのログ。
/var/log/secure – 認証ログ。
/var/log/wtmp ログイン、ログアウト、起動、シャットダウンの履歴ログ。lastb コマンドを使用すると、ログインに失敗したユーザーを表示できます。 /var/run/utmp 現在ログインしているユーザーの情報ログ。w コマンドと who コマンドの情報はここから取得されます。 /var/log/yum.log Yum ログ。

ログを通じて侵入を阻止するには、CentOS の詳細な分析を参照してください。

11.1 Linux への logwatch のインストール

Logwatch Perl を使用して開発されたログ分析ツールです。 Linux ログ ファイルを分析し、関連する処理担当者に電子メールを自動的に送信することができ、カスタマイズも可能です。

Logwatch のメール機能は、ホスト システム独自のメール サーバーを使用してメールを送信するため、システムに sendmail、postfix、Qmail などのメール サーバーをインストールする必要があります。

インストールと設定方法については、ブログ投稿「Linux ログ監視 logwatch」を参照してください。

12. Linux Webサーバーのセキュリティ

Apache や Tomcat などのサーバー側プログラムを設定する際に、セキュリティ上の問題がある場合は、セキュリティ強化のためのドキュメントを参照することができます。今後時間があるときに新しい記事を追加していきます。

Linuxサーバーのセキュリティ構成ソリューションの詳細については、以下の関連記事を参照してください。

以下もご興味があるかもしれません:
  • 安全なLinuxサーバーを構築する方法を教えます
  • Linux VPS セキュリティ設定 1: SSH ポートの変更 (CentOS/Debian)
  • Linux サーバーの基本セキュリティ設定マニュアル
  • Linux で Nginx の SSL 証明書を構成する方法
  • Linux SSH セキュリティ ポリシー SSH ポートの変更
  • Server Security Dog Linux 版ソフトウェアのインストール手順
  • Linux サーバーでの PHPCMS v9 セキュリティ構成の詳細な説明
  • Linuxサーバセキュリティ強化シェルスクリプトコード
  • Linux サーバーのセキュリティ構成
  • Alibaba Cloud Linux サーバーで iptables を使用してセキュリティ ポリシーを設定する方法
  • Linux サーバーでの nginx セキュリティ構成の詳細な説明
  • Linux Apache サーバーシステムのセキュリティ設定と最適化
  • Red Hat Linuxのセキュリティ設定
  • CentOS 5.1 でのセキュリティ設定 (すべての Linux バージョンに適しています)
  • Linux VPSのセキュリティ設定2: ROOTアカウントを無効にする
  • Linux SSHセキュリティポリシーがIPログイン方法を制限
  • セキュリティテスト: Unix および Linux サーバーのセキュリティ設定の開始
  • Linux での Apache と PHP のセキュリティ設定に関するヒント

<<:  JavaScriptを使用してSMS認証コード間隔を送信する機能を実装する

>>:  mysql init_connect に関するいくつかの重要なポイントの要約

推薦する

flex-grow、flex-shrink、flex-basis、9グリッドレイアウトを理解する

1. flex-grow、flex-shrink、flex-basis プロパティflex-grow...

MySQLで判定文を書く方法のまとめ

MySQL で判断文を書く方法:方法1. CASE関数case関数の構文: CASE条件 値1の場合...

MySQL 8.0.12 のインストールと設定方法のグラフィックチュートリアル

MySQL 8.0.12のインストールと設定方法を記録してみんなで共有します。 1. インストール1...

nodejs + koa + typescript の統合と自動再起動に関する問題

目次バージョンノートプロジェクトを作成する依存関係をインストールするコンテンツの記入src/serv...

WindowsにOpenSSHをインストールし、SSHキーを生成してLinuxサーバーにログインします。

SSH の正式名称は Secure SHell です。 SSH を使用すると、送信されるすべてのデ...

CSS3 アニメーション – ステップ機能の説明

最近、CSS3 アニメーションのソース コードの実装をいくつか見ていたところ、CSS コード アニメ...

Reactのdiffアルゴリズムの詳細な分析

Reactのdiffアルゴリズムの理解diffアルゴリズムは、 Virtual DOMの変更された部...

Dockerの一般的なコマンドとヒントのまとめ

インストールスクリプトUbuntu / CentOS Debian のインストールに問題があるようで...

CentOS 8.4 での Docker パッケージのオフラインインストールの問題について

使用する仮想マシンは、サーバー環境をシミュレートする CentOS 8.4 です。外部ネットワークに...

DHTML オブジェクト (さまざまな HTML オブジェクトの共通プロパティ)

!DOCTYPE HTML ドキュメントが準拠するドキュメント型定義 (DTD) を指定します。 ...

node.js チュートリアルの Util モジュールの例の詳細な説明

目次タイプ判定から始める厳格な平等エラーファーストと約束デバッグと出力タイプ判定から始めるJavaS...

イラスト風ウェブサイトホームページデザイン ウェブサイトデザインの新トレンド

視覚効果が非常に美しく、訪問者に強い印象を残すことがわかります。さらに、重要なポイントが強調され、訴...

MySQLはフィールドからカンマ区切りの値を取り出して新しいフィールドを形成します

1例: 図1のフィールドを図2に分割するには アカウントIDを選択、 サブストリングインデックス(サ...

Linux でファイルの作成時間を取得する方法と実践的なチュートリアル

背景ファイルの作成時刻を取得する必要がある場合があります。例えば: 「xtrabackup スキーマ...