\r\n\r\n
Linuxシステムは、安全で堅牢な管理ツールを提供するように設計されています。しかし、どんなに優れたシステムを設計しても、その安全性はユーザー次第です。
初心者が自分のマシンに最適なセキュリティポリシーを見つけるには、通常数年かかると言われています。そこで今回は、Linuxのハードニングの基本的なコツをご紹介します。ぜひお試しください。
パスワードは、ほとんどのシステムで主要な認証方法となっています。ホームユーザーであれ、プロフェッショナルであれ、信頼できるパスワードの施行は必須です。まず、空のパスワードを無効にする。今でも使っている人がいるなんて信じられませんよね。
awk -F: '($2 == "") {print}' /etc/shadowrootユーザーで上記のコマンドを実行し、どのアカウントのパスワードが空なのかを確認します。もし、誰かが空のパスワードを持っていることを発見したら、すぐにそのユーザーをロックアウトしてください。することができます。
passwd -l USERNAMEまた、ユーザーが古いパスワードを使用できないようにするために、パスワードエージングを設定することもできます。
chage -l USERNAMEこのコマンドは、現在の有効期限を表示します。30 日後にパスワードが失効するように設定するには、次のコマンドを使用します。ユーザーは、Linuxパスワードマネージャーを使用して、オンラインアカウントを保護することができます。
chage -M 30 USERNAMEデータのことを真剣に考えているならば、定期的にバックアップを取ることです。これなら、たとえシステムがクラッシュしても、すぐにデータを復旧させることができます。しかし、Linuxのハード化には、適切なバックアップ方法を選択することが重要です。
ホームユーザーであれば、ハードディスクにデータをクローンすれば十分ですが、企業では高速リカバリを実現する複雑なバックアップシステムが必要です。
Linuxは様々な遠隔通信方式をサポートしています。しかし、telnet、rlogin、ftpのようなレガシーなUnixサービスは、深刻なセキュリティ問題を引き起こす可能性があります。だから、避けるようにしてください。それらを完全に削除することで、それらに関連するセキュリティ問題を軽減することができます。
apt-get --purge remove xinetd nis tftpd tftpd-hpa telnetd \> rsh-server rsh-redone-serverこのコマンドは、Ubuntu/Debianのマシンから、広く使われているが時代遅れのサービスをいくつか削除するものです。RPMベースのシステムを使用している場合は、代わりに以下の方法を使用してください。
yum erase xinetd ypserv tftp-server telnet-server rsh-serverLinuxのリモート通信は、SSHプロトコルが推奨されています。OpenSSH サーバー(sshd)が安全に設定されていることを確認してください。SSHサーバーの設定については、こちらで詳しく説明しています。
etc/ssh/sshd_config ファイルを編集し、ssh のセキュリティポリシーを設定します。ここでは、誰でもできる一般的なセキュリティポリシーを紹介します。
PermitRootLogin no # disables root loginMaxAuthTries 3 # limits authentication attemptsPasswordAuthentication no # disables password authenticationPermitEmptyPasswords no # disables empty passwordsX11Forwarding no # disables GUI tran**issionDebianBanner no # di**ales verbose bannerAllowUsers *@XXX.X.XXX.0/24 # restrict users to an IP rangeCRONは、Linux用の堅牢なジョブスケジューラです。管理者がLinuxでcrontabを使用してタスクをスケジュールすることができます。そのため、CRONジョブを実行できるユーザーを制限することが非常に重要です。次のコマンドを使用すると、あるユーザーの有効なcronjobをすべて見つけることができます。
crontab -l -u USERNAME各ユーザーのジョブをチェックして、CRONを利用している人がいないかどうかを確認します。自分以外のすべてのユーザーがcrontabを使用できないようにしたい場合は、次のコマンドを実行してください。
echo $(whoami) >> /etc/cron.d/cron.allow# echo ALL >> /etc/cron.d/cron.denyLinux-PAM(Pluggable Authentication Modules)は、アプリケーションやサービスに対して強力な認証機能を提供します。システムのログインを保護するために、様々なPAMポリシーを使用することができます。例えば、次のコマンドは、パスワードの再利用を制限します。
# CentOS/RHELecho 'password sufficient pam_unix.so use_authtok md5 shadow remember=5' >> \> /etc/pam.d/system-auth# Ubuntu/Debianecho 'password sufficient pam_unix.so use_authtok md5 shadow remember=5' >> \> /etc/pam.d/common-passwordまた、過去5週間以内に使用されたパスワードの使用を制限している。さらに、セキュリティの追加レイヤーを提供するPAMポリシーも数多く存在する。
使っていないパッケージを削除することで、マシンへの攻撃を減らすことができます。そのため、ほとんど使用しないパッケージは削除することをお勧めします。以下のコマンドで、現在インストールされているすべてのパッケージを確認することができます。
yum list installed # CentOS/RHEL apt list --installed # Ubuntu/Debian未使用のパッケージvlcを削除したい場合、rootユーザで以下のコマンドを実行します。
yum remove vlc # CentOS/RHELapt remove vlc # Ubuntu/Debianまた、Linuxのハードニングとして有効なのが、カーネルパラメータの保護です。これらのパラメータは、sysctlを使用するか、設定ファイルを変更することで設定できます。ここでは、一般的な構成を紹介します。
kernel.randomize_va_space=2 # randomnize address base for mmap, heap, and stackkernel.panic=10 # reboot after 10 sec following a kernel panicnet.ipv4.icmp_ignore_bogus_error_resp***es # protects bad error messagesnet.ipv4.ip_forward=0 # disables IP forwardingnet.ipv4.icmp_ignore_bogus_error_resp***es=1 # ignores ICP errorsこれらは基本的な設定であり、カーネルを設定するさまざまな方法は、経験から学ぶことができます。
Linux カーネルは、netfilterapi を介してネットワークパケットの堅牢なフィルタリング方法を提供します。iptablesを使用して、このAPIと対話し、ネットワークリクエストのカスタムフィルタを設定することができます。ここでは、セキュアなユーザーのための基本的なiptablesのルールを紹介します。
-A INPUT -j REJECT # reject all inbound requests-A FORWARD -j REJECT # reject traffic forwarding-A INPUT -i lo -j ACCEPT-A OUTPUT -o lo -j ACCEPT # allow traffic on localhost# allow ping requests-A OUTPUT -p icmp -j ACCEPT # allow outgoing pings# allow established/related connecti***-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT-A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT# allow DNS lookups-A OUTPUT -p udp -m udp --dport 53 -j ACCEPT# allow http/https requests-A OUTPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT# allow SSH access-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT-A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPTログは、Linuxマシンをより深く理解するために利用することができます。お使いのシステムには、アプリケーションやサービスのログファイルが複数保存されています。ここでは、基本的なものの概要を説明します。
Linuxシステムのセキュリティ確保は、思っているほど難しくはありません。このガイドで紹介されているいくつかのヒントを参考にして、セキュリティを強化してください。経験を積めば、Linuxを保護する方法をより多く習得することができます。