OS (CentOS:Linux)
本サイトを収容している VPS には、Linux OS である CentOS を利用しています。 Ubuntu なども使えますが、個人的に一番慣れているので、CentOS を使っています。
OS レベルにおいては、特に凝ったことは実施していませんが、セキュリティ対策は一応実施しています。 実施している主な事項は、以下の通りです。
・アカウントは類推しにくい名前とする
・必要なサービスのみを起動する
・デフォルトのポート番号を変更する
・インターネット側に不要ポートを見せない
それぞれ実施は難しくは無いので、下記のようにして確認を行い、対策を実施しています。
開いているポートは、netstat コマンドで確認しましょう。
netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 :::80 :::* LISTEN
:
不要なサービスがあれば、chkconfig コマンドで停止させましょう。
現在の設定を確認します。
chkconfig --list
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
:
httpdのランレベル3と5で自動起動を行う設定です。
# onにする場合
chkconfig --level 35 httpd on
# offにする場合
chkconfig --level 35 httpd off
サービスを止めるわけにはいかなが、インターネットからのアクセスを規制したい場合は、iptables により遮断をしましょう。
設定ファイルは、下記にあります。
極端な例ですが、このような感じです。
vi /etc/sysconfig/iptables
:INPUT ACCEPT [0:0]
-A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
:
-A INPUT -i eth0 -p tcp -j DROP
他に、保守用で公開したくないポートについては、デフォルトのものから変更することが良いと思います。 ssh なども変更はできますので、デフォルトものから変更しておくだけで、多くの攻撃から身を守ることができます。
サーバを自前で運用する ということ
上記の通り VPS自体から運用しているのですが、そのために「インターネットに接続したサーバを運用する」という事が、当然必要になります。 root 権限を持ち OS から運用するということは、つまりは、インターネットからの サイバー攻撃(以下 単に攻撃といいます) からの防御も、自ら実施することが必要です。
必要なサービスをインターネット側に見せないために、上記のように「不要なサービスは閉じる」「iptablesでフィルタを実施する」などの対策が必要ですし、日々 アクセスログ等をチェックすることで 不正アクセスの兆候を掴み、未然に防ぐことも必要です。
実際、本サイトも、成功こそしていませんが 不正ログインの試行攻撃 を断続的に受けており、それらを検知 & アクセスの遮断等の対応を講じています。 iptables の例ですが、基本どおりですが、以下のようにソースアドレス毎に完全遮断としています。 まだ、DDoS的なアクセスは 来たことがありませんが、その際には また別な遮断方法を用意しています。
$ sudo /sbin/iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP all -- 194.12.xx.xx 0.0.0.0/0
DROP all -- 176.123.xx.xx/16 0.0.0.0/0
DROP all -- 192.157.xx.xx 0.0.0.0/0
:
ログ分析については、一つ一つ確認するのはそれなりに面倒ですので、Ruby でスクリプトを作成して 自動チェックを実施し、チェック結果をメールで送るようにしています。 いちいちログインして見るのも面倒ですので・・・ ちなみにメールについては、本サーバでは受信不可 (送信のみ可) としています。
例えば、ssh におけるログイン認証のログにおいて、成功したものがある場合にそれをメールで送るためには、下記のように簡単に、shell script で書くことができます。 これを cron で必要な周期でまわしてあげれば OK です。
grep 'Accepted password' /var/log/secure | mail -s 'Login Log' mail@mail.address
また、次のように、httpにおけるアクセス元IPアドレスを抽出し、アクセス回数を集計して メールを送るようにするには、以下のように shell script を書いて、適当な周期で cron でレポートメールを送っています。
cat /var/log/httpd/access_log |awk {'print $1'} |sort | uniq -c | sort -nr | mail -s 'WP ALL' mail@mail.address
このように、やはり手はかかるのですが、不正にアクセスされたりする兆候を掴むためには、必須の作業ですね。
ちなみに、このサーバにおいては、SMTP 関連のポートを閉じているので、外からのメールはそもそも届かないようにしています。 やっぱりメールも、不正アクセスの試行が多いですので。。。 そのようにポートを閉じていても、Postfix自体は動かしているので、メールの送信は可能です。