Denied Access と表示され、接続を拒否される

57990, Today: 001, Yesterday: 002 Hits


【 逆引きホストのケース 】

YahooBB等のようなnot *.jp のような逆引きホストでは有りませんか?

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に詳細を書いています。

【 オープンプロキシサーバとして判断されているケース 】

hemp-patch による認証

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>

Webサーバを立ち上げたり、Proxyサーバを立ち上げたりしていませんか?

Apache の mod_proxy や Squid 等のプロキシサーバ等の設定が適切ではなく、中継が 出来る状態に有る場合拒否されます。設定を見直しましょう。

Apache を利用しており、 サイトの / [Root]等に wiki 等の動的ページを設置していませんか?

原因編

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 を利用しました。

検証編 その1 - 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

検証編 その2 - CGIを置いてみた場合

まず、以下のような簡単なスクリプトを置いてみる。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にやってくるパケットを落と すことでも対応出来るでしょうが、根本的な解決方法にはならないでしょう。 これ以外にも、投げることの出来るメソットを制限させることにより制御が可能なの もしれません。

Copyright (C) 1998-2004 tomocha
Last update: 2004-07-08
tomo@gyojya.jp