2008年9月29日月曜日

DNS キャッシュポイズニング対策

当社では自社ドメインすべてを自前のサーバで管理していますが最近そのDNSサーバへ不正にアクセスしようとする不届き者が・・・。
 
キャッシュおよびコンテンツ(作成したゾーン)はアクセス制限しているためキャッシュを汚染されることは、まずないと思われるのですが、
キャッシュポイズニング対策として念のためキャッシュ機能は使わないように変更します。
 
キャッシュポイズニングとは簡単に言うとキャッシュされているDNS情報を不正に書き換えてしまう。
これにより問い合わせをしたとき本来とは違う回答を返してしまうため偽サイトに誘導されたりする。

 named.confを以下のように修正します。(bind9.2.4)

 options部分にrecursion no;を追記する。

 "."ゾーンを参照させないように変更する。
 zone "." IN {
      type hint;
 //    file "named.ca";
      file "/dev/null";
 };
 
 namedをrestartする。
 
 簡単にDNSサーバをチェックしてくれるサイトがあるので試してみましょう。
http://recursive.iana.org/の「Provide a domain namename to analyse」欄にドメインを入力してクエリ送信ボタンを押してみましょう。
 
 結果
 ・Safe 安全です
 ・Vulnerable 危険な状態
 ・Highly vulnerable 大変危険な状態

 Name Serverにはサーバごとに個別結果が表示されます
 ・Not recursive 安全です(ドメイン管理のみしている)
 ・is recursive 危険な状態(ドメイン管理以外にキャッシュサーバとしても機能している)
 ・could not detect source port randomisation 大変危険(ポートが固定化されている)
 ・Could not scan スキャンできない(正常稼動していないのでは・・・)
 ・Completely lame 機能に問題あり?
 

2008年9月16日火曜日

IE8 ベータ2  日本語版 リリース

IE7よりパフォーマンスは格段によいようです。

評判の悪い?IE7の信頼回復なるか!
 

blackholes.us 落ちてる?

国別のスパム対策のひとつとしてblackholes.usを利用しているが
どうやら日本時間9/13 15:00ぐらいから落ちているみたい・・・。
http://www.blackholes.us/にアクセスしても応答なし。

しばらくはblackholes.usを外すことにする。
 
設定している国
cn.countries.blackholes.us ※中国
kr.countries.blackholes.us ※韓国
tw.countries.blackholes.us ※台湾
pl.countries.blackholes.us ※ポーランド
de.countries.blackholes.us ※ドイツ
cz.countries.blackholes.us ※チェコ共和国
ru.countries.blackholes.us ※ロシア
gb.countries.blackholes.us ※イギリス
 
※2008/09/24 復旧を確認したため再度有効に変更
※2009/01/07 blackholes.usは度々落ちることがあり困るので
         使用中止してしばらくはS25R+Greylistingのみで対応する
 
 

2008年9月9日火曜日

架空請求

「サイト未納料金がございます。本日迄に連絡なき場合法的処置を取らせて頂きます㈱NJC 03-6672-0813 担当 嶋田」auのCメールでこんな文章が090-5807-1254から送られてきました。

auでは「電子メールを使用しての料金請求は法律で禁止されています。それに本当の料金請求なら封書で自宅に郵送しなければならないとのこと」と定められていますので無視するのがよいでしょう。
下手に連絡をすると相手の餌食になってしまいます。ご注意を!
 

2008年8月28日木曜日

CentOS /bootのディスク容量が・・・

 
/etc/cron.daily/yum.cronにて以下のようなエラーが吐き出される。
※LogWatch通知から抜粋
Error: Transaction Check Error:
installing package kernel-smp-×.×.×-×.×.×.EL needs ×MB on the /boot filesystem
 ・
 ・
 ・

カーネルが随時更新され古いカーネルが削除されず残ります。
起動に問題があったときなど古いカーネルでの起動をすることもできて非常に便利ですが当然ディスク容量に限界が出てきます。(/bootエリア)
そこで「yum-utils」を使い古いカーネルを削除してディスクに空きを確保します。

インストールされているかチェック
# rpm -qa | grep yum-utils

インストールされていなければ下記のようにyumでインストールします
# yum install yum-utils

Setting up Install Process
Setting up repositories
update 100% ========================= 951 B 00:00
base 100% ========================= 1.1 kB 00:00
addons 100% ========================= 951 B 00:00
extras 100% ========================= 1.1 kB 00:00
Reading repository metadata in from local files
Parsing package install arguments
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for yum-utils to pack into transaction set.
yum-utils-0.5-2.el4.cento 100% ========================= 7.1 kB 00:00
---> Package yum-utils.noarch 0:0.5-2.el4.centos set to be updated
--> Running transaction check

Dependencies Resolved

=============================================================================
Package Arch Version Repository Size
=============================================================================
Installing:
yum-utils noarch 0.5-2.el4.centos extras 45 k

