|
|
|
|
|
2006年12月26日
|
|
|
Ajaxとは、単純にいうと、HTTP通信における非同期処理の技術です。
で、これを利用して、リアルタイムチャットの実装が見られます。
ですが、これは非常に大きな危険性を孕む可能性があります。
通信にHTTPを用いるっていうことは、普通は接続対象はhttpdとなります。
しかし、httpdは、持続的な接続を持つように設計されてはいません。
というか、ご存知の方には常識ですが、HTTP自体が持続的な接続を持つように設計されていないんですよね。
そこで、生まれた技術がセッションなわけです。
まあ、そこは本題ではないので、この辺はスルーします。
で、Ajaxによるチャットの何が問題なのか。
まず、今までのウェブチャットと同様の方式で、リアルタイム性を追求した場合。
単純に、リクエスト間隔を短くした場合です。
これがタブーなのはすぐにおわかりになるでしょう。
ただのDoSスクリプトです。
そこの問題を解決するアイディアがあります。
通常、HTTP通信では、クライアントとサーバがコネクションを確立し、クライアントからサーバにリクエストを送信、サーバが処理してレスポンスを返し、コネクションを切断します。
なので、通常、クライアントとhttpdが接続している時間というのは、短いものです。
ですが、そうすると、チャットなんかのユーザが複数いるようなものでは、自分以外のユーザも関与するため、自分がリクエストを送出した場合、他のユーザもそのリクエストに対するレスポンスを取得する必要があります。
そのためには、httpd側からクライアントに対してコネクションの接続を要求できないので、あらかじめクライアントからhttpdに接続を要求して、コネクションを持続させている必要性があります。
そこで。
クライアントが先にリクエストを送出し、応答を別のクライアントからのメッセージが到着するまで保留状態にしておくというアイディアが出てきました。
そうすれば、その間は持続的なコネクションが発生し、クライアントはレスポンスをうけたら、またすぐさまコネクションを確立すればいいのです。
さて。
この発想には感心する人も少なくないと思います。
しかし、少なくとも、自分以外の人も利用しているhttpdを用いてこのようなことをおこなうべきではありません。
通常、httpdには最大同時接続者数制限が設けられています。
httpdに限らず、たとえばDoSに晒された時に、他に与える影響をなるべく抑えるために、このような制限を持たせることは通常のことでしょう。
そしてまた、httpdは前述の通り、持続的な通信を前提にしていません。(そのサーバがファイル置き場になっていて、HTTPでダウンロードさせる方式の場合などは別ですが、通常はそうでしょう)
そこでほぼ持続的な通信をもつ先ほどの手法を用いると、httpdに対するコネクションの枯渇の可能性が生まれます。
最大同時接続者数が100に設定されているサーバで、そのチャットを100個開くとどうなるでしょう?
これが自分以外の人も利用しているhttpdを用いてこのようなことをおこなうべきではないとする理由です。
また、悪意が無くても、通常利用するだけでもコネクションが枯渇することは十分あります。
たとえば、最大接続者数が100のサーバで、このチャット利用者が20人いたとすると、勝手に最大接続者数を80にサーバ設定を書き換えているのと同義になります。
もしこのようなことをおこなうのであれば、専用のデーモンを用意するか、専用のhttpdを用意するべきです。
そうすれば、他の利用者に対する影響は、減ります。
通常にサイト公開をおこなっているユーザと同じhttpdにおいて、このようなことをおこなうのは、他のユーザに対する嫌がらせととられてもおかしくありません。
しかし、どうにもAjaxとリアルタイムチャットは、親和性が低いように思います。
HTTPというプロトコル自体がリアルタイム通信に根本的に不向きなのが大きいです。
Ajaxによって、クライアント個人がトリガとなる非同期通信の経路は確保されました。
しかし、チャットは他のクライアントもトリガとなります。
ここにおいて、コネクションが本来的に持続しないプロトコルの特性が故に、先述のような手法を用いる必要があります。
しかし、レスポンスごとにコネクションが切断されるということは、一回発言があると、そのたびに再度コネクション確立のオーバーヘッドがのしかかります。
このあたりはどうにもやはり不向きに思えて仕方がありません。
投稿者 邑波。 : 14:01
| コメント (0)
| トラックバック
|
|
|
|
2006年06月14日
|
|
|
トラフィックの量を調べたいということで、MRTGを導入することにした。
MRTGはSNMTをしゃべってその結果を加工するようなので、SNMPエージェントも設定しないといけない。
ということで、まず、SNMPエージェントを設定。
patitude install snmpd, snmp, mrtg
エージェントのテストのためにSNMPも入れておく。
自分で自分を監視するので、ローカルのみアクセス制御を設定する。
[/etc/snmp/snmpd.conf]
# コミュニティとセキュリティのマップ
# sec.name source community
com2sec local 127.0.0.1 private
# セキュリティとグループのマップ
# sec.model sec.name
group MyRWGroup v1 local
group MyRWGroup v2c local
group MyRWGroup usm local
# グループのアクセス制御設定
# context sec.model sec.level match read write notif
access MyRWGroup "" any noauth exact all all none
コミュニティ名はprivateのままつかわないこと。
アクセス制御は読み込みだけでも問題ない。
設定したらデーモンを再起動して、接続テスト。
/etc/init.d/snmpd restart
snmpwalk -v 1 -c private localhost
なんかMIB情報がずらずら出てきたらOK。
次にmrtgの方。
debianだと設定ファイルを/etc/mrtg.cfgにおくんだけども、ちゃんと分けて配置したいので、/etc/mrtg/mrtg.cfgに置く。
で、cfgmakerでmrtgの設定ファイルのひな形を作るんだけども、どうやら、IPエイリアスしてるのは区別できないっぽい。
cfgmaker --ifref=ip private@localhost
とかやってもだめ。
そうなると、PPPoEセッション別にトラフィックを調べるには、NIC二枚差すか、SNMPのしゃべれる賢いルータを使うしかないらしい。
最低でもYAMAHAクラス。
貧乏人はあきらめます。
ついでに、ルータでトラフィックを調べてるわけではないので、LAN内部からのトラフィックも加算される。
まあ、目安にはなるだろうということで、設定を継続することに。
シェルは/bin/falseなmrtgユーザを追加しておく。
ついでに、CPUの方も眺めたいので、それも設定。
cfgmaker --ifref=eth > /etc/mrtg/mrtg.cfg
[/etc/mrtg/mrtg.cfg]
### Global Config Options
# ディレクトリはあらかじめ掘っておくこと
Htmldir: /home/mrtg/public_html
Imagedir: /home/mrtg/public_html/images
IconDir: icons
#logはウェブから見えない場所に配置
Logdir: /var/log/mrtg
### Global Defaults
Language: eucjp
EnableIPv6: no
Interval: 5
Refresh: 300
Target[traffic]: !00-00-00-00-00-00:private@localhost:
# ギガビットLANなので、MaxBytesは 1G/8 = 125,000,000
MaxBytes[traffic]: 125000000
Options[traffic]: growright, noinfo
Title[traffic]: Traffic Analysis for 00-00-00-00-00-00
PageTop[traffic]: 適当に
#.1.3.6.1.4.1.2021.10.1.5.1&.1.3.6.1.4.1.2021.10.1.5.2の値は、CPU利用率ではない
# http://www.strikeout.jp/karaburi/2004/08/netsnmp_mrtgcpu_1.html 参照
Target[cpu_load]: .1.3.6.1.4.1.2021.11.50.0&.1.3.6.1.4.1.2021.11.52.0:private@localhost
MaxBytes[cpu_load]: 100
Options[cpu_load]: growright,nopercent,noinfo
Title[cpu_load]: CPU load average
YLegend[cpu_load]: CPU load average(%)
LegendI[cpu_load]: User
LegendO[cpu_load]: System
Legend1[cpu_load]: CPU load average(User)(%)
Legend2[cpu_load]: CPU load average(System)(%)
ShortLegend[cpu_load]: %
PageTop[cpu_load]: 適当に
次にmrtgユーザで実行できるように、オーナーを変えておく。
ディレクトリがなければ掘っておく。
chown mrtg:mrtg /var/lock/mrtg
chown -R mrtg:mrtg /var/lib/mrtg
chown -R mrtg:mrtg /home/mrtg
chown -R mrtg:mrtg /etc/mrtg
mrtgをデーモンモードで動かすので、起動停止スクリプトを作成。
/var/run/mrtgディレクトリをつくって、オーナーをmrtgユーザに変えておく。
[/etc/init.d/mrtg]
#/bin/sh
MRTG=/usr/bin/mrtg
CONF=/etc/mrtg/mrtg.cfg
PIDFILE=/var/run/mrtg/mrtg.pid
LOGFIE=/var/log/mrtg/mrtg.log
USER=mrtg
GROUP=mrtg
if [ ! -x ${MRTG} ] || [ ! -r ${CONF} ]; then
echo "executable file or config file not found."
exit 1
fi
case "$1" in
start)
if [ -f ${PIDFILE} ]; then
echo "mrtg already started."
else
${MRTG} --user=${USER} --group=${GROUP} --daemon --pid-file=${PIDFILE} --logging ${LOGFILE} ${CONF} >>${LOGFILE} 2>&1
echo "mrtg started."
fi
;;
stop)
if [ ! -f ${PIDFILE} ]; then
echo "mrtg is not running."
else
#SIGTERMだとなんかエラー出るのよね。
#正しい止め方がわからない。
kill -9 `cat ${PIDFILE}`
rm ${PIDFILE}
echo "mrtg stopped."
fi
;;
*)
echo "Usage: $0 { start | stop }"
exit 1
;;
esac
exit 0
自動起動設定追加。
update-rc.d mrtg defaults 90 10
後はindexmakerでindexを作ったりしておしまい。
後、debianだとmrtgインストール時にcronに自動的にタスクが登録されるので、それも削除。
rm /etc/cron.d/mrtg
投稿者 邑波。 : 12:39
| コメント (1)
| トラックバック
|
|
|
|
2006年06月13日
|
|
|
先日の続きになるが、PHPで書いたスクリプトで、クライアントの要求ごとにコネクションを生成するやつ。
次の日の朝、データベースのバックアップが走らなかった。
理由は。
そのPHPスクリプトがコネクションを食いつぶしていた。
コネクションを食いつぶすと、コネクションを獲得するまで待ち状態に入るため、Apacheのプロセスも激増。
そんなスクリプトなので当然タイムアウト処理も入っていないし、そもそも、悪意の持った人がそのスクリプトを100個同時に開いたりすれば一瞬で終わる。
ので、封鎖。
そして問題の速度制限。
これを回避する方法。
1. プロバをかえる
2. マルチセッションを張ってプロバイダを使い分けて、トラフィックを分散させる
1の方は、固定IPを変えなければならないのが面倒。
そこで、2を選択。
2を実現するには。
調べまくった結果、今のルータではできないことが判明。
つーか、その辺のルータ、マルチセッション対応とかいって全然対応してない。
PPPoE二つ同時にはじけるだけで、ルーティングが全然できない。
宛先のIPアドレスだけをみたルーティングしかできないマルチセッションなんてフレッツスクエア以外に何の使い道がある。
まともにマルチセッションを謳ってもいいルータは、廉価なものでは、BA8000Pro、BRL-04FMXくらいなわけだが、こいつらはNAPTセッション数の増大に弱く、結局うちのサーバじゃ使えない。
イロイロと紆余曲折はあったものの、最終的な選択は、ルータ二台でマルチセッション。
サーバをルータ化させることも考えたが、LAN内部からのパケットも全部吸い込むため、LAN内部からでかいファイルを高速で落とそうものなら、如実に影響が出そうなのでやめ。
結局、最終的なレイアウトは以下の通り。
光終端装置-HUB-+-ルータA-+
| |
+-ルータB-+-各マシンへ
ルータAのWAN側アドレスはPPPoE1、LAN側アドレスは192.168.0.1。
ルータBのWAN側アドレスはPPPoE2、LAN側アドレスは192.168.0.2。
これで各マシンはゲートウェイをどっちのルータにするかで、利用するPPPoEセッションを選択できる。
で、サーバ側はIPエイリアスを使って、内部IPを二つ持たせる。
サーバ1: 192.168.0.10
サーバ2: 192.168.0.11(エイリアス)
/etc/network/interfacesの内容
auto eth0
iface eth0 inet static
address 192.168.0.10
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 192.168.0.1
# Secondary IP Address
auto eth0:0
iface eth0:0 inet static
address 192.168.0.11
network 192.168.0.0
netmask 255.255.255.0
broadcast 192.168.0.255
ルータ1はサーバへのマスカレードは192.168.0.10へ、ルータ2は192.168.0.11へおこなうようにする。
サーバ側では、192.168.0.10からのパケットは192.168.0.1をゲートウェイとし、192.168.0.11からのパケットは192.168.0.2をゲートウェイとすることにする。
この設定はiproute2でおこなう。
192.168.0.1は、インターフェイスの設定で、デフォルトゲートウェイとして自動で設定されるのでさわらない。
192.168.0.11に関する設定だけおこなう。
/etc/iproute/rt_tableに使うテーブル名をつっこんでおく。
1 router2
とでも。
ip rule add from 192.168.0.11 table router2 prio 10000
ip route add default via 192.168.0.2 table router2
これでいけた。
ルーティングを送信元ポートまでみておこなえれば、IPエイリアスやNIC二枚差しなんてしなくてもいけるんだけども、結局やり方がわからなかった。
誰かやり方知ってる人いませんか?
投稿者 邑波。 : 20:43
| コメント (0)
| トラックバック
|
|
|
|
2006年06月12日
|
|
|
ルータが一台お亡くなりになりました。
金曜日の夜のこと。
突然外部からの接続がすさまじく重くなったとの報告。
原因究明のために、イロイロ調べる。
調べていると、前科一犯の人から、うちのせいかも?みたいな話が。
少し前に、ApacheのCPU利用率が50%も喰らうという事件があった。
しかも、その状態になっていると、Apacheの再起動に数分かかる。
原因がよくわからなかったので、とりあえず、HTTPSの処理が重いのだろうか、と思い、HTTPSで通信していたサイトの一部をHTTPに変えた。
が、しばらくたつとまたCPU利用率が上昇する。
しかし、利用率が普通のときもある。
謎に思っていたところ、その人から連絡があり、ajaxとPHPでチャットを作ったとのこと。
処理に、スリープも入っていないwhile(タイムアウト)なものが入っており、それが原因。
それで前科一犯。
でまあ、その人が、今度はデータベースを利用したキャラクタ管理システムのようなものを作ったと。
で、それが、データベースの接続をアプリ全体で使い回さないで、ユーザの接続ごとにデータベースへの接続・切断をおこなうものらしい。
それが原因かどうかは、イロイロ調べてみた感じ、違うっぽかった。
ユーザの接続ごとにDBへのコネクションを生成するのは気になったが、とりあえずこの時点ではおいておくことに。
サーバに流れてきているパケットを見てみた感じ、たいした量ではない。
ローカルネットワークでの通信は概ね良好。
速度測定サイトで速度計測してみても、全然帯域に余裕がある。
外部からはHTTP、FTP、その他も重い。
ルータを再起動すると、はじめは速度が出るが、1分もたたないうちに速度が落ちる。
試しにサーバマシンにリブートをかけても変化なし。
ルータの限界なのかとも思ったが、それなら、速度測定で速度が出る理由がわからない。
ルータの外でトラフィックが増大しているとしても、それも同じく速度測定で速度が出るのかという話。
サーバマシンの負荷であるなら、ローカルネットワークで快適というのはあてはまらないはず。
実際、先ほどのチャットの問題の時は、ローカルネットワークでも死にそうになった。
ルータの限界であれば、ルータ再起動すればしばらくは復活するはずで、30秒たらずでまたいっぱいいっぱいになるということも考えにくい。
そこで、あることに気がついた。
HTTPで通信したときには、ローカルから外部への接続が快適なのだが、FTPだと死にそうに重い。
ぐるぐる頭を巡らせた結果、一つの可能性にたどり着いた。
アサヒネットが帯域制限かけやがったのかもしれないと。
そこで、ぐぐってみると、朝日はトラフィック量が多いと、帯域制限をしやがるということがわかった。
糞プロバ認定確定。
WinnyなんかのP2Pソフト使って帯域制限かけられるとかならわからんこともないが(それでもどうかと思うが)、通常のサーバ運営もままらないというのは全くもって理解不能。
死んでくれと。
おそらく、帯域制限をかけたということをわかりにくくするために、該当ホストがリクエスト元であるHTTP通信は除外するという小細工を仕込んでいるのだろう。
おかげで、こちら側からは通常のブラウジングではストレスを感じないし、速度測定サイトで測定しても、帯域に余裕があるように見える。
以前からたまに異常にサーバへの接続が重くなることが発生していた現象の謎が、これで全て氷解した。
過去のパターンからすると、一日だか二日だか放置すると、速度が戻った記憶がある。
で、実際に戻った。
自動でスクリプトでも走らせてるんだろう。
嫌がらせにもほどがある。
投稿者 邑波。 : 15:47
| コメント (0)
| トラックバック
|
|
|
|
2006年04月26日
|
|
|
BTSがほしくていろいろ模索していて、採用することにしたのは影舞。
で、その設定メモ。
install_ja.rbの設定。
### データを保存するディレクトリなどの user と group。
### 設定しない場合には、コメントアウトしてください
$user = 'kagemai'
$group = 'www-data'
## .htaccess をコピーするかどうか
$setup_htaccess = true
### インストール先の設定
# 影舞の本体やドキュメント
$root_dir = '/etc/kagemai/'
# CGI やスタイルシート
$html_dir = '/etc/kagemai/html'
# プロジェクトのデータやログ
$data_dir = '/etc/kagemai/var'
# パスワードファイル
$passwd_dir = '/etc/kagemai/passwd'
# インストールのログ
$install_logfile = "#{$data_dir}/install.log"
$bin_dir = "#{$root_dir}/bin" # ユーティリティスクリプト
$lib_dir = "#{$root_dir}/lib" # 影舞の本体
$doc_dir = "#{$root_dir}/doc" # ドキュメント
$etc_dir = "#{$root_dir}" # README や MRTG の設定ファイルなど
$resource_dir = "#{$root_dir}/resource" # テンプレート、メッセージリソース
$html_i_dir = "#{$root_dir}/html_i" # CGI やスタイルシート(コピー用)
$user_passwd_file = "#{$passwd_dir}/user.passwd" # ユーザのパスワードファイル
$admin_passwd_file = "#{$passwd_dir}/admin.passwd" # 管理者のパスワードファイル
$project_dir = "#{$data_dir}/project" # プロジェクトのデータ
$mailif_logfile = "#{$data_dir}/mailif.log" # mailif.rb の用ログファイル
$config_file = "#{$html_dir}/kagemai.conf" # 設定ファイル
影舞用のユーザ追加
useradd -d /etc/kagemai -g www-data -s /bin/false kagemai
グループをwww-dataにしてるのは手抜き。
で、インストール。
ruby intlal_ja.rb
このとき、パスワードファイルは作らない。
/etc/kagemai/html/.htaccessの修正。
# Options +ExecCGI -Indexes
DirectoryIndex index.html guest.cgi
### for cgi
# AddHandler cgi-script cgi
### for mod_ruby
#<Files "*.cgi">
# SetHandler ruby-object
# RubyHandler Apache::RubyRun.instance
#</Files>
<Files "*.conf*">
deny from all
</Files>
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
<Files user.cgi>
AuthName Kagemai-User
AuthType Digest
AuthDigestDomain /
AuthDigestFile /etc/kagemai/passwd/kagemai.passwd
Require valid-user
</Files>
<Files admin.cgi>
AuthName Kagemai-Administrator
AuthType Digest
AuthDigestDomain /
AuthDigestFile /etc/kagemai/passwd/kagemai.passwd
Require valid-user
</Files>
うちじゃmod_ruby使うと動いてくれない。
IEはくずなので、ダイジェスト認証でGETパラメータをわたしやがらないので、
BrowserMatch "MSIE" AuthDigestEnableQueryStringHack=On
を書かないと、認証にこける。
apacheのバーチャルホスト設定
<VirtualHost xxx.xxx.xxx.xxx:443>
ServerName xxx.waterblue.net:443
DocumentRoot /etc/kagemai/html
SSLEngine on
</VirtualHost>
影舞用データベースとユーザ準備。
設定したバーチャルホストにアクセス。
管理画面にhtdigestで設定した管理者ユーザでアクセスして、データベース設定。
プロジェクト作成時にデータベースを使って保存するようにして後はご自由に。
つーか、いろいろいじってるっとIEだと問題が起きすぎ。
digest認証を用いる場合、IEを使うのはよした方が良さそうです。
Firefoxに乗り換えるかな。
投稿者 邑波。 : 20:25
| コメント (0)
| トラックバック
|
|
|
|
2006年04月24日
|
|
|
片っ端からパッケージをつっこんで、削除とか繰り返していると、孤立したパッケージが生まれることがあります。
とくにunstableだったりすると。
で、そうした邪魔なパッケージのお掃除をするのにいいものはないかと思って探していたら、ありました。
deborphanなるものが。
deborphan --guess-all
こうすると、孤立してるパッケージを洗ってくれます。
aptitude purge `deborphan --guess-all`
とかすると一気に消してくれそうです。
orphanerを使うと、表示だけじゃなくて削除もできます。
orphaner --purge --guess-all
でサヨウナラ。
投稿者 邑波。 : 14:53
| コメント (0)
| トラックバック
|
|
|
|
2006年03月13日
|
|
|
備忘録的に。
あらかじめカーネルパッケージをつっこむ。
aptitude install kernel-package
ftp://ftp.kernel.org/pub/
からほしいバージョンを落とす。
/usr/src/
にっつっこむ。
展開。
展開先ディレクトリに移動。
既存のコンフィグを引き継ぐために現在の設定を持ってくる。
cp /boot/config-xxxx .config
引き継ぎ。
make oldconfig
新規設定値もここで設定可能。
さらにいじる場合。
make menuconfig
コンフィグが終わったらパッケージを作る。
とりあえず、カーネルイメージとヘッダがあればいいやってことで、
make-kpkg --rootcmd fakeroot --revision 1 binary-arch
このマシンスペックで30分以上かかるんですか、そうですか。
インスコ。
su -
dpkg -i kernel-image-2.6.xxxx_1.deb
dpkg -i kernel-header-2.6.xxxx_1.deb
イメージつっこむとgrubの更新もしてくれる。
が。
ラムディスクイメージは入れてくれない。
cd /boot
mkinitrd -o initrd.img-2.6.xxxx /lib/modules/2.6.xxxx
update-grub
とする。
投稿者 邑波。 : 17:58
| コメント (0)
| トラックバック
|
|
|
|
2006年03月02日
|
|
|
中国・韓国・台湾・香港・一部の国内ネットワークに関して、アクセス規制を行った。
一気に数百のフィルタを追加したので、もしかしたら重くなるかもしれない。
リストから漏れているのもたくさんあるだろうけど、だいぶましになるんじゃないかと期待。
お行儀の悪いのは見つかり次第規制することに。
投稿者 邑波。 : 22:41
| コメント (0)
| トラックバック
|
|
|
|
2006年01月13日
|
|
|
MTUが1454でMSS1414ということで、TCP Window Sizeを56560あたりに設定してみようとした、っていうか、した。
それはいいんだが、なぜか5656以上で設定しても頭打ちになる。
どうも、その現象に遭遇している人をみつけることはできたが、やはり、MSSの4倍で止まる。
どういう仕組みでそうなってるのか全く持って不明。
誰か打開策を教えてください。
TCP Window SizeはRWINね。
投稿者 邑波。 : 18:13
| コメント (0)
| トラックバック
|
|
|
|
2006年01月08日
|
|
|
|
|
|
|
|
2005年12月21日
|
|
|
CVSに代わるバージョン管理システムとして昨今注目を集めているSubversion。
OSSの世界でもCVSではなくSubversionを使っているプロジェクトは多いです。
っていうことで、うちでも導入してみた。
まあ、一通り理解すれば、設定は容易ですし、CVSでかゆくて手が届かなかった部分にも工夫を凝らしていてなかなかいいです。
一般的にSubversionが支持されている理由のリファクタリングに関することだとかリビジョン管理方式だとかも当然いいんですが、hookインターフェイスが用意されていたりするのは気が利いています。
アクセス制御も容易にできますし、WebDAVを利用すればApacheの認証機構も利用できるし、経路の暗号化も簡単ですし。
ただ、どうも見えないところにまだまだバグが潜んでいる感があります。
特定ファイルが存在すると、チェックアウトに失敗したりしました。
ああ、でも、httpsでやったらダメだったけど、fileでやったら通ったので、Apacheの方のバグなのかも。
Apacheは相手(Subversionクライアント)に切断されたいうてたけど、まあ、どっちがどっちか正直わかりません。
サーバをたてるのにApache2のライブラリが必要なのは減点ですけど、きっちりロック方式との併用も可能だったりして、かなりいいんじゃないでしょうか。
投稿者 邑波。 : 22:16
| コメント (0)
| トラックバック
|
|
|
|
2005年12月15日
|
|
|
一枚のNICに複数のIPアドレスを付与する技術ってことで、IP Aliasってのがあるようです。
名前から察するに、実態は主アドレスのみで、文字通りaliasなのでしょうか。
auto eth0:0
iface eth0:0 inet static
address 192.168.1.100
network 192.168.1.0
netmask 255.255.255.0
broadcast 192.168.1.255
mtu 1454
こんな感じで設定してみたんですが、ip routeやiptablesでデバイスを指定してルーティングやパケットのフィルタリングを指定しても、eth0:0というデバイスはないと怒られます。
デバイスはあくまでもeth0ってことらしいです。
おかげで想像していた設定と全然異なり。
そのくせ、ifupやifdownでは異なるデバイスってことで認識されるので、$IFACEにeth0:0が入っていたりします。
Networking HowToとかイロイロと文書を読みあさっていた中で、IP Aliasはkernel2.6だか2.4だか以降は重要視される技術ではなくなったみたいなことが書いてあった気がします
NICをはじめとしたネットワーク関連機器もやすくなったし、ややこしいことするくらいならハード買った方がいいってことですかね。
時に、ルーティングの設定で、table 1にこんなん設定したんですが、これって無意味かなとか思いつつ。
# lower src is 192.168.1.1
$IP rule add from 192.168.1.1 table 1 pref 30001
$IP route add 192.168.1.100 table 1 dev eth0 window 2828
# higher other local network
$IP rule add from 192.168.1.0/24 table 2 pref 30002
$IP route add 192.168.1.100 table 2 dev eth0 window 56560
# from IP Alias to local network
$IP rule add from 192.168.1.100 table 3 pref 30003
$IP route add 192.168.1.0/24 table 3 dev eth0 window 56560
ルータのNAPTって、DNATしてるだけでSNATしてないような気がするんですが、念のためって感じで。
でも無意味そうだなぁ。
調べるのがだるいからまあいいか。
---
追記
ってさあ。
サーバのログに接続元のグローバルIPが記録されてるんだからSNATされてないわな。
ルータのNAPTはiptablesのFORWARDチェインの役割って考えりゃいい話で。
最近、イロイロとドキュメント読みすぎで脳みそがまとまってない。(ノ∀`)
投稿者 邑波。 : 11:40
| コメント (0)
| トラックバック
|
|
|
|
2005年12月09日
|
|
|
名前ベースのバーチャルホストは SSL プロトコルの特徴により、 SSL セキュアサーバには使えません。
http://httpd.apache.org/docs/2.0/ja/vhosts/name-based.html
とういことだったんで、うちのサーバじゃsecure.waterblue.netをSSL専用として取り扱うようにしてたんですけど、ふと思い立って、試しにSSLに名前ベースのバーチャルホストを適用してみる設定をしてみた。
そしたら、できた。
はてさて。
一応、証拠。
https://union.waterblue.net/
https://secure.waterblue.net/
追記
なんで名前ベースのバーチャルホストはSSLじゃ使えないとしているのでしょう。
それともapache2のバージョンアップに伴い、できるようになったっていうだけ?
証明書の発行が面倒なのと、ドメイン取得が面倒なのとで試しませんが、同一IPアドレスでドメインが異なるような場合でも可能な気がします。
再追記
Why can't I use SSL with name-based/non-IP-based virtual hosts? [L]
The reason is very technical. Actually it's some sort of a chicken and egg problem: The SSL protocol layer stays below the HTTP protocol layer and encapsulates HTTP. When an SSL connection (HTTPS) is established Apache/mod_ssl has to negotiate the SSL protocol parameters with the client. For this mod_ssl has to consult the configuration of the virtual server (for instance it has to look for the cipher suite, the server certificate, etc.). But in order to dispatch to the correct virtual server Apache has to know the Host HTTP header field. For this the HTTP request header has to be read. This cannot be done before the SSL handshake is finished. But the information is already needed at the SSL handshake phase. Bingo!
http://www.modssl.org/docs/2.8/ssl_faq.html#ToC47
なるほど。
ということは、ドメインが異なる場合は無理くさい。
投稿者 邑波。 : 19:21
| コメント (0)
| トラックバック
|
|
|
|
2005年11月10日
|
| ■iptablesのipt_recentモジュールが狂った |
|
|
うちのサーバではパケットのフィルタのためにiptablesを使っているんですが、こいつが突然狂い始めた。
ipt_recentモジュールを使ってbrute force対策を行っているわけだが、こいつの条件式が正しく動いてくれない。
関連部分を抜粋すると以下のような部分。
IPTABLES="/sbin/iptables"
$IPTABLES -N isbfssh
$IPTABLES -N bfssh
$IPTABLES -A isbfssh -m recent --name badssh --set -j LOG --log-level INFO --log-prefix "iptables SSH REJECT "
$IPTABLES -A isbfssh -j REJECT
$IPTABLES -A bfssh -p tcp --syn -m recent --name badssh --rcheck --seconds 300 -j REJECT
$IPTABLES -A bfssh -p tcp --syn -m recent --name sshconn --rcheck --seconds 60 --hitcount 5 -j isbfssh
$IPTABLES -A bfssh -p tcp --syn -m recent --name sshconn --set
斜字体の部分の判定が正しく行ってくれず、秒数もヒット数も無視して、sshconnに存在するだけで isbfssh に飛びやがる。
/proc/net/ipt_recentをチェックしながら動きを確かめたが、見事に存在するだけで条件一致に見なされる。
試しに、--secondsオプションのみの動作、--hitcountオプションのみの動作を確認してみたが、そのときは正しい動作をする。
つまり、--secondsと--hitcountの併用をするとバグった判定をするということだ。
しかし、それらを併用しないとなると、同じことをやろうとするとチェインのルールの書き方が煩雑になる。
困った。
誰か解決法知りませんか。
iptablesのバージョンは1.3.3-2。
この前apt-get upgradeしたときから狂ったんだろうが。。。原因は何なんだ。(;´Д`)
投稿者 邑波。 : 01:21
| コメント (0)
| トラックバック
|
|
|
|
2005年09月26日
|
|
|
サーバが数日間落ちていました。
というか、まあ、落ちていたってのは語弊があるんですけど、そういうことにしておきます。
だいぶ復旧はしたんですけど、まだいくらかやることが残っており。
っていうか、smtpの設定がめんどくさすぎ。
でもまあ、いくらサーバをセキュアにしたところで、ユーザにセキュリティに対する意識がなければ意味がないですね。
投稿者 邑波。 : 01:31
| コメント (0)
| トラックバック
|
|
|
|
2005年08月11日
|
|
|
なんか立て続けの連続エントリー。
これで終わりです。
水青鯖はまあ自前の鯖なわけでして、メールとかのサービスが走っております。
でまあ、暗号化接続とかやっており、そのため、自前で CA たてて証明書を発行していたりします。
で、今日 5:00 頃にメーラを起動したら、証明書の期限が有効じゃないといわれ。
調べてみたら、確かに切れてました。
openssl コマンドを駆使して証明書の再発行をしたわけですが、相変わらず openssl は使いにくい。
一つに詰め込みすぎなんですよ、どう考えても。
でも、反面やはり高機能なんでないと困るわけですが。
もちっと使いやすければなぁ。
投稿者 邑波。 : 08:37
| コメント (1)
| トラックバック
|
|
|
|
2005年07月19日
|
|
|
|
|
|
|
|
2005年06月23日
|
|
|
過去の残骸なんですが、当時、php3 の時代、php 扱いする拡張子に、.php3 というものが入っておりまして。
今は .php だったり .phtml だったりするんですけど、過去の遺産のせいで期待に反した動きをすることが。
そんなわけで、.php3 も使えるように設定。
投稿者 邑波。 : 01:35
| コメント (0)
| トラックバック
|
|
|
|
2005年05月05日
|
|
|
ふと思い立って、うちのサーバに https でアクセスしてみた。
で、サーバが見つからないか DNS エラーですと怒られてみた。
なるほど。
https の設定やってなかったなと。
で、設定をし始めて数分後。
設定完了と思い、apache をリスタート。
。。。
動かないじゃん。(ノ∀`)
VirtualHost ディレクティブの使い方に何か問題があるのかと思い、ぐぐる。
NameVirtualHost も念のためぐぐる。
ぐぐる。
。。。
何がだめなのかわからない。_| ̄|○
おかしい。
証明書をチェックする。
いや、そんなのチェックしたところで、起動云々には関係しないはずだけどチェック。
ばっちり問題ない。
と思う。
やばい。
はまりパターン来た。_| ̄|○
挙げ句の果てに、水青がみられませんよとクレームまで来る始末。
一旦設定を切り離して起動させる。
とりあえず、ひたすら調べてもそれらしい答えが出てこない。
さて、困った。
ふと tail -f /var/log/apache2/error.log をたたく。
アパッチ再起動。
(2)No such file or directory: apache2: could not open error log file /var/log/apach2/error.log.
Unable to open logs
/var/log/apach2/error.log
/var/log/apach2/error.log
orz。
はまる時ってそういうもんですね。_| ̄|○
投稿者 邑波。 : 17:16
| コメント (1)
| トラックバック
|
|
|
|
2005年04月20日
|
|
|
ftp に接続できないとのクレームが。
xinetd 経由で起動しているのですが、どうにも接続できなくなるときが。
で、proftpd の設定をみてみたのですがデグレかましていました。
とりあえず直すだけ直して、しばらくは xinetd 経由のままで様子を見ます。
どうしようもなかったら standalone も検討しますが。
投稿者 邑波。 : 19:39
| コメント (0)
| トラックバック
|
|
|
|
2005年04月11日
|
|
|
logrotate の設定がうまくいった模様で、ちゃんとバックアップがローテーションされていました。
これで、バックアップ体制は一通り整った感があります。
残るは UPS だなー。
どうしたものか。
投稿者 邑波。 : 20:18
| コメント (0)
| トラックバック
|
|
|
|
2005年04月10日
|
|
|
DB のダンプは postgres, mysql ともにちゃんととってくれた模様。
/home のバックアップもうまくいっているようです。
ですが、DB のダンプのローテートがなんかうまく動いてくれた形跡がありません。
ので、ちょっと修正。
daily
compress
delaycompress
create 640 postgres postgres
nomissingok
noolddir
notifempty
rotate 10
こんな感じでいかがなものか。
投稿者 邑波。 : 13:48
| コメント (0)
| トラックバック
|
|
|
|
2005年04月09日
|
|
|
logrotate を利用することに。
そんなわけで。
daily
nocompress
nocreate
nomissingok
noolddir
notifempty
rotate 10
こんな感じかな。(´・ω・`)
投稿者 邑波。 : 15:31
| コメント (0)
| トラックバック
|
|
|
|
|
/etc/cron.daily に。
#!/bin/sh
rsync -acou /etc /home /var /root /usr /backup
これでイイか?(´・ω・`)
投稿者 邑波。 : 15:27
| コメント (2)
| トラックバック
|
|
|
|
|
ユーザごとの crontab と、/etc/crontab の書き方って微妙に違うんですね。
自爆していました。
これで直った予定。(;´Д`)
投稿者 邑波。 : 14:47
| コメント (0)
| トラックバック
|
|
|
|
2005年04月07日
|
|
|
ひとまず適当なシェルスクリプトを作り、cron でぶっ叩くようにしました。
毎日バックアップをとるように設定しましたが、ローテートはしないです。
一週間くらいローテートさせるように書き換えたいのですが、考えるのがだるいのでやめました。
ということで、誰かやって。('A`)
----------------
と思いきや。
/bin/sh: postgres: command not found
という情けないメールが cron からとんできた。
確認してみたところ。
パスが違うじゃん。_| ̄|○
今日こそ大丈夫。
なはず。
投稿者 邑波。 : 16:52
| コメント (3)
| トラックバック
|
|
|
|
2005年04月05日
|
|
|
りこの人に指摘されて初めて気がついたのですが、ログでてないね。・゚・(ノД`)・゚・
とりあえず、combined で出力するように設定しました。
ていうか、なんで CustomLog ディレクティブが無いのよ。
しかも 3/20 からという中途半端な時期から。
まあ、今はでてるのでよしとします。
ついでに timeout を 15 -> 30 sec に調整してみた。
投稿者 邑波。 : 14:17
| コメント (1)
| トラックバック
|
|