Help us understand the problem. What is going on with this article?

サーバ初心者に捧ぐ、サーバを立てたらまずすべきセキュリティの設定

More than 3 years have passed since last update.

普段アプリのコードを書いていて
サーバはあまり詳しくないというエンジニアに向けて、
サーバを新しく立てたらまず最初にすべきセキュリティ関連の設定をまとめました。

ここで説明する設定は以下になります。
※rootユーザでsshでログインできること、OSはCentOSを前提とします。

  1. 作業用ユーザの作成
  2. rootユーザのログイン禁止
  3. sshのポート変更
  4. ファイアウォールの設定変更
  5. アクセス元IPの制限
  6. 鍵認証でログイン

設定の前に気を付けること

作業用に張ったsshのセッションは、設定が正しく反映されるのを確認するまで切らないでおくこと!
でないと設定を間違えたときにログインできなくなる可能性があります。。
面倒でも設定変更のたびに別にログインして確認するのをオススメします。

1. 作業用ユーザの作成

まずは作業用ユーザを作成します。
wheelグループに追加して、rootユーザになれるようにします。

> useradd saitoxu -G wheel
> passwd saitoxu

作業後、作成したユーザでログインできるか確認してみてください。

2. rootユーザのログイン禁止

次に、sshの設定を変更してrootユーザでのログインを禁止します。

/etc/ssh/sshd_config
# rootユーザでのログインを禁止
PermitRootLogin no

3. sshのポート変更

sshのポートをデフォルトの22から適当に変更します。

/etc/ssh/sshd_config
# ポートの変更
Port 10022

ここまで終えたらsshを再起動します。

> service sshd restart

rootユーザでログインできないことと、ポートが変更されていることを確認してください。

4. ファイアウォールの設定

次にファイアウォールの設定を行います。iptablesコマンドでルールを設定していきます。
以下にこちらから拝借した設定例を載せておきます。
詳しくはリンク先を見ていただく方がいいかなと思います。

# 1. サーバへの攻撃に対する対策
> iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
> iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
> iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

# 2. localhostからの通信とpingを許可
> iptables -A INPUT -i lo -j ACCEPT
> iptables -A INPUT -p icmp -j ACCEPT

# 3. ssh, http, httpsを許可(サーバーの用途による)
> iptables -A INPUT -p tcp -m tcp --dport 10022 -j ACCEPT
> iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
> iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

# 4. 確立済みの通信を許可
> iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 5. 許可した通信以外は拒否
> iptables -P INPUT DROP

# 6. 送信するパケットは全て許可
> iptables -P OUTPUT ACCEPT

# 7. 設定をファイルに保存
> service iptables save

# 8. サービスを再起動
> service iptables restart

# 9. 設定を確認
> iptables -L

5. アクセス元IPの制限

さらにセキュリティを強化するため、アクセス元IPを制限します。
hosts.denyhosts.allowをそれぞれ以下のように編集します。

/etc/hosts.deny
sshd : all
/etc/hosts.allow
sshd : 123.123.123.123 # 自宅や会社のIP

これは再起動する必要などはなく、即時に反映されます。
これで許可されたIPから以外のアクセスは弾けるようになりました。

6. 鍵認証

最後にログイン方法を鍵認証にして、パスワード認証を無効にします。

# クライアントで鍵の作成
> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/saitoxu/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/saitoxu/.ssh/id_rsa.
Your public key has been saved in /home/saitoxu/.ssh/id_rsa.pub.
The key fingerprint is: ...

# 公開鍵をscpでサーバーに上げる
> scp id_rsa.pub ~/.ssh/

# 鍵の登録
> cat id_rsa.pub >> authorized_keys
> chmod 600 authorized_keys

これでもう鍵認証でログインできますが、クライアントのconfigに設定を登録しておきます。

~/.ssh/config
Host hoge
    HostName 123.123.123.123
    IdentityFile ~/.ssh/id_rsa
    Port 10022
    User saitoxu

あとはサーバの方でパスワード認証を無効にします。
sshdの再起動を忘れずに!

/etc/ssh/sshd_config
PasswordAuthentication no

以降、以下のコマンドを打つだけでログインできるようになります。

> ssh hoge

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした