Tag Archives: CentOS - Page 2

CentOS 5 物理メモリに余裕があるのに仮想メモリを使ってしまう 対策

swappinessの値を確認(デフォルト値:60)
この数値を減らせば減らすほど物理メモリを可能なかぎり使用するようになります。
# cat /proc/sys/vm/swappiness
60

下記の設定ファイルを開き追記する
# vi /etc/sysctl.conf
# Controls the swap memory usage
vm.swappiness = 0

設定ファイルのリロード
# sysctl -p

設定が反映されたことを確認
# cat /proc/sys/vm/swappiness
0

参考サイト
カーネルパラメータvm.swappiness によるスワップの最適化

CentOS5.7 Apache2 DOS攻撃対策

DOS攻撃の対策モジュールを変更したのをメモするのを忘れていたのでメモしておきます。

旧記事
Dosアタック対策 Apache2 Vine Linux

# wget http://ncu.dl.sourceforge.net/sourceforge/moddosdetector/mod_dosdetector-0.2.tar.gz
# tar xvzf mod_dosdetector-0.2.tar.gz
# cd mod_dosdetector-0.2
# make
# make install

# vi /etc/httpd/conf.d/dos_attack.conf

RewriteEngine On
RewriteCond %{ENV:SuspectHardDoS} =1
RewriteRule .*  - [R=503,L]
ErrorDocument 503 "Server is busy."

AddType image/vnd.microsoft.icon .ico

DoSDetection On
DoSPeriod 60
DoSThreshold 70
DoSHardThreshold 90
DoSBanPeriod 7200
DoSTableSize 500
DoSIgnoreContentType ^(image/|application/|text/javascript|text/css)

mod_ruidとmod_securityの共存

mod_ruidとmod_securityを利用すると性質上ログが正常に取れない問題が発生した。
そのため対策方法を考えてみる。

# cat /var/log/httpd/audit_log
Audit log: Failed to create subdirectories: /var/asl/data/audit/20120617/20120617-1153 (Permission denied)

mod_ruidはそれぞれアクセスされたプログラムファイルのユーザ権限でApacheを動かすので先にディレクトリ”/var/asl/data/audit/日付/”を作製したユーザ以外のログが記録されないという問題が発生する。そのため、一つのファイルに全てのログを記録するように設定する。

SecAuditLogTypeをSerialと設定することにより1つのファイルでログを記録できる。
# vi /etc/httpd/modsecurity.d/modsecurity_crs_10_config.conf

SecAuditEngine RelevantOnly

SecRuleEngine On
#SecRuleEngine DetectionOnly

#SecAuditLogType Concurrent
SecAuditLogType Serial
SecAuditLog logs/audit_log
# SecAuditLogStorageDir logs/modsec_audit

今後のため一応ログ出力を強化しておく
# vi /etc/httpd/conf.d/mod_security.conf

# Debug Log.
SecDebugLog logs/modsec_debug_log
SecDebugLogLevel 1
 
# Log File.
LogFormat "%V %h %t %{UNIQUE_ID}e \"%r\" %>s %X | %I %O | %<{mod_security-time1}n %<{mod_security-time2}n %<{mod_security-time3}n %D" mperformance
CustomLog logs/modsec_performance_log mperformance

CentOS5 Postfix deferred キュー削除

サーバを監視していたところキューが大量に溜まっていたので破棄する方法を調べました。

下記のコマンドで一発で破棄できるようです。

# postsuper -d ALL deferred

Proftpd SELinux設定

別けあって今回新たに構築したサーバは勉強にSELinuxを稼働させてみた。
そこで最初は色々と問題が発生したのでそのひとつであるProftpdのアクセスしたディレクトリ内が見えない事について解決しようと思う。

下記のコマンドで一覧を表示する
# getsebool -a

ftp_home_dir –> off
ftpd_connect_db –> off
ftpd_disable_trans –> off
ftpd_is_daemon –> off

これらの機能が現在無効化されているためこれから下記のように有効化したいと思う。

# setsebool ftp_home_dir on
# setsebool ftpd_connect_db on
# setsebool ftpd_disable_trans on
# setsebool ftpd_is_daemon on

もう一度下記のコマンドで一覧を表示し有効になってるか確認する
# getsebool -a

ftp_home_dir –> on
ftpd_connect_db –> on
ftpd_disable_trans –> on
ftpd_is_daemon –> on

※追記
上記の設定では再起動時にリセットされる為設定を維持させるためにはsetseboolに-Pオプションを追加する必要がある。

ユーザにかけたクオータの解除 CentOS

ユーザディレクトリにクオータをかけたは良いが解除する方法が紹介されていない為書き込んでおこうと思う。
ユーザ:testのクオータを解除する。

# edquota -u test
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/cciss/c0d0p6 432 500000 512000 96 0 0

上記をviの方法で下記のように書き換える。

