2020年2月6日木曜日

SSL通信は透過するけれども、http通信は透過しないという不思議状況に悩まされる FATAL: mimeLoadIcon: cannot parse internal URL:

CENTOS8で、透過SSLプロキシを建てようとしたはいいものの、諸々はまって、最後に原因が分からないけれども
何とかなったという、誰か真面目に説明して欲しい位の何かにはまったので書いておく。

はまりポイント1

nftablesの意味が分からなかった。
8からnftablesに変わるから覚えなきゃ、で始めたのだけれども、
iptablesのノリで出来る物だと思っていたら、何か御作法が全然違う。iptablesをnftablesの設定に変換できるので、
変換してみたのだけれども、同じ文法で書いてみても適用時にエラーが出る。
なので、3日間位がっつり調べたり試したりしたが、nftablesは未だ早いという結論に至った。
nftablesは書籍は勿論、ウェブページでも扱っているところが少なすぎて、何をどうすればこうなるが全く頭に入らなかった。
結局nftablesを覚えなくても、iptablesがそのまま使える(内部的にはnftablesに変わっている)ので、iptablesで進めることにした。

はまりポイント2

firewalldを無効にしなかった
どうせ中身はnftablesなのだから、と思っていたら、思いっきり相互干渉してしまっていた。
全く用を為さないわけでは無く、部分的に効いたりするからタチが悪い。
しかもエラーメッセージはないので、原因解明に1日潰した。
firewalldだけ潰して再起動をかける。(似たあるあるで、selinuxの無効有効を忘れるとか)。

はまりポイント3

squidのhttp_portを2つ入れなければならなかった。
これが謎の大元。何回やっても、https(SSL)は通っているが、httpが兎に角通らなかった。
squid.confの設定で、http_portを指定するところがあるのだけれども、
http_port 3128 intercept
のように、intercept(透過指定)すると、
squid自体は立ち上がっているように見えるが、実際はエラーで起動しておらず、
systemctl status squid
でエラーを見ると、
FATAL: mimeLoadIcon: cannot parse internal URL:~というエラーがでて、ずっと悩んでいた。
これの答えは、
https://tutorialmore.com/questions-290758.htm
のように、
http_port 3127
http_port 3128 intercept
と、2つ指定しなければならないと言うことだった。
・・・これ、何故指定しなければならないのか、指定したらどういう風に通信処理されるのかさっぱり分からないんだよね・・・。
iptablesでは、3127ポートに関しては一切触れていないので、内部処理なんだろうけど・・・。
※3127とか3128とかのポートは任意なので一応注釈。
squid3だと、ポートを2つ指定したことが無かったので、新しい御作法なんだろうけれども・・・。

切り分け別個の話として、intercept指定しなければ、ブラウザにプロキシを噛ませる必要があるので、
もし噛ませなかったら


    不正なURL

指定されたURLに正しくない部分があります。

考えられる問題:

    ("http://"または同類の)アクセス・プロトコルが抜けているか不正です。

    ホスト名がありません。

    不正な二重のエスケープがURLパスに含まれています。

    ホスト名に不正な文字が含まれています: アンダースコア(下線)は使えません。

というエラーがsquidから出る。
英語だとinvalid urlか。

0 件のコメント:

コメントを投稿