普段アプリのコードを書いていて
サーバはあまり詳しくないというエンジニアに向けて、
サーバを新しく立てたらまず最初にすべきセキュリティ関連の設定をまとめました。
ここで説明する設定は以下になります。
※rootユーザでsshでログインできること、OSはCentOSを前提とします。
- 作業用ユーザの作成
- rootユーザのログイン禁止
- sshのポート変更
- ファイアウォールの設定変更
- アクセス元IPの制限
- 鍵認証でログイン
設定の前に気を付けること
作業用に張ったsshのセッションは、設定が正しく反映されるのを確認するまで切らないでおくこと!
でないと設定を間違えたときにログインできなくなる可能性があります。。
面倒でも設定変更のたびに別にログインして確認するのをオススメします。
1. 作業用ユーザの作成
まずは作業用ユーザを作成します。
wheelグループに追加して、rootユーザになれるようにします。
> useradd saitoxu -G wheel
> passwd saitoxu
作業後、作成したユーザでログインできるか確認してみてください。
2. rootユーザのログイン禁止
次に、sshの設定を変更してrootユーザでのログインを禁止します。
# rootユーザでのログインを禁止
PermitRootLogin no
3. sshのポート変更
sshのポートをデフォルトの22から適当に変更します。
# ポートの変更
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.deny
とhosts.allow
をそれぞれ以下のように編集します。
sshd : all
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に設定を登録しておきます。
Host hoge
HostName 123.123.123.123
IdentityFile ~/.ssh/id_rsa
Port 10022
User saitoxu
あとはサーバの方でパスワード認証を無効にします。
sshdの再起動を忘れずに!
PasswordAuthentication no
以降、以下のコマンドを打つだけでログインできるようになります。
> ssh hoge
以上