SSLサイトでのCSVダウンロード不具合

SYSLOG検索くんをSSL対応した所、CSVダウンロードに不具合が発生しました。

IEのみの問題のようでfirefox、chromeでは普通にダウンロードできます。

既知の問題のようでググったら結構同じ症状で困ってる人がいました。

どうもセッションを引き継ぐ所に問題があるようです。
なのでsession_start();の上にsession_cache_limiter(‘public’);
を記述してやればOKです。

IEは正直ブラウザとしての機能は低いと思います。
自分は使わなくてもwindowsに標準搭載されているのでシェアは圧倒的なんですよね・・・

SYSLOG検索くん リンクページの追加

久しぶりのSYSLOG検索くんの機能追加になります。

第6回目のsyslog.phpのページ表示は100件づつで次のページと前のページへのリンクしか作っていませんでした。
ログが多くなれば当然1ページ毎では間に合わないので4つ前後まで表示させれるようにして、さらに最初のページと最後のページも表示できるようにします。

syslog.php

ページリンク部分↓

//ページ表示
if ($all_rows < 100) {
print(“1ページ中1ページ目を表示<br>”);
} else {
print(ceil($all_rows/100).”ページ中”.ceil($page/100 + 1).”ページ目を表示<br>”);
}

//最初のページ
if ($page > 0) {
print(“<a href = syslog.php?page=0> &lt 最初のページ</a>”);
}
//4つ前の100件
if ($page > 300) {
print(“<a href = syslog.php?page=”.($page – ($page_rows * 4)).”> &lt 4つ前</a>”);
}
//3つ前の100件
if ($page > 200) {
print(“<a href = syslog.php?page=”.($page – ($page_rows * 3)).”> &lt 3つ前</a>”);
}
//2つ前の100件
if ($page > 100) {
print(“<a href = syslog.php?page=”.($page – ($page_rows * 2)).”> &lt 2つ前</a>”);
}
//前の100件
if ($page > 0) {
print(“<a href = syslog.php?page=”.($page – $page_rows).”> &lt 1つ前</a>”);
}

print (“     ”);

//次の100件
if ( $last_rows < ($all_rows-1)) {
print (“<a href = syslog.php?page=”.($page + $page_rows).”>次 &gt </a>”);
}
//2つ次の100件
if ( $last_rows + 100 < ($all_rows-1)) {
print (“<a href = syslog.php?page=”.($page + $page_rows * 2).”>2つ次 &gt </a>”);
}
//3つ次の100件
if ( $last_rows + 200 < ($all_rows-1)) {
print (“<a href = syslog.php?page=”.($page + $page_rows * 3).”>3つ次 &gt </a>”);
}
//4つ次の100件
if ( $last_rows + 300 < ($all_rows-1)) {
print (“<a href = syslog.php?page=”.($page + $page_rows * 4).”>4つ次 &gt </a>”);
}
//最後のページ
if ( $last_rows < ($all_rows-1)) {
print (“<a href = syslog.php?page=”.($all_rows – ($all_rows%100)).”>最後のページ &gt </a>”);
}

4つ前や後は単純に100件分追加しています。
最初のページに戻るのもpageを0指定してやれば問題ありません。
最後のページについてはちょっと計算する必要があります。
$all_rowsでクエリ全行を確認します。
そして全行を100行ずつ表示させるので100で割って余る値を出して
全行から余り行を引いた値を指定しています。
最後のページって基本的に100行ずつ表示して余った分のページになりますからね。

apacheでのアクセス制限

ブログサイトを運用しているとSPAM書き込みにうんざりする事があります。
そこで今回はapacheでアクセス制限を行いたいと思います。

まず、ドキュメントルートでブロックする場合httpd.confにdeny fromを追加します。

# vi /etc/httpd/conf/httpd.conf

<Directory “/var/www/html”>
Order allow,deny
Allow from all
Deny from 192.168.1.254 ←ここに接続させないIPを記載
</Directory>

ポリシーとしてはorderで許可と拒否の順番を決めます。
上記の例ではallw,denyなので許可してから拒否になります。
Allow from allで全てを許可してからDeny fromで拒否するIPを入れます。

allow,denyが一般的と思いますがセキュアなサーバで接続できるclientが
少ない場合は逆にDeny from allからAllow from 192.168.1.1のような感じ
で許可するIPを制限できます。

この制限はディレクトリ単位やファイル単位で制限できるので
ここだけは制限したいとかいう場合には結構有効です。

私の場合はwordpressにSPAM書き込みを何度も行うIPに対してアクセス制限をかけています。

