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自体は動かしているので、メールの送信は可能です。