YahooBBの様な 逆引きが *.jp でないホストから irc.dti.ne.jp /
irc.huie.hokudai.ac.jp のIRCサーバに接続を試みたとき、Denied Access となり接続出
来ない場合が有ります。
理由は、YahooBB の逆引きホスト及び、IPアドレスが I-Line に登録されていないためで
す。そのため、貴方は接続する権利がないと言われ接続が出来ない事
が多いようです。
この場合はirc.*.wide.ad.jp に繋げば大半の場合は繋がるでしょう。 irc.*.wide.ad.jp では逆引きできなかった人の為に、国内のプロバイダが割り当てている ブロックのIPアドレスの大半は i-Line に登録されています (その代わり +r になりますが…)。
※I-Line : 接続を許可しているホストのリスト ※i-Line : 制限付きで許可をしているホストのリスト
この辺の I-Line や i-Line 、密接に関わりのある Y-Line に関しては、 MaxConnectionに詳細を書いています。
open proxy(オープンなWebプロキシサーバ)を拒否しているケース です。これは、irc6.nara.wide.ad.jp を除く *.jp servers が2002年の8月末から hemp-patch という version のIRCサーバを使い始めたことによるもので、だれもが 使えるオープンなプロキシサーバを拒否するという機能をもったプログラムです。
このパッチにより、外国人等による不正中継を防ぐという効果を持っています。不正 中継が出来てしまうと、意図せぬ人が勝手に接続をし、チャンネルを乗っ取ったりす るのに使われる事などが有ります。 hemp-patch 自体の機能はまだまだ有りますがここでは割愛します。
このパッチの仕様は、接続してきたホストのIPアドレスに対して、port番号 80, 3128, 8080, 10080 に以下のような接続を試みます。また、これが、IRCサーバか らポートスキャンされると言いわれる原因の一つでもあります。調査をする ポートについての詳細は /stats a とサーバに問い合わせることにより情報が取得出 来ます。
CONNECT "irc.nara.wide.ad.jp:6667" HTTP/1.0
そのときに、以下のように返せばオープンプロキシとして拒否されます。
HTTP/1.1 200 OK
その際には、IRCサーバから以下のように表示されます。
ERROR :Closing Link: tomochaaa[unknown@xxx.xxx.xxx.xxx (貴方のIP)] (Denied access)
それと同時に、接続を試みたサーバの &local チャンネルには NOTICE で以下のよう なメッセージが残されます。
Denied connection from nick[@yourhost]. (web-proxy 80)
理由の一つに、router への接続を外部から許してしまい、且つ CONNECTメ ソット を許し、且つ“ HTTP/1.1 200 OK ”を返した場合のみ拒否されま す。 一時期メルコ製のルータ等に有りましたが、現在のはファームウ ェアで修正されているようです。そのような事がある場合は、早急に設定を見直した り、ルータのファームウェアをアップデートした方が良いでしょう。
そのほかの現象では、YahooBB のトリオモデム(無線LANルータタイプ)を 利用した場合も同様の現象が発生し、接続を拒否される場合があります。 この場合、私はルータに関しての設定画面についての詳細情報を持ち合わせておりま せんので、このようにすることにより、対処出来るという情報がありましたら教えて 頂けると幸いです。 また、詳細を検証する環境を提供して頂ける方がおられれば尚幸いです。
以下は実際に YahooBB のトリオモデムに外から接続してみた場合の様子です。
$ telnet YahooBBxxxxxxxxxxxx.bbtec.net 80 Trying xxx.xxx.xxx.xxx... Connected to YahooBBxxxxxxxxxxxx.bbtec.net. Escape character is '^]'. connect irc.nara.wide.ad.jp:6667 HTTP/1.0 HTTP/1.0 200 OK Content-type: text/html <html> <body><h1>400 Bad Request</h1> <p>Request Error.</p></body> </html>
Apache の mod_proxy や Squid 等のプロキシサーバ等の設定が適切ではなく、中継が 出来る状態に有る場合拒否されます。設定を見直しましょう。
Wikiウェアを利用している場合も拒否される場合があります。 なぜそうなるかという理由は分かっていませんが、Apache の Default の Document Root の / ( ドメイン情報を含まないリクエストに対しての応答するページ) にwiki 等を設置した場合、CONNECTメソットを許可してしまうことが解りました。 また、CGI、PHP、Ruby 等を Default の Document Root に置いても同じ現象が発生し ます。
以下 wiki を利用して検証してみた結果です。
利用したサーバは、woody.debian-users.org なホストで、 FreeBSD 4.7-RELEASE + Apache 1.3.27 です。ここでは、Wikiウェア は Hiki を利用しました。
そのとき、Hiki を Document Root に置く(すなわちIPアドレスでアクセスした場合 Hiki が表示できる状態)と Apache は 以下のような結果を示します。そのため、 web-proxy として見なされてしまい、接続を拒否されてしまいます。
$ telnet 61.213.130.36 80 CONNECT irc.nara.wide.ad.jp:6669 HTTP/1.0 HTTP/1.1 200 OK Date: Fri, 18 Jul 2003 12:25:11 GMT Server: Apache/1.3.27 (Unix) mod_perl/1.27 PHP/3.0.18 PHP/4.2.3 Cache-Control: no-cache Content-Language: ja Pragma: no-cache Last-Modified: Fri, 18 Jul 2003 08:14:47 GMT Content-Length: 3331 Connection: close Content-Type: text/html; charset=EUC-JP
しかし、Hiki がIPアドレスに対してアクセスしたとき、TOPページじゃなければ、以 下のように返し、proxy機能が無いと判断され、IRCサーバへ接続が出来ます。
$ telnet 61.213.130.36 80 CONNECT irc.nara.wide.ad.jp:6669 HTTP/1.0 HTTP/1.1 405 Method Not Allowed Date: Fri, 18 Jul 2003 12:24:45 GMT Server: Apache/1.3.27 (Unix) mod_perl/1.27 PHP/3.0.18 PHP/4.2.3 Connection: close Content-Type: text/html; charset=iso-8859-1
まず、以下のような簡単なスクリプトを置いてみる。CGIにもならず、簡単なシェル スクリプト。である。この辺の情報を寄せてくれた氷魚ちゃんサンクス。
$ cat index.cgi #!/bin/sh echo "Content-Type: text/plain" echo "" echo "ok" echo "req: $REQUEST_METHOD"
次に、telnet で実際に VirtualDomain の情報を渡さず、Document Root となる場所 に置いた index.cgi が実行される様子である。
$ telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. GET / HTTP/1.0 HTTP/1.1 200 OK Date: Thu, 11 Dec 2003 23:17:52 GMT Server: Apache/1.3.27 (Unix) Debian GNU/Linux Connection: close Content-Type: text/plain; charset=iso-8859-1 ok req: GET Connection closed by foreign host.
$ telnet 127.0.0.1 80 Trying 127.0.0.1... Connected to 127.0.0.1. Escape character is '^]'. CONNECT irc.nara.wide.ad.jp:6667 HTTP/1.0 HTTP/1.1 200 OK Date: Thu, 11 Dec 2003 23:17:21 GMT Server: Apache/1.3.27 (Unix) Debian GNU/Linux Connection: close Content-Type: text/plain; charset=iso-8859-1 ok req: CONNECT Connection closed by foreign host.
結果より、動的ページを置いた状態にすると、確実に HTTP/1.1 200 OK を返すことが 分かる。これは Apache の仕様なのかは分からないが…。何とかならない物だろうか? この状態にぶち当たり悩んでいる方々がおられればこのドキュメントにより解決への 導く手がかりになることを期待する。
TOPページをHikiにするという場合、VirtualDomain で、IPに対してアクセスがあっ た場合、Hiki を表示しないように構成するのが解決策だと考えられます。
以下が.httpd.conf の virtual domainの設定です。IPアドレスで接続したとき、Hiki が表示される状態の例です。
<VirtualHost 61.213.130.36:80> ServerAdmin tomo[at]tomocha.net DocumentRoot /home/www/shotamoe.net/netsuzou/public_html/ ServerName 61.213.130.36 </virtualHost>
固定IPではなくDDNS等を使っているので有れば、DDNS名に対して、設定すればよいで しょう。IPアドレスでアクセスをしてくるって事は普通はあり得ないでしょうから…
<VirtualHost *:80> ServerAdmin tomo[at]tomocha.net ServerName tomo.arege.jp DocumentRoot /home/www/shotamoe.net/netsuzou/public_html/ </virtualHost>
IPアドレスでアクセスしたとき、Hiki以外の場合以下のような感じで Default の Document Root に対して以下のようにダミーページを作成しておくと良いでしょう。
<VirtualHost 61.213.130.36:80> ServerName 61.213.130.36 ServerAdmin tomo@example.jp DocumentRoot /home/www/document_root/public_html </virtualHost>
<VirtualHost _default_:80> ServerName www.example.jp ServerAdmin tomo[at]example.jp DocumentRoot /home/www/document_root/public_html/ </virtualHost>
そのほかの対処方法としては、IRCサーバから PORT 80にやってくるパケットを落と すことでも対応出来るでしょうが、根本的な解決方法にはならないでしょう。 これ以外にも、投げることの出来るメソットを制限させることにより制御が可能なの もしれません。