GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS7サーバー用の15のLinux強化手順

サーバーの強化は、さまざまな方法でサーバーのセキュリティを強化するプロセスです。サーバーを保護するための多くのステップがあります。 Linuxシステムをハッカー、クラッカー、攻撃者から保護することで、自分自身と会社を締め出します。次の手順で、脆弱なボックスを強化されたサーバーに変えることができます。外部からの攻撃を防ぐのに役立ちます。ここでは、CentOSのサーバー強化について説明します。

知っておくべきこと

このガイドでは、CentOS 7のセキュリティを強化するために必要な手順について説明します。システムを強化すると、システムの制限が厳しくなり、問題が発生する可能性があります。トラブルシューティングに使用できる複製仮想マシンを作成することをお勧めします。以下に、プロビジョニングの直後にサーバーを強化するために実行できる基本的な手順のリストを示します。

1。安全なリモートアクセス

リモートメソッドでサーバーにアクセスする場合がありますが、安全性が低い場合は、サーバーを公開できます。 OpenSSHオプションは、/etc/ssh/sshd_configを介して制御されます ファイル。

a。 SSHパスワード認証方式を無効にし、公開鍵認証方式を有効にします

パスワードのリモートログイン方法を無効にし、認証公開鍵を有効にすることが重要です

ChallengeResponseAuthenticationを変更します およびPasswordAuthentication いいえ パスワード方式を無効にするには

PasswordAuthentication no
ChallengeResponseAuthentication no

公開鍵認証を承認する

RSAAuthentication yes
PubkeyAuthentication yes

これで、新しいキーペアを生成できます

# ssh-keygen -t rsa

b。直接ルートログインを無効にする

rootがサーバーに直接ログインできるようにすることはリスクセキュリティです。代わりに、アカウントとしてシステムにログインしてから、su-を実行する必要があります。 rootとしてログインします。したがって、 PermitRootLogin yesを変更する必要があります PermitRootLogin no

PermitRootLogin no

c。デフォルトのSSHリスニングポートを変更します(例:8500)

デフォルトのポートは世界中で知られており、セキュリティ上のリスクがあるため、デフォルトのポートの使用が推奨されない場合があります。使用するポートをパーソナライズすることをお勧めします

port 8500

2。 grubパスワードでブートローダーを保護する

ブートローダーを保護することで、rootとして自動的にログインするシングルユーザーモードへのアクセスを防ぐことができます。これは、デフォルトでプレーンテキストで保存されるパスワードを設定することによってGRUBで行われます。

Debianシステムの場合

# grub-mkpasswd-pbkdf2

Centosの場合

# grub2-mkpasswd-pbkdf2

3。リスニングネットワークポート

ネットワークサービスを構成した後、システムのネットワークインターフェイスで実際にリッスンしているポートに注意を払うことが重要です。開いているポートは、侵入の証拠である可能性があります。

# nmap -sT -O localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2017-06-07 23:13 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000061s latency).
Other addresses for localhost (not scanned): 127.0.0.1
rDNS record for 127.0.0.1: centos-01
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
2049/tcp open nfs

開いているすべてのポートと関連するプログラムを一覧表示するには、以下のコマンドを使用します

# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      1/systemd           
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN   

4。アクセス許可を絞り込む

リスクを制限するために、システムファイルとフォルダの権限を絞り込みます。

# chmod 700 /root
# chmod 700 /var/log/audit
# chmod 740 /etc/rc.d/init.d/iptables
# chmod 740 /sbin/iptables
# chmod -R 700 /etc/skel
# chmod 600 /etc/rsyslog.conf
# chmod 640 /etc/security/access.conf
# chmod 600 /etc/sysctl.conf

5。アカウントの空のパスワードの確認

パスワードが空のアカウントは、ウェブ上の誰もが不正にアクセスできるように開かれていることを意味し、Linuxサーバー内のセキュリティの一部です。パスワードが空のアカウントを確認するには、以下のコマンドを使用します

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

