みなさんこんにちは。teratail開発チームの出川幾夫です。
近年では攻撃方法が多様化・
そこで今回はサーバセキュリティの基礎をテーマに、
本記事はCentOS 6.
SSHの設定
サーバを立ち上げてまず立ち上げるサービスの一つがSSHです。サーバを構築したときからセキュリティを万全にしておく必要があります。
SSHの設定ファイルは主要なLinux OSでは/etc/
として設置されています。まずSSHのポート番号をwell-known-portでないポート番号
以下の例ではポート番号を47382番に変更しています。
これも当然ですがrootでのSSHログインは絶対に許可してはいけません。もし万が一不正にログインされた場合そのログインされたサーバ内の全てのデータや設定の破棄を余儀なくされてしまうからです。当然外部からのrootでログインを試みる攻撃の頻度も高いです。
パスワードログインを不許可にし、
- 参考:公開鍵暗号方式で秘密鍵を配布するのはダメなんでしょうか?
- https://
teratail. com/ questions/ 7220
また特定のIPアドレス以外からのSSHログインを受け付けないのも非常に効果的です。
人災を防ぐ
サーバの不具合は多くの場合、
人災を防ぐ最もよい方法は、
誤ってファイルの削除や名称変更をしてしまわないように、alias rm=rm -i
やalias mv=mv -i
を/etc/
等に記述して全てのユーザーに対してこのエイリアスを適用するとよいでしょう。
- 参考:Linuxの全ユーザーに向けて、
まとめてパスを通したい - https://
teratail. com/ questions/ 1048
またcrontab -e
も手動で打ち込むのは大変危険なコマンドです。e
はr
とキーの位置が近く、crontab -r
を叩いてしまうとcronの内容が確認なく全て消去されてしまうからです。編集する際はジョブを記録したファイルをcrontab
コマンドで読み込むか、/etc/
などのディレクトリ内でcronを管理するようにしましょう。
1つのユーザーアカウントを複数の人がログインしている運用にするとパスワードを共有することになるため、visudo
コマンドを利用してユーザーもしくはグループごとに設定を必ず行いましょう。
iptables
iptablesは最も有名なファイアウォールソフトウェアです。Red Hat系LinuxをはじめとしてさまざまなLinuxディストリビューションに対応していて、
iptablesでパケットフィルタリングを設定する前に、
以下の例ではWebサーバのために80番ポートを開放しています。
また以下の例では特定のIPアドレス"***.***.***.***"からのみ、
ここで紹介した以外にもiptablesにはあまり知られていない機能が多くあります。NATを設定できたり、
- 参考:
MySQLサーバのiptables - https://
teratail. com/ questions/ 8233 - VPS上で iptables -F するとフリーズする
- https://
teratail. com/ questions/ 4536 - CentOS に Apacheをインストールし起動したがブラウザからアクセスすると
「このページは表示できません」 となる - https://
teratail. com/ questions/ 3062
サーバ外のセキュリティ
意外に軽視されがちなのがサーバ外のセキュリティです。これは実はサーバセキュリティ以前にまず整っていなければならない部分で、
大きく分けると物理的なセキュリティ、
サーバの物理的なセキュリティとは、
またサーバを配置するネットワークに外部から不正アクセスされないような工夫も必要です。社内ネットワークのみなど限られた範囲に公開するサーバでも、
社内向けサービスと社外向けサービスの2つがある場合は、
VPSやクラウドサーバを利用しているは基本的に気にかける必要はありませんが、
- 参考:ネットワークの基礎知識をつけたい
- https://
teratail. com/ questions/ 7679
最後に
本稿では、
ウェブに公開するサービスを行っている限りセキュリティの問題は常につきまといます。teratailではプログラミングの質問だけでなくネットワークやセキュリティに関する質問も多く投稿されていますので、