mod_proxy@Ubuntu10.04

ユーザ認証付きのフォワードプロキシサーバを作る

mod_proxyを読み込む

$ sudo a2enmod proxy
$ sudo a2enmod proxy_http

Digest認証のアカウントファイルを作る

$ sudo htdigest -c /etc/apache2/.htdigest ""
(パスワードを入力)

proxyの設定

$ sudo vi /etc/apache2/mods-enabled/proxy.conf

<IfModule mod_proxy.c>
  Listen 8080 # 公開しないのなら変えたほうがいい
  ProxyRequests On
  <Proxy *>
    AuthType Digest
    AuthName "<AuthName>"
    AuthUserFIle /etc/apache2/.htdigest
    Require valid-user
    Satisfy any
    Order deny,allow
    Deny from all
  </Proxy>
  ProxyVia On
</IfModule>
proxyの開始

$ sudo apache2ctl restart

※iptablesで許可するのを忘れずに

Google Analyticsのカスタムレポート

今までいまいち使い方がよく分からなかったけど
分かるとなんちゅう便利な機能だったんだ…

基本的な設定方法
  • 指標ってとこに表示させたいグラフを選択 (「利用状況」→「セッション」でも「ユニークユーザ数」でも
  • ディメンションってことに最初に表示させたいモノを登録
  • そのモノをクリックした際に表示させたいモノをサブディメンションに登録してく
このページはどこの地域に人気があるのかが知れるレポート
  • ディメンションに「コンテンツ」→「ページタイトル」
  • サブディメンションに「ユーザ」→「都市」
○○大生とか××会社の人がこんなのに興味あんのかとかが知れるレポート
  • ディメンションに「システム」→「ドメイン
  • サブディメンションに「コンテンツ」→「ページタイトル」
自分の名前で検索した人があの友達かな?何見たのかな?とか想いを馳せるレポート
  • ディメンションに「トラフィック」→「キーワード」
  • サブディメンションに「ユーザ」→「都市」
  • サブサブディメンションに「コンテンツ」→「ページタイトル」

mrtgでスクリプトの返り値を差分で返してくれない

DNSのクエリログやhttpアクセスログのカウントを出そうと思ったけど
スクリプト等の場合差分値リターンが出来ないみたい…というか出来なかった
http://www.mrtg.jp/doc/reference.html#item__O_X_N_v_g

ということで差分を返すスクリプトでどうにかする

#!/bin/sh

file1="/usr/local/www/apache22/data/mrtg/http-a.hoge"
file2="/usr/local/www/apache22/data/mrtg/http-e.hoge"
log1="/var/log/httpd-access.log"
log2="/var/log/httpd-error.log"

tmp=`cat $file1`
now=`wc -l $log1 | awk '{print $1}'`
diff=`echo $now - $tmp | bc`
if [ $diff -lt 0 ]; then
    diff=now
fi
echo $now > $file1
echo $diff

tmp=`cat $file2`
now=`wc -l $log2 | awk '{print $1}'`
diff=`echo $now - $tmp | bc`
if [ $diff -lt 0 ]; then
    diff=now
fi
echo $now > $file2
echo $diff

uptime | awk '{print $3$4}' | sed -e "s/,//g"
echo "HTTPd"

うまくでけたー

FreeBSDのライブラリで困ったら

portsの「*** Error Code 1」やアップグレード時によくあるトラブル


↓な感じのこと言われたら

 /libexec/ld-elf.so.1: Shared object "libjpeg.so.9" not found

# ln -s /usr/local/lib/libjpeg.so.10 /usr/local/lib/libjpeg.so.9

とかでごまかせばなんとかなることが多い

SNMP

net-snmp(v5.5)

  • snmpd.conf(外部からも取得可能にする)
...
agentAddress udp:161,udp6:[::1]:161
...
# Full access from the local host
rocomunity public localhost
...
# Full access from an example network
rocomunity secret 192.168.1.0/24
...
disk / 10000
disk /var 5%
disk /usr 10%
includeAllDisks 10%

※右端の数値は正常な値の下限(省略可)

  • 起動

# snmpd

  • 動作確認

# snmpwalk -v 2c -c public localhost

MRTGで使いそうなMIBオブジェクト

  • CPU負荷
1分間平均 .1.3.6.1.4.1.2021.10.1.5.1 laLoadInt.1
5分間平均 .1.3.6.1.4.1.2021.10.1.5.2 laLoadInt.2
  • メモリ
スワップ合計(kB) .1.3.6.1.4.1.2021.4.3 memTotalSwap
空きスワップ(kB) .1.3.6.1.4.1.2021.4.4 memAvailSwap
実メモリ合計(kB) .1.3.6.1.4.1.2021.4.5 memTotalReal
空き実メモリ(kB) .1.3.6.1.4.1.2021.4.6 memAvailReal
  • HDD
容量(kB) .1.3.6.1.4.1.2021.9.1.6.x dskTotal.x
空き容量(kB) .1.3.6.1.4.1.2021.9.1.7.x dskAvail.x
使用量(kB) .1.3.6.1.4.1.2021.9.1.8.x dskUsed.x
使用率 .1.3.6.1.4.1.2021.9.1.9.x dskPercent.x

xはsnmpd.confのdiskとして設定した順番("/"は1)

受信オクテット .1.3.6.1.2.1.2.2.1.10.x ifInOctets.x
送信オクテット .1.3.6.1.2.1.2.2.1.16.x ifOutOctets.x

xはNICの順番(.1.3.6.1.2.1.2.2.1.2で確認可)

  • ネットワーク
現在の確立済コネクション数 1.3.6.1.2.1.6.9 tcpCurrEstab
受信セグメント数 1.3.6.1.2.1.6.10 tcpInSegs
送信セグメント数 1.3.6.1.2.1.6.11 tcpOutSegs
受信データグラム数 1.3.6.1.2.1.7.1 udpInDatagrams
送信データグラム数 1.3.6.1.2.1.7.4 udpOutDatagrams
受信ICMPメッセージ数 1.3.6.1.2.1.5.1 icmpInMsgs
送信ICMPメッセージ数 1.3.6.1.2.1.5.14 icmpOutMsgs
受信ICMPエラー数 1.3.6.1.2.1.5.2 icmpInErrors

こちらに色々
http://homepage3.nifty.com/sony/sd/contents/aix_mib.htm

MRTGSNMPから取得する設定例

# CPU負荷(1分間平均,5分間平均)
Target[cpu]: laLoadInt.1&laLoadInt.2:public@localhost
...
# メモリ使用量(空きスワップ,空き実メモリ)
Target[mem]: memAvailSwap.0&memAvailReal.0:public@localhost
...
# HDD使用量(/の使用率,/usrの使用率)
Target[hdd]: dskPercent.1&dskPercent.3:public@localhost
...
# トラフィック(受信パケット,送信パケット)
Target[net]: ifInOctets.1&ifOutOctets.1:public@localhost

※絶対値で表示させたい場合はOptions[]にgaugeかabsolute(gaugeを計測時間で割ったver.)をセットすべし

DHCP

概要

  • Dynamic Host Configuration Protocol
  • BOOTPを拡張したプロトコル
  • 使用ポートは67/udp(bootps), 68/udp(bootpc)
  • bootpsはDHCPサーバ,bootpcはクライアントが使用

フロー

  1. クライアント→サーバ「DHCP DISCOVER」を送信
  2. クライアント←サーバ「DHCP OFFER」を送信
  3. クライアント→サーバ「DHCP REQUEST」を送信
  4. クライアント←サーバ「DHCP ACK」を送信

宛先とか

  • DISCOVER,REQUEST(クライアント→サーバ)
    • 宛先MAC:broadcast
    • 送信元MAC:クライアント
    • 宛先IP:255.255.255.255
    • 送信元IP:0.0.0.0
  • OFFER,ACK(サーバ→クライアント)
    • 宛先MAC:broadcast
    • 送信元MAC:サーバ
    • 宛先IP:255.255.255.255
    • 送信元IP:サーバ

トランザクションIDによってクライアントは識別されるので通信が可能)

