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