Linux VPSサーバー導入後の基本的なセキュリティ設定

LinuxシステムのVPSまたはサーバーを購入した後、多くのプロバイダーはroot権限のアカウントを提供しますが、初期パスワードは短く設定されていることが多く、これは非常に危険です。脆弱なパスワードにより、サーバーが不正アクセスされ悪用されるケースが頻繁に発生しています。そのため、LinuxシステムのVPSまたはサーバーをセットアップした後、基本的なセキュリティ設定を行う必要があります。

1. SSHパスワード認証の無効化

まず、SSHキーペアを生成する必要があります。Windowsユーザーの場合は、PuttyのPUTTYGEN.EXEを使用して秘密鍵と公開鍵を作成します。

PUTTYGEN.EXEを実行し、通常はデフォルトのRSA暗号を選択します。1024ビットの暗号化で十分ですが、より安全性を高める場合は2048または4096ビットを選択できます。

Generateボタンをクリックし、マウスをランダムに動かします。プログレスバーが完了すれば、SSHキーが生成されます。

より安全にするためにはKey Passphrase(パスフレーズ)を設定することをお勧めします。これはrootパスワードとは異なるパスワードで、他人があなたのキーを取得してもこのパスフレーズがなければキーを使用できません。

Save Public Keyをクリックして公開鍵を保存します。ファイルの内容は以下のようになります:

---- BEGIN SSH2 PUBLIC KEY ----
Comment: "secure-server-key-20230815"
AAAAB3NzaC1yc2EAAAADAQABAAABAQC9t6Jz2Qy7YqX8hLJ7H2y5wF8vR6T9K0l
P8mN4oP5qR7sT8uV9xY3aB4cD5eF6gH7iJ8kL9mN0oP1qR2sT3uV4xY5aB6cD7e
F8gH9iJ0kL1mN2oP3qR4sT5uV6xY7aB8cD9eF0gH1iJ2kL3mN4oP5qR6sT7uV8x
Y9aB0cD1eF2gH3iJ4kL5mN6oP7qR8sT9uV0xY1aB2cD3eF4gH5iJ6kL7mN8oP9q
R0sT1uV2xY3aB4cD5eF6gH7iJ8kL9mN0oP1qR2sT3uV4xY5aB6cD7eF8gH9iJ0kL
---- END SSH2 PUBLIC KEY ----

中の長い文字列が公開鍵です。サーバーの~/.ssh/authorized_keysに以下の形式で配置します:

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9t6Jz2Qy7YqX8hLJ7H2y5wF8vR6T9K0l
P8mN4oP5qR7sT8uV9xY3aB4cD5eF6gH7iJ8kL9mN0oP1qR2sT3uV4xY5aB6cD7eF8gH
9iJ0kL1mN2oP3qR4sT5uV6xY7aB8cD9eF0gH1iJ2kL3mN4oP5qR6sT7uV8xY9aB0cD
1eF2gH3iJ4kL5mN6oP7qR8sT9uV0xY1aB2cD3eF4gH5iJ6kL7mN8oP9qR0sT1uV2x
Y3aB4cD5eF6gH7iJ8kL9mN0oP1qR2sT3uV4xY5aB6cD7eF8gH9iJ0kL secure-server-key-20230815

ここでssh-rsaは暗号化タイプ、secure-server-key-20230815は説明文で任意のテキストを使用できます。

Save Private KeyをクリックしてPutty用の秘密鍵を生成し、secure_server.ppkとして保存します。このファイルはPuttyディレクトリのPAGEANT.EXEでインポートすることで、rootパスワードなしでVPSにログインできます。

Windowsユーザーの場合は、公開鍵をサーバーにインポートする方法として2つの簡単な方法があります:

  1. 公開鍵をhttps://launchpad.net/サイトにアップロードし、https://launchpad.net/~username/+sshkeysのようなアドレスを取得して、以下のコマンドでキーをインポートします:
curl https://launchpad.net/~username/+sshkeys > ~/.ssh/authorized_keys