# edquota -u test
Disk quotas for user test (uid 501):
Filesystem blocks soft hard inodes soft hard
/dev/cciss/c0d0p6 432 0 0 96 0 0

あとは保存することでクオータが解除される。

Apacheのアクセスログを一斉にIPからHOSTへ変換する方法 CentOS

Apacheのアクセスログ(/var/log/httpd/access_log)に含まれるIPアドレスを一斉にHOST名に変更したいと思うことがしばしばある。
しかし、あまり方法が紹介されていないようなので今回書いておこうと思った。

Apachjeにはログに含まれるIPアドレスを自動的にHOST名に変換してくれるlogresolveというコマンドがある。今回これを使い一括して変換を行なおうと思う。

コマンドの形式
# logresolve < 生ログのファイル > 変換した出力先ファイル
例:
# logresolve < /var/log/httpd/access_log > ./laccess_log

これにより/var/log/httpd/access_logに含まれるIPアドレスを一括して変換し./laccess_logへ結果を保存することができる。

Apache 特定サイトからのアクセスを個別にログする CentOS

あまり必要ないのか紹介が一切ないのでメモしておく。
試しに2chからのアクセスのみ別のログに保存しておくようにしてみる。

# vi /var/log/httpd/2ch_log
# vi /etc/httpd/conf.d/2ch.conf

SetEnvIf Referer "^http://.*.2ch.net" 2ch_log
SetEnvIf Referer "^http://ime.nu" 2ch_log
CustomLog /var/log/httpd/2ch_log combined env=2ch_log

# service httpd restart

余談だが、その気になれば特定のサイトからアクセスがあった場合はメールで知らせることも可能である。
参考元:今週のお題 – Apache のエラーログをメールする
# vi /root/2ch_log.pl

#!/usr/bin/perl
use strict;

my $addr = $ARGV[0] ? shift:"orbit";
while(1) {
    my $r = sysread(STDIN, my $m, 4096);
    if($m) {
        if(open(MAIL, "|/usr/bin/Mail -s '[httpd] 2ch Access' $addr")) {
            print MAIL $m;
            close MAIL;
        }
    }
    if($r <= 0) {
        last;
    }
}

# vi /etc/httpd/conf.d/2ch.conf

SetEnvIf Referer "^http://.*.2ch.net" 2ch_log
SetEnvIf Referer "^http://ime.nu" 2ch_log
CustomLog "/var/log/httpd/2ch_log" combined env=2ch_log
CustomLog "| /root/2ch_log.pl" combined env=2ch_log

# service httpd restart

追記
LAN内からのアクセスをロギングしない設定

SetEnvIf Referer "^http://.*.2ch.net" 2ch_log
SetEnvIf Referer "^http://ime.nu" 2ch_log
SetEnvIf Remote_Addr "^127.0.0." !2ch_log
SetEnvIf Remote_Addr "^192.168.24." !2ch_log
CustomLog "/var/log/httpd/2ch_log" combined env=2ch_log
CustomLog "| /root/2ch_log.pl" combined env=2ch_log

攻撃の多い国を自働遮断 CentOS 5.4

いつもお世話になってる方法ですが今回はうざい国からのアクセスを全て遮断様の内容を若干発展させて自動的にデータベースを更新してくれるように設定しみました。

Redhat系用に作成した改造版countryfilter.plを下記のリンクを右クリックして保存する。
countryfilter
※拡張子を.plに変更してサーバの/rootへ転送する。

サーバ上から直接行う場合
# su –
# wget https://www.orsx.net/wp-content/uploads/2010/03/countryfilter1.txt
# mv countryfilter.txt countryfilter.pl

オリジナル自動化シェルスクリプトを下記のリンクから右クリックでダウンロードしてファイル名をcountryfilter.shへ変更する。
countryfilter_sh
ファイル名変更後サーバの/rootディレクトリへ転送する。

サーバ上から直接行う場合
# wget https://www.orsx.net/wp-content/uploads/2010/03/countryfilter_sh1.txt
# mv countryfilter_sh.txt countryfilter.sh

ここからはサーバ上で操作を行う
# chmod +x countryfilter.sh   ←実行権の投与
# mv countryfilter.sh /etc/cron.monthly/   ←月一回データベースを更新
動作チェックを行う場合は下記の一行を実行してみる。
※思いの他時間がかかると思われるが紅茶でもすすりながらゆっくりする。
# /etc/cron.monthly/countryfilter.sh

※おそらくVine Linuxでも同じように使える方法かと思う。

Usermin メール返信文字化け警告 CentOS 5.4

メールの転送機能のメールの返信
はい、以下のメッセージを差出人に自動で返します
に日本語を入力すると激しく文字化けするので(日本語非対応)と追記する。
/usr/libexec/usermin/forward/lang/ja_JP.euc
上記をファイルを何らかの方法で編集する。

編集箇所
index_autoyes=はい、以下のメッセージを差出人に自動で返します(日本語非対応)