パケットフォーマット

   0                   1                   2                   3
   0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
   |     op (1)    |   htype (1)   |   hlen (1)    |   hops (1)    |
   +---------------+---------------+---------------+---------------+
   |                            xid (4)                            |
   +-------------------------------+-------------------------------+
   |           secs (2)            |           flags (2)           |
   +-------------------------------+-------------------------------+
   |                          ciaddr  (4)                          |
   +---------------------------------------------------------------+
   |                          yiaddr  (4)                          |
   +---------------------------------------------------------------+
   |                          siaddr  (4)                          |
   +---------------------------------------------------------------+
   |                          giaddr  (4)                          |
   +---------------------------------------------------------------+
   |                                                               |
   |                          chaddr  (16)                         |
   |                                                               |
   |                                                               |
   +---------------------------------------------------------------+
   |                                                               |
   |                          sname   (64)                         |
   +---------------------------------------------------------------+
   |                                                               |
   |                          file    (128)                        |
   +---------------------------------------------------------------+
   |                                                               |
   |                          options (variable)                   |
   +---------------------------------------------------------------+


xid:トランザクションID
ciaddr:クライアントIP
yiaddr:割り当てるIP
siaddr:サーバIP
giaddr:DHCPリレーエージェントIP
chaddr:クライアントMAC
options:サブネットマスクやらデフォルトGWやらDNSサーバやら

サスペンド復帰時に無線LANを再接続させる方法@Ubuntu10.04

無線LANのドライバにndiswrapperを使ってますが
サスペンド復帰時に自動で再接続されない(モジュールが見えない


いろいろ調べて
$ sudo vi /etc/pm/config.d/local (chmod +xしとく

SUSPEND_MODULES=ath_pci

とかやってみたけどうまく行かない


また調べて
$ sudo modprobe -r ndiswrapper
$ sudo modprobe ndiswrapper
無線LANが復活するのが解ったので


$ sudo vi /etc/pm/config.d/local

modprobe -r ndiswrapper
sleep 1
modprobe ndiswrapper

としたらサスペンド復帰時にうまく自動で復活するようになりました


※追記
起動時にもスクリプトが回るためにたまにおかしくなる…
復帰時のみ実行させたいスクリプトはないものか