セキュリティのために、空のパスワードアカウントをすべてロックすることをお勧めします:

# passwd -l paul
Locking password for user paul.
passwd: Success

6。カーネルパラメータを調整する

Sysctlは、Linuxオペレーティングシステムのパラメータを調べて動的に変更するためのインターフェイスです。 /etc/sysctl.confを編集します カーネルパラメータを最適化するファイル

Sysctlは、実行時にカーネルパラメータを変更するために使用されるコマンドです。

# sysctl -a
# sysctl -A
# sysctl net.ipv4.conf.all.rp_filter
To load settings, enter: 
# sysctl -p

コピー-次のコンテンツを/etc/sysctl.confに貼り付けます

# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1

# Enable IP spoofing protection
net.ipv4.conf.all.rp_filter=1

# Disable IP source routing
net.ipv4.conf.all.accept_source_route=0

# Ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1

# Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# Disable ICMP routing redirects
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv6.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv6.conf.all.send_redirects=0

# Disables the magic-sysrq key
kernel.sysrq = 0

# Turn off the tcp_sack
net.ipv4.tcp_sack = 0

# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1

# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1

7。不要なサービスを無効にする

実行レベル3の起動時に開始されるシステムの起動から、不要なサービスとデーモン(バックグラウンドで実行されるサービス)をすべて削除する必要があります。 。

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

サービスを無効にするには、次のように入力します。

# service serviceName stop
# chkconfig serviceName off

8。シングルユーザーモードの認証が必要

シングルユーザーモードに入るときは、rootパスワードを要求することをお勧めします。 /etc/sysconfig/initを開きます ファイルを作成し、次の行を追加します:

SINGLE=/sbin/sulogin

9。 Security Enhanced Linux(SELinux)

SELinuxは、どのプロセスがどのファイル、ディレクトリ、ポートなどにアクセスできるかを決定する一連のセキュリティルールです。すべてのファイル、プロセス、ディレクトリ、およびポートには、SELinuxコンテキストと呼ばれる特別なセキュリティラベルがあります。コンテキストは、プロセスがファイル、ディレクトリ、またはポートにアクセスできるかどうかを判断するためにSELinuxポリシーによって使用される単なる名前です。デフォルトでは、ポリシーは相互作用を許可しないため、明示的なルールによってアクセスが許可されます。許可ルールがない場合、アクセスは許可されません。

getenforce コマンドは、SELinuxがどのモードにあるかを教えてくれます。

SELINUX=enforcingを変更することで、SELinuxモードを強制に変更できます。 /etc/sysconfig/selinuxにあります

以下で説明するように、このファイルには3つのディレクティブがあります。

  • 実施: SELinuxセキュリティポリシーが適用されます。
  • 許容: SELinuxは、強制する代わりに警告を出力します。
  • 無効: SELinuxは完全に無効になっています。

コマンドでSELinuxのステータスを確認できます

# sestatus
SELinux status: disabled

無効になっていることがわかります。有効にするには、

を使用できます
# setenforce enforcing

10。 iptablesを使用してファイアウォールを設定する

iptablesは、システム管理者がLinuxカーネルファイアウォールによって提供されるテーブルと、それが格納するチェーンおよびルールを構成できるようにするユーザースペースアプリケーションプログラムです。

a。不要なポートをすべて閉じます

iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP

b。不正なIPをブロックする

iptables -A INPUT -s IP_ADDRESS -j DROP

c。ネットワークインターフェイスへの接続をブロックする

特定のIPアドレスから特定のネットワークインターフェースへの接続をブロックするには、コマンド

を使用します
# iptables -A INPUT -i ens0 -s 6.6.6.6 -j DROP

d。 iptablesルールを一覧表示する

コマンドですべてのiptablesルールを確認できます

iptables -L -n -v

11。ファイルシステムの確認