# vi /etc/httpd/conf.d/wordpress.conf
Alias /wordpress /var/www/wordpress
<Directory /var/www/wordpress>
Options ExecCGI FollowSymLinks
Order allow,deny
Allow from all
Deny from 205.164.24.90
AllowOverride all
</Directory>

上記のような感じでDeny fromを増やしていきます。

そもそもサーバに接続させたくないのであれば/etc/hosts.denyで制限したほうがいいです。

プライベートMIBの追加

snmpでmibファイルを追加した時の覚え書き

アプライアンス機器等でベンダーが独自に定義しているMIBが必要な際は
プライベートMIBを入れる必要があります。

snmpをrpmで入れた場合、デフォルトのMIBファイルは
/usr/share/snmp/mibs
ディレクトリに保存されています。
そこにプライベートMIBの定義ファイルを入れればいいかと
入れてみましたがだめでした。

そこでsnmpを使用するユーザー毎の設定になりますが、
MIBファイルを保存するディレクトリとコンフィグを作成します。

ひとまずプライベートMIBファイルはHOMEディレクトリにおきます。

続いてMIB設置用のディレクトリを作成
$ mkdir -p $HOME/.snmp/mibs

MIBファイルをコピーします。
$ cp -p “MIBファイル” $HOME/.snmp/mibs

snmpwalkの設定ファイルを作成する
$ vi $HOME/.snmp/snmp.conf
MIBDIRS /usr/share/snmp/mibs:$HOME/.snmp/mibs
MIBS all

MIBDIRSでMIBファイルが保存されているレクトリを指定します。
パスのセパレータはコロン(:)なので間違えないようにして下さい
MIBS allで全てのMIBモジュールを読み込むようになります。

これでsnmpwalkやsnmpgetではプライベートMIB情報が反映されます。

設定前
$ snmptranslate 1.3.6.1.4.1.5951.4.1.2.1.1.5
SNMPv2-SMI::enterprises.5951.4.1.2.1.1.5

設定後
$ snmptranslate 1.3.6.1.4.1.5951.4.1.2.1.1.5
NS-ROOT-MIB::svcState

これで分かりやすくなりました。

squidでのホワイトリストとブラックリスト

proxyでの管理でコンフィグファイルをいちいち変更しないでいいようにブラックリストとホワイトリストの運用にしたいと思い作った時のメモです。

いつもはsquid.confに直接記述していましたがaclでリストを読み込む方法に変更します。

aclのベースは下記の通りです。

http_port 8080

acl localnet src 10.0.0.0/8 # RFC1918 possible internal network

acl localnet src 172.16.0.0/12 # RFC1918 possible internal network

acl localnet src 192.168.0.0/16 # RFC1918 possible internal network

http_access allow localnet

http_access allow localhost

http_access deny all

ここからaclにファイルを読み込ませる設定を追記します。
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
↓ 間に記述する
## acl allow policy
acl whitelist dstdomain “/usr/local/squid/etc/whitelist” ←ファイルの場所を指定
## acl deny policy
acl blacklist dstdomain “/usr/local/squid/etc/blacklist” ←ファイルの場所を指定

## allow rule
http_access allow whitelist
## deny rule
http_access deny blacklist
↑ 間に記述する
http_access allow localnet

簡単に説明するとaclで読み込むファイルを指定してhttp_accessでallowかdenyか決めています。
注意する所としてはファストマッチなのでallowの上にブラックリストのdenyポリシーを入れることでリストのものだけブロックが可能です。さらにその上にホワイトリストのallowポリシーを入れることでリストのものだけ通過させる事が可能です。
今回は宛先のドメインでの制御にしていますが、dstdoaminをsrcに変更することでクライアントIP等での制御も可能です。

2つに該当しないものはデフォルトのポリシーのlocalnetからの通信は許可して他はすべて禁止にします。

リストの場所はどこでもいいですがなるべくわかりやすい所がいいと思います。

リストの書き方
whitelistで許可するドメインをサブドメインを含む形で書きます。
subdomain.nekofamily.ddo.jp

blacklistではブロックするドメインを書きます。
.nekofamily.ddo.jp ←最初に.を入れることでサブドメインも含む形でブロックできます。

上記の設定だとnekofamily.ddo.jpへのアクセスはできないが、subdomain.nekofamily.ddo.jpだけアクセスできるという形になります。

linux disk領域拡張

最近はLVMを使っているので需要はないかもしれませんが
通常のext3の領域拡張の方法について記載します。
たまたまリストア先のdiskが大きかったので余っている部分を
有効活用しようという事で実施しています。

現状を確認

