IPTablesおよびポートリダイレクトApache2


1

私は(ポートへのサブドメインをリダイレクトするようにApacheを使用していますmod_proxymod_proxy_httpmod_proxy_ajp私とローカルサーバを除いて、ダイレクトポートアクセスを制限する)とIPテーブル。

私のIPテーブルは次のようになります。

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:tproxy
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:http-alt
DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:webmin
ACCEPT     tcp  --  localhost            anywhere             tcp dpt:webmin

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

この投稿で使用するコンテキストは次のとおりです。

ソナタイプネクサス: nexus.example.com => example.com:8081

ジェンキンズCI: jenkins.example.com => example.com:8080

Webmin: webmin.example.com => example.com:10000

私が今働いているのは、私以外のポートへの直接アクセスではありません。また、ローカルシステムがポートにアクセスできるようにしたいと考えています。私はmod_proxy_ajpJenkins CIとWebminおよびmod_proxy_httpSonatype Nexusに使用しています。

ダイレクトポートにアクセスすると、これらの各サービスは問題なくロードされます。私が他の誰かにそれぞれをロードするように頼んだとき、彼らはできないので、それは働いています。

しかし、今では、サブドメインの1つにアクセスしようとすると、終わりのない負荷(無限ループ?)が発生します。

ただし、サブドメインでtracertを実行すると、無限ループを解消できるように正常に終了します。

Sonatype Nexus Apache仮想ホストの構成は次のとおりです。

<VirtualHost *:80>
        ServerName nexus.majornoob.com
        ServerAlias www.nexus.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / http://localhost:8081/
        ProxyPassReverse / http://localhost:8081/
        ProxyPassReverseCookiePath / /
        ErrorLog /var/www/majornoob/error-nexus.log
        LogLevel warn
        CustomLog /var/www/majornoob/access-nexus.log combined
</VirtualHost>

ここに私のジェンキンスがいます:

<VirtualHost *:80>
        ServerName jenkins.majornoob.com
        ServerAlias www.jenkins.majornoob.com
        ProxyRequests Off
        ProxyPreserveHost On
        ProxyPass / ajp://127.0.0.1:8080/
        ProxyPassReverse / ajp://127.0.0.1:8080/
        ProxyPassReverseCookiePath / /

        ErrorLog /var/www/majornoob/error-jenkins.log

        LogLevel warn

        CustomLog /var/www/majornoob/access-jenkins.log combined
</VirtualHost>

これら2つの仮想ホストの例はmod_proxy_ajpmod_proxy_httpそれぞれとを使用しています。

誰が私が無限の負荷を得る理由を理解するのを助けることができますか?

ありがとう。

編集:無限ループを気にしません。しばらくして、503 Service Unavailableエラーを受け取りました。

回答:


1

iptablesルールは、印刷順に上から下の順に評価されます。あなたが持っている問題は、プロキシ接続がこのルールに一致するローカルホストからであることです:

DROP       tcp  -- !c-24-7-110-109.hsd1.ca.comcast.net  anywhere             tcp dpt:tproxy

localhostではないc-24-7-...ため、接続はドロップされます。プロキシモジュールは最終的にタイムアウトします。ルールがDROPではなくREJECTである場合、エラーがはるかに速くなります(接続試行が消えるのではなく、明示的に拒否されるため)。

解決策は非常に簡単です。「他の場所からの拒否」の前に「localhostからの受諾」を持つようにルールを並べ替えます。(IPルーティングは最も具体的に一致しますが、iptablesは多要素であるため、必ずしも定義されているわけではありません)。

一般に、すべてのローカルホスト通信を許可する最初のルールを作成することをお勧めします(誰かがイーサネット上で奇妙なことをしようとした場合に備えて、ループバックインターフェイス経由で)。追加してみてください

iptables -I INPUT -i lo -s localhost -d localhost -j ACCEPT

-Iリストの先頭に挿入()します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.