SUID / SGID実行可能ファイルにセキュリティ上の問題がある場合、すべてのSUID/SGIDビット対応ファイルが悪意のあるアクティビティに使用される可能性があります。すべてのローカルまたはリモートユーザーがそのようなファイルを使用できます。

a。不要なSUIDおよびSGIDバイナリを特定する

find / \( -perm -4000 -o -perm -2000 \) -print
find / -path -prune -o -type f -perm +6000 -ls

b。世界で書き込み可能なファイルを特定する

find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

c。孤立したファイルとフォルダを特定する

find /dir -xdev \( -nouser -o -nogroup \) -print

12。 /bootを読み取り専用のままにします

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

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

13。すべてのTCPラッパーを拒否する

TCPラッパーは、それらにリンクされたアプリケーションへのアクセスを制御するための迅速で簡単な方法を提供できます。したがって、未使用のアプリケーションをすべてブロックしてから、使用するアプリケーションのみを承認することをお勧めします。

たとえば、許可されたsshのみを除くすべてのアプリケーションをブロックします

echo "ALL:ALL" >> /etc/hosts.deny 
echo "sshd:ALL" >> /etc/hosts.allow

14。許可されていないユーザーのcronジョブをロックする

cronは、特定の時間にジョブを自動化するために使用されます。誰がジョブを実行できるか、できないかを指定することができます。これは、/etc/cron.allowというファイルを使用して制御されます。 および/etc/cron.deny 。 cronを使用してユーザーをロックするには、cron.denyにユーザー名を追加し、ユーザーがcron.allowファイルでcronaddを実行できるようにします。

# echo ALL >>/etc/cron.deny

15。バッファオーバーフローからサーバーを保護する

バッファオーバーフローは、プログラムまたはプロセスが、バッファが保持するように割り当てられているよりも多くのデータをメモリまたはバッファの固定長ブロックに書き込もうとしたときに発生します。この攻撃でサーバーを再度保護することが重要です

a。 ExecShieldを有効にする

スタックの破壊を防ぐのに役立ちます。通常、バッファオーバーフローのエクスプロイトは、関数が攻撃者が選択したアドレスに戻るように、リターンアドレスを上書きします。現在のカーネルで有効にする必要があります

sysctl -w kernel.exec-shield=1

以下の行を/etc/sysctl.confに追加することもできます

kernel.exec-shield = 1

b。 ASLRを確認/有効にする

アドレス空間配置のランダム化は、バッファオーバーフローをより困難にする防御機能です。 ASLRは、攻撃者がジャンプ先のアドレスを見つけるのを困難にします。 kernel.randomize_va_space のランタイムを設定して、ランダム化された仮想メモリ領域の配置を有効にする必要があります。

sysctl -q -n -w kernel.randomize_va_space=2

以下の行を/etc/sysctl.confに追加します まだ存在しない場合

kernel.randomize_va_space = 2

結論

これらは、独自のサーバーを実行しようとする新規ユーザーの基本的な考慮事項の一部です。クラッカーは常に一歩先を行くことを忘れないでください。彼らはあなたのサーバーにハッキングするための穴を探し続けます。決して遅くなることはありませんが、セキュリティ対策は、実装を待つ時間が長くなるほど、その効果が低下することを認識することが重要です。


Cent OS
  1. RHEL 8 / CentOS8LinuxにDNSサーバーをインストールする方法

  2. CentOS 7LinuxVPSにPHPサーバーモニターをインストールします

  3. CentOSVPSを取得した後の最初のステップ

  1. Linuxサーバーを保護するための7つのステップ

  2. CentOS7LinuxサーバーにPHP7をインストールまたはアップグレードする方法

  3. Linuxの高度なセキュリティ手順

  1. CentOSホームラボを1時間で作成

  2. CentOS 8 /RHEL8サーバーのセキュリティ強化のヒントトップ7

  3. SSH サーバーが起動するのを待つ Linux コマンド