# fdisk -l
Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/xvdc1 * 1 1044 8385898+ 83 Linux
/dev/xvdc2 1045 2088 8385930 83 Linux
/dev/xvdc3 2089 2610 4192965 82 Linux swap / Solaris
/dev/xvdc4 2611 30515 224146912+ 5 Extended
/dev/xvdc5 2611 30515 224146881 83 Linux

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.8G 6.1G 1.4G 83% /
tmpfs 755M 0 755M 0% /dev/shm
/dev/sda5 208G 128G 70G 65% /home
/dev/sda2 7.8G 693M 6.7G 10% /var

今回は残っている領域を/homeに割あてます。

まずパーティションサイズを変更します。
unmountが必要なので今回はシングルユーザーモードで行います。
# init 1

シングルユーザーになったら/homeをunmount
sh-3.2# umount /dev/sda5

マウントされていない事を確認
sh-3.2# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.8G 6.1G 1.4G 83% /
tmpfs 755M 0 755M 0% /dev/shm
/dev/sda2 7.8G 693M 6.7G 10% /var

パーティションを再作成
sh-3.2# fdisk /dev/sda

The number of cylinders for this disk is set to 38913.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): m ←ヘルプを見ればだいたいわかります。
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition’s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): d ←領域を削除(fdiskの表示を参考、忘れたらpで確認すればOK)
Partition number(1-5): 4 ←拡張領域のサイズ変更なのでまず拡張領域を削除

Command (m for help): d
Partition number(1-5): 5 ←増やすパーティション部分を削除

Command (m for help): p ←消えているか確認
Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/xvdc1 * 1 1044 8385898+ 83 Linux
/dev/xvdc2 1045 2088 8385930 83 Linux
/dev/xvdc3 2089 2610 4192965 82 Linux swap / Solaris

Command (m for help): n ←新規で作成
Command action
e extended
p primary partition (1-4)
e ←拡張領域
Partition number (1-4):
4 ←消した所に復活させる
First cylinder (2611-38913, default 2611): ←以前と場所が変わらないように注意
Using default value 2611
Last cylinder, +cylinders or +size{K,M,G} (2611-38913, default 38913): ←終了シリンダー番号、全部割り当てるので最後までにしてます。

次に拡張領域に割り当てていた領域を作成
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (2611-38913, default 2611): ←これも次のシリンダーの初めにセットされているのでそのまま
Using default value 2611
Last cylinder, +cylinders or +size{K,M,G} (2611-38913, default 38913): ←終了シリンダー番号、全部割り当てるので最後までにしてます。

Command (m for help): p ←割り当てられたか確認

Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1044 8385898+ 83 Linux
/dev/sda2 1045 2088 8385930 83 Linux
/dev/sda3 2089 2610 4192965 82 Linux swap / Solaris
/dev/sda4 2611 38913 291603847+ 5 Extended
/dev/sda5 2611 38913 291603816 83 Linux

問題なさそうです。

最後に書き込みをして終了です。
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

これでシングルユーザーモードでの作業は完了です。
一応マウントしました。再起動とかでfstabに書いてあるので自動マウントしますけどね
sh-3.2# mount -t ext3 /dev/sda5

起動したら状況を確認

# fdisk -l
Disk /dev/sda: 320.0 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1044 8385898+ 83 Linux
/dev/sda2 1045 2088 8385930 83 Linux
/dev/sda3 2089 2610 4192965 82 Linux swap / Solaris
/dev/sda4 2611 38913 291603847+ 5 Extended
/dev/sda5 2611 38913 291603816 83 Linux

# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.8G 6.1G 1.4G 83% /
tmpfs 755M 0 755M 0% /dev/shm
/dev/sda5 208G 128G 70G 65% /home
/dev/sda2 7.8G 693M 6.7G 10% /var

fdiskでパーティションは増えているけど実領域は増えていない事がわかります。
状態としては外の容器は大きくしたけど中の容器はまだそのままという状態です。

次にファイルシステムをサイズ変更します。
resize2fsで使える領域のMAXまで割り当ててくれるので簡単に拡張できます。
# resize2fs /dev/sda5
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/sda5 is mounted on /home; on-line resizing required
Performing an on-line resize of /dev/sda5 to 72900954 (4k) blocks.
The filesystem on /dev/sda5 is now 72900954 blocks long.

無事領域を拡張できました。
# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 7.8G 6.1G 1.4G 83% /
tmpfs 755M 0 755M 0% /dev/shm
/dev/sda5 270G 128G 129G 50% /home
/dev/sda2 7.8G 695M 6.7G 10% /var