66
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

セキュリティを意識して、自宅サーバーを強固にしよう

はじめに

やっとうちもWiMAXから光回線に乗り換えて、自作サーバーにグローバルIPが振られる日が近づいてきたので見直しも兼ねてまとめ。

外部IPを利用するサーバー、出来る限り強固なセキュリティ対策を行いましょう。
「ログインされても自分は重要な情報持っていないから大丈夫だよ」と思っている方がいるかもしれませんが、自分に被害が無くてもそのサーバーを経由して別の重要なサーバーへ攻撃をかけれれるかも:scream:

用途によって様々ですが、出来る限り強固なセキュリティ対策を心がけましょう。

ここではLinuxのサーバー機でのセキュリティ対策を記載します。

サーバー設定の前に: 最新事情を気にしよう

Twitterで情報収集

少なくとも自分が利用して外部から参照できるパッケージについては、脆弱性ニュースを確認するようにしましょう。
これはセキュリティ関係の仕事をしている知り合いに教えてもらった手ですが、Twitterのセキュリティに詳しい方やまとめアカウントのTwitterをフォローしておくだけでも自然とツイートに情報が流れてくるので便利です。結構頭に残るもんですよね:smile:

例えば私は以下のアカウントをフォローしています:thumbsup:
セキュリティ・トレンド bot
IPA (JVNiPedia)
セキュリティ最新ニュース
辻 伸弘さん
上原 哲太郎さん

脆弱性があるパッケージはアップデート

脆弱性が上がっているような古いパッケージはアップデートするような癖付けをしないといけないですね。

iptablesやfirewalldによるファイヤーウォール設定

まずは入口を塞いでしまいます。出来る限り強固にして、必要最小限のポートやIPだけ外部に出られるようにしましょう。
私はサーバーの都合でiptablesによるファイヤーウォール設定を行いました。

攻撃対策

世の中に沢山詳しい人がいるので、参考にしながら攻撃対応や国外IP拒否をしましょう:clap:
⇒大量のルール設定により、iptablesでめっちゃメモリを食うようになります。kernelへの負荷も上がるのでご利用は計画的に!
iptablesだと先にDrop設定をしてから、後でAcceptするような手順で設定しないと、IPアドレスを受け入れてしまうので注意です。

参考元:例えば
iptablesの設定ファイルをシェルスクリプトを利用して動的に作成
iptablesの設定でサーバー攻撃対策と海外からのアクセスを制限
俺史上最強のiptablesをさらす

投稿主のスクリプトを置いてます:
ここに各種。日々精進
スクリプトの説明

許可ポートへのセキュリティ対策

ちょっとでも対策がわかるものを記載

ssh

オートログイン出来ないと、設定変更もつらいですよね。でもフルオープンは危険すぎます。
自分の運用だとこんな感じに対策してます。

  • ローカルのみのIFを許可, 外部からは見えないようにする。
  • ポートは変える
  • 特定の鍵でのログインのみ許容

ローカルのみのIFを許可, 外部からは見えないようにする

外からアクセスなんてしないのでローカルのみのIFを許可。iptablesのif指定とsshd_configの設定で締め出します。iptablesは後で。sshd_configは以下のようにListenAddressを対象ローカルIFに指定してしまいます。

sshd_config
ListenAddress 192.168.1.1

ポートをデフォルトから変える

そこまで効果ないかもですが。こちらで指定されています。変えましょう。

sshd_config
Port 22

既存プロトコルで利用されているポートや、非公式ながら予約されているポートがありますので注意です。
TCPやUDPにおけるポート番号の一覧

上記2つのiptablesのコマンド設定はこんな感じ

##local ssh
LOGIN=`cat /etc/ssh/sshd_config | grep '^#\?Port ' | tail -n 1 | sed -e 's/^[^0-9]*\([0-9]\+\).*$/\1/'`
iptables -A INPUT -p tcp -i ${LANIF} --dport $LOGIN -j ACCEPT

特定の鍵でのログインのみ許容

パスワードログインだと心もとないので、鍵によるログインにします。鍵にも強度があるので、以下を参考に鍵も強固なssh-ed25519にします。
どうせなら、SSHDでrsaキーの拒否をしてみないか?

以下を追加し、公開鍵はログインユーザーの.ssh/authorized_keysに追加します。

sshd_config
PubkeyAcceptedKeyTypes=ssh-ed25519
公開鍵追加
cat 公開鍵 >> ユーザーフォルダ/.ssh/authorized_keys

注意としては、autorized_keysは権限に注意です。755にしないといけないみたい。それでもだめならホームディレクトリの権限も疑ってみてください。
SSHでどうしても鍵認証できないときに見るもの

ここまで設定して、鍵を使ったログインが出来たらPasswordAuthentication を無効化します。:thumbsup:

sshd_config
#PasswordAuthentication yes
PasswordAuthentication no

HTTP系

HTTPサーバーを立てる方はHTTPSによるセキュリティ対策をしましょう。

参考になったらいいな。あなたのサーバーは大丈夫?安全なHTTPS設定の確認方法・検証ツール

最後に

情報収集とセキュリティ対策、しっかりせねばいけませんね。精進します。
後絵文字使って記事書くの楽しい:moyai:

絵文字の参考:qiita / git / trello / slack 他にも沢山使える絵文字技

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
Sign upLogin
66
Help us understand the problem. What are the problem?