.sshディレクトリがない場合は新しく作成します:

mkdir .ssh
  1. authorized_keysファイルに直接書き込む方法:
cat >>/root/.ssh/authorized_keys<< EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9t6Jz2Qy7YqX8hLJ7H2y5wF8vR6T9K0l
P8mN4oP5qR7sT8uV9xY3aB4cD5eF6gH7iJ8kL9mN0oP1qR2sT3uV4xY5aB6cD7eF8gH
9iJ0kL1mN2oP3qR4sT5uV6xY7aB8cD9eF0gH1iJ2kL3mN4oP5qR6sT7uV8xY9aB0cD
1eF2gH3iJ4kL5mN6oP7qR8sT9uV0xY1aB2cD3eF4gH5iJ6kL7mN8oP9qR0sT1uV2x
Y3aB4cD5eF6gH7iJ8kL9mN0oP1qR2sT3uV4xY5aB6cD7eF8gH9iJ0kL secure-server-key-20230815
EOF

CentOSシステムでSELinuxが有効になっている場合、.sshディレクトリのアクセスが制限されている可能性があります:

restorecon -R -v /root/.ssh

authorized_keysの権限問題が発生した場合は、以下のコマンドで解決できます:

chattr -i authorized_keys

新しいSSHウィンドウを開いて、パスワードなしでrootとしてログインできるかテストします。

次に、SSHパスワード認証を無効化します。SSH設定ファイルを編集します:

vim /etc/ssh/sshd_config

#PasswordAuthentication yesを見つけてPasswordAuthentication noに変更し、保存して終了します。SSHサービスを再起動します:

Ubuntuの場合:

/etc/init.d/ssh restart

CentOSの場合:

service sshd restart

これでSSHパスワード認証が無効化され、90%の不正アクセスリスクを排除できます。ただし、秘密鍵は安全に保管してください。

2. CSFファイアウォールのインストールと不正アクセス元IPのブロック

CSFファイアウォールのインストールは簡単で、数コマンドで完了します:

rm -fv csf.tgz
wget http://www.configserver.com/free/csf.tgz
tar -xzf csf.tgz
cd csf
sh install.sh

以下のコマンドでインストールが成功したか確認します:

perl /usr/local/csf/bin/csftest.pl

システムがローカルIPを誤ってブロックしないように、/etc/csf/csf.allowと/etc/csf/csf.ignoreファイルに必要なIPをホワイトリストとして追加します。その後、csf -rコマンドで設定を再読み込みします。

3. iptablesで通常のポートのみを許可

一般的には22、53、80、443のポートを開放すれば十分です。以下のコマンドでiptablesのデフォルトルールをクリアします:

iptables -F

22番ポートの入出力を許可:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

53番ポートの許可(DNSサービス用):

iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --sport 53 -j ACCEPT

ローカルループバックアクセスの許可:

iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT

80番と443番ポートの全IPからのアクセス許可(HTTP/HTTPS用):

iptables -A INPUT -p tcp -s 0/0 --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -s 0/0 --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

設定を保存:

iptables-save > /etc/sysconfig/iptables

iptablesを再読み込み:

iptables -L

4. fail2banのインストールとSSHポートスキャンIPのブロックと報告

SSHパスワードを継続的にスキャンしている攻撃者に対処するために、fail2banをインストールします。これにより、不正アクセス元IPをブロックすると同時に、そのIPが属するISPに自動で報告メールを送信できます。

CentOSでのインストール: epelリポジトリをインポート:

#CentOS 6.x 32ビット:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
#CentOS 6.x 64ビット:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

#fail2banのインストール
yum -y install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
service fail2ban start

Ubuntu/Debianでのインストール:

apt-get install fail2ban -y

/var/log/fail2ban.logファイルを確認することで、SSHスキャンを試みているIPアドレスを確認できます。

タグ: linux VPS セキュリティ SSH ファイアウォール

5月14日 19:15 投稿