Transaction Summary
=============================================================================
Install 1 Package(s)
Update 0 Package(s)
Remove 0 Package(s)
Total download size: 45 k
Is this ok [y/N]:  y
Downloading Packages:
(1/1): yum-utils-0.5-2.el 100% ========================= 45 kB 00:21
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Installing: yum-utils ######################### [1/1]

Installed: yum-utils.noarch 0:0.5-2.el4.centos
Complete!
インストール完了

古いカーネルを削除
※今動いているカーネルと1世代前のカーネルは残ります。(デフォルト設定)
# package-cleanup --oldkernels

※残しておきたいカーネル数を指定したい場合は以下のようにオプションを追加します。
# package-cleanup --oldkernels --count=残すカーネル数(現在のカーネルも含む)


削除対象のカーネルがリストアップされます 
Setting up yum
Not removing kernel 2.6.9-67.0.7.EL because it is the running kernel
I will remove the following 11 kernel related packages:
kernel-2.6.9-67.0.15.EL
kernel-2.6.9-67.0.4.EL
kernel-2.6.9-67.0.1.EL
kernel-2.6.9-67.EL
kernel-2.6.9-55.0.12.EL
kernel-2.6.9-55.EL
kernel-devel-2.6.9-67.EL
kernel-devel-2.6.9-55.0.12.EL
kernel-devel-2.6.9-67.0.4.EL
kernel-devel-2.6.9-67.0.15.EL
kernel-devel-2.6.9-67.0.1.EL
Is this ok [y/N]:

yで実行します。
 

2008年8月21日木曜日

ランキング(SQLServer 2005 分析関数の利用)

SQLServer2005の分析関数を利用して売上ランキングを作る

--売上テーブル(非現実的なテーブルですが・・・ご勘弁ください)
--ここではテーブル変数を利用します
DECLARE @UriageData TABLE (
GroupCD SMALLINT DEFAULT 0, --グループ
TantosyaCD SMALLINT DEFAULT 0, --担当者
UriageDate DATETIME, --売上日
Uriagegaku MONEY DEFAULT 0 --売上額
)

--売上データ
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/01', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/02', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/01', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/01', 30000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/03', 7000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/10', 20000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 2, '2008/01/12', 15000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 3, '2008/01/11', 10000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 4, '2008/01/11', 9000)
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(2, 5, '2008/01/10', 25000)

--ランキング(担当者別に売上額の高い順にソートして順位を付ける)
SELECT RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
    TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD






--順位が同じだったら・・・
--担当者1と2を同額になるようにデータを調整
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', 5000)



担当者1と2共に2位となります。そのとき3位は歯抜けとなる



--RANK()の変わりにDENSE_RANK()を使うと歯抜けをしない形で返る
SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'ランク',
    TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD





--結果からトップ3を抽出する
SELECT AllData.rank AS 'ランク', AllData.tanto AS '担当者', AllData.uriage AS '売上額'
FROM (SELECT DENSE_RANK() OVER(ORDER BY SUM(Uriagegaku) DESC) AS rank,
TantosyaCD AS tanto, SUM(Uriagegaku) AS uriage
FROM @UriageData
GROUP BY TantosyaCD
) AS AllData
WHERE AllData.rank BETWEEN 1 AND 3





--グループ内でそれぞれランキングを付ける(PARTITION BYを付加します)
--その前にわかりやすい結果になるようちょっとデータを直します
INSERT INTO @UriageData(GroupCD, TantosyaCD, UriageDate, Uriagegaku) VALUES(1, 1, '2008/01/11', -5000)

SELECT RANK() OVER(PARTITION BY GroupCD ORDER BY SUM(Uriagegaku) DESC) AS 'ランク', GroupCD AS 'グループ', TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD, GroupCD





--余談ですがROW_NUMBER()を使うと単純に結果レコードに番号を振ります
SELECT ROW_NUMBER() OVER(ORDER BY SUM(Uriagegaku) DESC) AS 'No',
    TantosyaCD AS '担当者', SUM(Uriagegaku) AS '売上額'
FROM @UriageData
GROUP BY TantosyaCD

2008年8月12日火曜日

大文字小文字区別するSQL(SQLServer)

今さらですが・・・通常大文字と小文字を区別するかどうかはSQLserverのインストール時に決定されるが、
もし区別しない形式でインストールしてしまった場合は、COLLATE句を付けてSQL文を記述するとよい。

SELECT * FROM testTB WHERE name = 'STDMAN' COLLATE Japanese_CS_AS_KS_WS

・CI 大文字、小文字を区別しない。全角アルファベットの大文字、小文字も区別しない
・CS 大文字、小文字を区別する。全角アルファベットの大文字、小文字も区別する
・AI アクセント、濁音、破裂音を区別しない。
・AS アクセント、濁音、破裂音を区別する。
・KS ひらがなとカタカナを区別する。半角でも区別する
・WS 文字幅を区別する。(全角半角を区別する)

詳しくはSQLServer開発チームのブログ(2008/06/16)を参考にしてください。


また、サーバー照合順序はインストール後でも変更することはできるが、大変そうです。
SQLServer2005:http://msdn.microsoft.com/ja-jp/library/ms179254.aspx

Google検索