例えば Web コンテンツがハッキングなどによって書き換えられてしまった際にそれを検知できると助かります。
Tripwire などの商用ツールも有りますが、 Linux には auditd というデーモンがあります。これが割りと便利なので簡単な使い方をメモ。
例えば /var/www ディレクトリ内で発生する書き込み、属性の変更を監視したい場合、以下の様なルールを作る。
# vi /etc/audit/audit.rules
# First rule - delete all -D # Increase the buffers to survive stress events. # Make this bigger for busy systems -b 320 # Feel free to add below this line. See auditctl man page -w /var/www/ -p wa -k web-wa
-w は監視対象ディレクトリ
-p は監視の種類、 w: 書き込み a: 属性 r: 読み込み など
-k はログを見る際などのキーになる
更に特定のディレクトリだけは関しから外したいような場合は
-a exit,never -F dir=/var/www/tmp -k exclude -a exit,never -F dir=/var/www/cache -k exclude -a exit,always -F dir=/var/www -F perm=wa -k web-wa
などとやるとできる。
SSH ポートを開いていると、間違いなくパスワード総当り攻撃を食らう。これが酷い時は、 SSH ポートに接続できなくなる位ひどい時もあるので、前もって対策しておきたい。
F/W や iptables でアクセス元の IP を制限すればいいんだけど、それができないケースなどは以下の iptables ルールで、一分間に3回以上接続がきた IP をブロックする。
iptables -N SSH_CHECK iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH_CHECK iptables -A SSH_CHECK -m recent --set --name SSH iptables -A SSH_CHECK -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
mod_rewrite を使って特定の IP のみアクセスさせる、もしくはアクセスさせないようにするには以下のようにする。
RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.1$ [OR] RewriteCond %{REMOTE_ADDR} ^192\.168\.0\.2$ RewriteCond %{REQUEST_URI} !^error\.html RewriteRule .* error.html
RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.1$ RewriteCond %{REMOTE_ADDR} !^192\.168\.0\.2$ RewriteCond %{REQUEST_URI} !^error\.html RewriteRule .* error.html
久しぶりに最近ネットセキュリティについて触れることが多くなり、 iptables だの chkrootkit だの snort だの tripwire だの nessus だのと色々いじってる。しかも結構楽しい。
今後のブログネタはしばらくこの線で行こうかな。
その第一弾ってことで mod_security のインストールから設定までのメモ。
modsecurity はフリーの Web アプリケーションファイアーウォールで、 Apache のモジュールとしてインストールする。
Apache のリバースプロクシにインストールしてもいいし、 Web サーバと共存させて動作させてもいいっぽい。
とりあえず今回は Web サーバと共存の形で CentOS 4 にパッケージでインストールした。あとで CentOS 5 にもソースからインストールする予定。
環境
OVAL っていうのは、 Open Vulnerability and Assessment Language の略で、脆弱性を検査するためのオープンな言語です。
http://oval.mitre.org/その昔は SQL チックな記述言語だった気がするんですが、久々に見てみたら流行の XML になってた。