![画像](https://habrastorage.org/getpro/habr/post_images/585/18b/a98/58518ba9884cfa5c4bc1cd9053ef5b4d.png)
セキュリティに注意を払い、システムを定期的に更新することもできますが、通常これでは十分ではありません。 したがって、本日は、CentOS 7の例でLinuxベースのシステムのセキュリティを向上させるための12のヒントを共有します。
端子保護
システムのセキュリティを強化するために、特定の端末の使用をrootユーザーに制限することにより、システムへのコンソールアクセスを保護できます。 これを行うには、スーパーユーザーが
/etc/securetty
使用できる端末を指定し
/etc/securetty
。
必須ではありませんが、スーパーユーザーが1つの端末からのみログインし、残りを他のユーザーに残すことをお勧めします。
パスワードリマインダー
今日では、複雑なパスワードが絶対に必要です。 ただし、パスワードが定期的に変更される場合はさらに優れています。 忘れがちなので、パスワードの有効期間やパスワードの変更時期を思い出させるために、何らかのシステムメカニズムを使用するとよいでしょう。
このようなリマインダーを整理する方法は2つあります。 1つ目は
chage
コマンドを使用すること、2つ目は必要なデフォルト値を
/etc/login.defs
に設定することです。
chage
コマンドの呼び出しは次のようになります。
$ chage -M 20 likegeeks
ここでは、
-M
を使用して、パスワードの有効期限を日数で設定します。
キーなしでこのコマンドを使用すると、必要な値を入力するようになります。
$ chage likegeeks
2番目の方法は、/
/etc/login.defs
ファイルを変更することです。 興味のある値がどのように見えるかの例を次に示します。 必要なものに変更できます。
PASS_MAX_DAYS 10 PASS_MIN_DAYS 0 PASS_WARN_AGE 3
管理者の役割を果たしている場合は、ユーザーに複雑なパスワードを使用するように奨励する必要があることに注意してください。 これはpam_cracklibを使用して実行できます。
このプログラムをインストールした後、/
/etc/pam.d/system-auth
/
/etc/pam.d/system-auth
/
/etc/pam.d/system-auth
移動して、次のように入力できます。
password required pam_cracklib.so minlen=12 lcredit=-1 ucredit=-1 dcredit=-2 ocredit=-1
須藤通知
sudo
、一方では生活を楽にし、他方では、取り返しのつかない結果をもたらす可能性のあるLinuxセキュリティの問題を引き起こす可能性があります。
sudo
設定は
/etc/sudoers
ファイルに保存されます。 このファイルを使用すると、通常のユーザーがスーパーユーザーに代わって特定のコマンドを実行することを防ぐことができます。 さらに、上記のファイルに以下を追加することにより、使用時に
sudo
に電子メールを送信させることができます。
mailto yourname@yourdomain.com
また、
mail_always
プロパティを
on
設定する必要があります。
mail_always on
SSH保護
Linuxのセキュリティについて話している場合は、SSHサービスについても検討する必要があります。 SSHは重要なシステムサービスであり、システムにリモートで接続できます。また、問題が発生した場合に状況を保存する唯一の方法である場合があるため、SSHの無効化については説明しません。
ここではCentOS 7を使用しているため、SSH構成ファイルは
etc/ssh/sshd_config
ます。 攻撃者が使用するスキャナーまたはボットは、デフォルトのポート22を使用してSSHに接続しようとします。
標準のSSHポートを、たとえば
5555
などの別の未使用のポートに変更するのが一般的です。 SSHポートは、構成ファイルで目的のポート番号を設定することで変更できます。 たとえば、次のように:
Port 5555
さらに、
PermitRootLogin
パラメーター値を
no
変更することにより、rootユーザーへのSSHログインを制限できます。
PermitRootLogin no
そして、もちろん、パスワード認証を無効にし、代わりに公開鍵と秘密鍵を使用する価値があります。
PasswordAuthentication no PermitEmptyPasswords no
次に、SSHタイムアウトについて説明します。 タイムアウトの問題は、いくつかのパラメーターを設定することで解決できます。 たとえば、次の設定は、接続をサポートするパケットが指定された秒数後に自動的に送信されることを意味します。
ServerAliveInterval 15 ServerAliveCountMax 3 TCPKeepAlive yes
これらのパラメーターを設定することにより、接続時間を延長できます。
ClientAliveInterval 30 ClientAliveCountMax 5
SSHの使用を許可するユーザーを指定できます。
AllowUsers user1 user2
グループレベルで権限を割り当てることもできます。
AllowGroup group1 group2
Google認証システムを使用したSSH保護
さらに信頼性の高いSSH保護を実現するには、たとえば、Google認証システムを使用するなど、2要素認証を使用できます。 これを行うには、まず適切なプログラムをインストールする必要があります。
$ yum install google-authenticator
次に、インストールを検証するために実行します。
$ google-authenticator
また、携帯電話にGoogle認証システムアプリをインストールする必要があります。
ファイル
/etc/pam.d/sshd
を編集して、以下を追加します。
auth required pam_google_authenticator.so
あとは、
/etc/ssh/sshd_config
ファイルに次の行を追加して、このSSHをすべて報告するだけです。
ChallengeResponseAuthentication yes
次に、SSHを再起動します。
$ systemctl restart sshd
SSHを使用してログインしようとすると、確認コードの入力を求められます。 その結果、システムへのSSHアクセスは以前よりもはるかによく保護されます。
Tripwireによるファイルシステムの監視
Tripwireは、Linuxセキュリティを強化するための優れたツールです。 これは侵入検知システム(HIDS)です。
Tripwireの目標は、ファイルシステムのアクティビティを追跡し、ファイルを変更したユーザーと、これらの変更がいつ発生したかを追跡することです。
Tripwireをインストールするには、EPELリポジトリにアクセスする必要があります。 これは簡単なタスクであり、次のコマンドで解決できます。
wget http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm $ rpm -ivh epel-release-7-9.noarch.rpm
EPELリポジトリをインストールした後、Tripwireをインストールできます。
$ sudo yum install tripwire
次に、キーファイルを作成します。
$ tripwire-setup-keyfiles
キーファイルの複雑なパスワードを入力するように求められます。 その後、/
/etc/tripwire/twpol.txt
ファイルを変更してTripwireを構成できます。 各行には意味のあるコメントが付いているため、このファイルを操作するのは難しくありません。
プログラムの構成が完了したら、初期化する必要があります。
$ tripwire --init
システムのスキャン中の初期化には、ファイルのサイズに応じて時間がかかります。
保護されたファイルへの変更はすべて侵入とみなされ、管理者はこれについて通知されます。管理者は、発信元を疑わないファイルを使用してシステムを復元する必要があります。
このため、Tripwireを使用して必要なシステム変更を確認する必要があります。 これを行うには、次のコマンドを使用します。
$ tripwire --check
そして、Tripwireに関する別の推奨事項を次に示します。
twpol.txt
および
twcfg.txt
保護し
twcfg.txt
。 これにより、システムのセキュリティが向上します。
Tripwireには多くのオプションと設定があります。 次のようにヘルプを表示できます。
man tripwire
Firewalldを使用する
Firewalldは
iptables
代替品であり、このプログラムはLinuxネットワークのセキュリティを改善します。 Firewalldを使用すると、現在の接続を停止せずに設定を変更できます。 ファイアウォールは、再起動せずにルールを追加および変更できるサービスとして機能し、ネットワークゾーンを使用します。
firewalld
が現在実行されているかどうかを確認するには、次のコマンドを入力します。
$ firewall-cmd --state
![](https://habrastorage.org/getpro/habr/post_images/8c3/eef/430/8c3eef43077e4f888930b7d316a45e91.png)
次のように、事前定義されたネットワークゾーンを表示できます。
$ firewall-cmd --get-zones
![](https://habrastorage.org/getpro/habr/post_images/9bb/173/2d4/9bb1732d485f15170d6ec3a57b0ce34c.png)
これらの各ゾーンには一定の信頼度があります。
この値は次のように更新できます。
$ firewall-cmd --set-default-zone=<new-name>
次のようにして、特定のゾーンに関する詳細情報を取得できます。
$ firewall-cmd --zone=<zone-name> --list-all
次のコマンドを使用して、サポートされているすべてのサービスのリストを表示できます。
$ firewall-cmd --get-services
![](https://habrastorage.org/getpro/habr/post_images/37d/7b2/8a1/37d7b28a1543007a6fe2df33d0635a48.png)
次に、新しいサービスをゾーンに追加するか、既存のサービスを削除できます。
$ firewall-cmd --zone=<zone-name> --add-service=<service-name> $ firewall-cmd --zone=<zone-name> --remove-service=<service-name>
任意のゾーンで開いているすべてのポートに関する情報を表示できます。
$ firewall-cmd --zone=<zone-name> --list-ports
次のように、ゾーンにポートを追加して削除できます。
$ firewall-cmd --zone=<zone-name> --add-port=<port-number/protocol> $ firewall-cmd --zone=<zone-name> --remove-port=<port-number/protocol>
以下を構成およびポート転送できます。
$ firewall-cmd --zone=<zone-name> --add-forward-port=<port-number> $ firewall-cmd --zone=<zone-name> --remove-forward-port=<port-number>
Firewalldは非常に高度なツールです。 最も注目すべき点は、たとえば、設定を変更するときに、サービスを再起動または停止せずに正常に機能することです。 これにより、同様の状況でサービスを再起動する必要がある場合、
iptables
ツールと区別されます。
firewalldからiptablesへの移行
一部の人々は、firewalld
firewalld
よりも
iptables
ファイアウォールを好んでいます。
firewalld
を使用しているが、
iptables
に戻りたい場合、これは非常に簡単です。
最初に
firewalld
無効にします。
$ systemctl disable firewalld $ systemctl stop firewalld
次に、
iptables
インストールします。
$ yum install iptables-services $ touch /etc/sysconfig/iptables $ touch /etc/sysconfig/ip6tables
これで、
iptables
サービスを開始できます。
$ systemctl start iptables $ systemctl start ip6tables $ systemctl enable iptables $ systemctl enable ip6tables
このすべての後、コンピューターを再起動します。
コンパイラーの制限
攻撃者は自分のコンピューターでエクスプロイトをコンパイルし、関心のあるサーバーにアップロードできます。 当然、このアプローチでは、サーバー上のコンパイラの存在は役割を果たしません。 ただし、最新のサーバー管理システムの場合のように、作業にコンパイラーを使用しない場合は、コンパイラーを制限することをお勧めします。
開始するには、パッケージからすべてのコンパイラバイナリをリストし、それらのアクセス許可を設定します。
$ rpm -q --filesbypkg gcc | grep 'bin'
![](https://habrastorage.org/getpro/habr/post_images/9fc/72f/b79/9fc72fb798e2f00c8b59acc18506340c.png)
新しいグループを作成します。
$ groupadd compilerGroup
次に、コンパイラバイナリグループを変更します。
$ chown root:compilerGroup /usr/bin/gcc
そしてもう1つ重要なことです。 これらのバイナリファイルのアクセス許可を変更する必要があります。
$ chmod 0750 /usr/bin/gcc
これで、
gcc
を使用しようとするユーザーはエラーメッセージを受け取ります。
ファイル変更防止
不変ファイルは、root権限があっても、どのユーザーでも上書きできません。 ユーザーは、イミュニティフラグが設定されるまでそのようなファイルを変更または削除できません。イミュニティフラグはルートユーザーのみが削除できます。
この機能は、システムを混乱させる可能性のあるエラーから、スーパーユーザーとしてあなたを保護することに気付くのは簡単です。 このアプローチを使用すると、構成ファイルまたはその他のファイルを必要に応じて保護できます。
ファイルを無効にするには、
chattr
コマンドを使用します。
$ chattr +i /myscript
![](https://habrastorage.org/getpro/habr/post_images/689/d33/d33/689d33d33d8499705ded76f405469b63.png)
immunity属性は、次のコマンドで削除できます。
$ chattr -i /myscript
![](https://habrastorage.org/getpro/habr/post_images/c02/86f/9be/c0286f9be0e80f8438d802a701855e69.png)
この方法でファイルを保護できますが、この方法でバイナリシステムファイルを処理した場合、イミュニティフラグをクリアするまでそれらを更新できないことに注意してください。
aureportを使用したSELinuxの管理
多くの場合、SELinuxの強制アクセス制御はデフォルトでオフになっています。 これはシステムのパフォーマンスに影響を与えず、SELinuxでの作業は非常に困難です。 ただし、セキュリティを強化するために、SELinuxを有効にし、
aureport
を使用してこのメカニズムの管理を
aureport
できます。
aureport
ユーティリティを使用すると、監査ログファイルに基づいてレポートを作成できます 。
$ aureport --avc
![](https://habrastorage.org/getpro/habr/post_images/264/fc1/98b/264fc198b0589c5e0267a4d220ad0b9b.png)
実行可能ファイルのリストは、次のコマンドで表示できます。
$ aureport -x
![](https://habrastorage.org/getpro/habr/post_images/e09/199/44b/e0919944bd5b0d3f8b8362eba9fc1534.png)
aureport
を使用して、完全な認証レポートを作成できます。
$ aureport -au -i
![](https://habrastorage.org/getpro/habr/post_images/99d/147/ee6/99d147ee682741d4bb2a9d61b9a431dd.png)
失敗した認証試行に関する情報を表示することもできます。
$ aureport -au --summary -i --failed
![](https://habrastorage.org/getpro/habr/post_images/e02/eba/256/e02eba2566aa4a6c4c669a2a6c658df1.png)
または、成功した認証試行の要約:
$ aureport -au --summary -i --success
![](https://habrastorage.org/getpro/habr/post_images/003/044/6d3/0030446d33e811884334759928374488.png)
aureport
ユーティリティは、SELinuxでの作業を大幅に簡素化します。
シーラートを使用する
aureport
加えて、
aureport
と呼ばれる優れたLinuxセキュリティツールを使用できます。 次のようにインストールできます。
$ yum install setools
これで、/
/var/log/audit/audit.log
ファイルからアラートを発行し、SELinuxによって特定された問題に関する追加情報を提供するツールができました。
次のように使用できます。
$ sealert -a /var/log/audit/audit.log
![](https://habrastorage.org/getpro/habr/post_images/2d3/6bd/c39/2d36bdc39aa41c7ef7ea982676d4644f.png)
ここで最も興味深いのは、アラートで、対応する問題を解決する方法に関するヒントを見つけることができることです。
まとめ
ここに記載されているヒントが、Linuxのインストールをより安全にするのに役立つことを願っています。 しかし、情報を保護することになると、これらまたは他の手段を適用することによって、今はあなたを脅かすものはないと仮定することは不可能です。 セキュリティソフトウェアには、常に注意と注意を払う必要があります。
親愛なる読者! Linuxのセキュリティを改善するための単純だが明らかな方法を知っていますか?