この記事では、研究室のRedmineをインストールしたサーバーのセキュリティ対策を紹介します。
サーバーなどに関しての素人が設定したものなので、参考にする際は自己責任でお願いします。また、改善したほうがいい点があれば、是非ご指摘お願いします。
- はじめに
- セキュリティ対策
- リンク
- おわりに
はじめに
研究室のRedmineは私が立てたサーバーにインストールされています。このサーバーは研究室のLAN(Local Area Network)に接続しており、研究室外のネットワークからはアクセスできないため、しばらくサーバーのセキュリティ対策は適当な状態でした(だめだめですね)。
しかし大学の他の研究室のサーバーに不正アクセスが発生し、セキュリティ対策の要請が来たため、このページで紹介する対策を行いました。
ホームページや書籍を参考にしたので、標準的な対策だと思います。しかしサーバーなどに関しての素人が設定したものなので、参考にする際は自己責任でお願いします。
※サーバーを扱ったことがない方は、先に下記ページをご覧ください。
セキュリティ対策
大学のファイヤーウォール
自分たちで行った対策ではないですが、前述のとおりRedmineのサーバーは大学および研究室のファイヤーウォールの中に立てています。すなわち、LAN(Local Area Network、ローカル環境、イントラネット)にサーバーを接続しています(完全に理解できているわけではなく、正確な単語・表現かはわかりません)。
これにより、研究室のネットワークに接続しなければ、Redmineにアクセスできないようになっています(そうでなければ素人がサーバーを立ててみるなど、怖くてできませんね!)。
なお、VPN(Virtual Private Network)を設定すれば外部からアクセスすることはできますが、VPNは教職員のみが利用可能なルールとなっています。
サーバーの設定1:SSHポート番号を変更する
SSHの初期設定では、ポート番号(通信の端点を指定する数字?)が22になっているので、変えたほうが安全です(変えておけば、パスワードだけでなくこの数字も知らなければアクセスできなくなります)。
SSHの設定
- TeraTermなどでサーバーにログイン
- viなどで設定ファイルを開く
vi /etc/ssh/sshd_config
- 設定ファイル内の「Port 22」の部分を適当に決めた番号に変更して保存する
Port 「新しいポート番号」
- 下記コマンドで設定を反映する
/etc/init.d/ssdh restart
iptablesの設定
- viなどで設定ファイルを開く
vi /etc/sysconfig/iptables
- 設定ファイル内の「… --dport 22 …」の部分をコメントアウトし、数字を変えたものを書き込んで保存する
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 「新しいポート番号」 -j ACCEPT
- 下記コマンドで設定を反映する
/etc/init.d/iptables restart
設定の確認
- 新しくTera Termを開いて、新しいポート番号でアクセスできることを確認する
- 新しくTera Termを開いて、ポート番号22でアクセスできないことを確認する
※ミスったときアクセスできなくなるのを防ぐため、確認するまで編集に使用したウィンドウは閉じないでおきます
サーバーの設定2:SSHにおいてrootでログインできなくする
CentOSなどでは、初期設定で「root」というアカウントが作られており、このアカウントではログインできなくした方が安全です(変えておけば、パスワードだけでなくアカウント名も知らなければアクセスできなくなります)。
通常は別のアカウントを作成してそのアカウントで作業し、管理者権限が必要な場合だけsu
というコマンドでrootアカウントに切り替えます。
新規アカウント作成
- Tera Termなどでサーバーにログイン
- 下記コマンドで適当な名前の新規アカウントを作成する
useradd 「アカウント名」
- 下記コマンドを実行し、アカウントにログインパスワードを設定する(コマンド実行後に、パスワードを2回入力する)
passwd 「アカウント名」
rootでログインできなくする
- Tera Termなどでサーバーにログイン
- viなどで設定ファイルを開く
vi /etc/ssh/sshd_config
- 「PermitRootLogin yes」の部分を変更して保存する
PermitRootLogin no
設定の確認
- 新しくTera Termなどを開き、新しいアカウントでログインできることを確認する
- 新しくTera Termなどを開き、rootアカウントでログインできないことを確認する
サーバーの設定3:iptablesで任意のIPアドレスをはじく
私たちの研究室ではパソコンをDHCP(Dynamic Host Configuration Protocol)サーバーに登録し、IPアドレスを固定的に割り当てています。ただし一部のIPアドレスは、ゲスト用・スマホなど用に動的割り当てにしています。
そこで固定的に割り当てたIPアドレスのみを許可することで、DHCPサーバーに登録したパソコンのみがRedmineにアクセスできる設定にしています。
iptablesの設定
- Tera Termなどでサーバーにログイン
- 下記コマンドで、アクセス制限したいIPアドレスを登録
iptables -I INPUT -s 「アクセス制限したいIPアドレス」 -j DROP
- 下記コマンドで、設定を保存
iptables save
iptablesの設定の確認
- Tera Termなどでサーバーにログイン
- 下記コマンドで、設定を確認
iptables -L
サーバーの設定4:iptablesで総当たり攻撃およびDoS攻撃を防ぐ
サーバーのパスワードを解読するために、あらゆるパターンのパスワードを試す総当たり攻撃が行われることがあります。また、大量のアクセスを行うことによりサーバーを利用不能にするDoS攻撃(Denial of Service attack)という攻撃もあります。
これらを防ぐために、同一のパソコンから一定時間に一定回数以上の接続があった場合はアクセスを制限するように設定します。詳しくは参考資料のリンク先を参照ください。
iptablesの設定
下記設定により1秒間の接続回数を制限します。
- TeraTermなどでサーバーにログイン
- viなどで設定ファイルを開く
vi /etc/sysconfig/iptables
- 総当たり攻撃対策として「SSHポート番号の変更」で設定した部分をコメントアウトし、下記を書き込む
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 「新しいポート番号」 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 「新しいポート番号」 -m hashlimit --hashlimit-name ssh_limit --hashlimit 1/second --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT
- DoS攻撃対策として、下記を追記して保存する
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -m hashlimit --hashlimit-name web_limit --hashlimit 1/second --hashlimit-burst 700 --hashlimit-mode srcip --hashlimit-htable-expire 120000 -j ACCEPT
- 下記コマンドで設定を反映する
/etc/init.d/iptables restart
Redmineの設定1:管理者のみがアカウントを作成・削除可能にする
Redmineではデフォルト設定で、ユーザーがアカウントを作成し管理者がそれを有効化する設定になっています。またユーザーが自分のアカウントを削除できるようになっています。
この設定を変更し、管理者のみがアカウントを作成・削除できるようにした方が良いと思います。
- 管理者のカウントで、左上の「管理」メニューの「設定」を開く
- 「認証」タブで、下記を設定して保存
- ユーザーによるアカウント登録:無効
- ユーザーによるアカウント削除を許可:チェックを外す
Redmineの設定2:ログインしているユーザーのみ情報を閲覧可能にする
Redmineではデフォルト設定で、ログインしなくても公開設定の情報は閲覧できるようになっています。
この設定を変更し、ログインしなければ閲覧できないようにします。
- 管理者のカウントで、左上の「管理」メニューの「設定」を開く
- 「認証」タブで、下記を設定して保存
- 認証が必要:チェックを外す
リンク
参考資料
- Linuxサーバーについて
- Linuxサーバーのセキュリティをより強固にする方法
- sshのポート番号変更について
- iptablesの設定について
- iptablesでのDoS攻撃対策
- CentOSでroot権限を持ち、sudoを実行できるユーザーを作成する
- SSH接続でのrootによるログイン禁止
- Redmineの設定
関連記事
おわりに
セキュリティ対策は利便性とのトレードオフな部分もあるので難しいですね。
あまりガチガチに設定すると、内部の人間が抜け道を作ってしまい逆にセキュリティが低くなる、とか聞きますし。