0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProxyにKerberos認証を追加する

Last updated at Posted at 2025-05-11

Webブラウザがブラウザというより環境って感じになってきた昨今、いかがお過ごしでしょうか。

何でもかんでもWebサービスでまかなえすぎて、ぼちぼちブラウザのセキュリティが一番のリスクになってきてますね😇

セキュリティやネットワークの試験でもUTMや認証付きProxyが当たり前に導入されてますし、私しかいない自室のセキュリティといえど負けてられないと自室のサーバに認証付きProxyをいれることにしました。

お前は一体何と戦っているんだ?_(:3」∠)_

Proxyの認証には前回までで入れたKerberos認証を使います。

認証付きProxyを導入するに当たって一番嫌だったのが認証によるWebアクセスへの一手間だったんですよねー。Kerberos導入でそこが改善できることになったので、じゃぁProxy認証を導入してみようと。

Proxyサーバ向けプリンシパルの登録

KerberosがProxyにチケットを発行できるようKerberosのDBにProxyが動いているホストを登録します。

Proxy用のプリンシパルはHTTP/minipc.home@HOMEらしいです。

$ kadmin.local
kadmin.local:  addprinc -randkey HTTP/minipc.home@HOME

Squid用にキータブを作成する

前回まではSSSDに認証を全てお任せしてたので、SSSDの実行者であるrootしかアクセスできない/etc/krb5.keytabにプリンシパルの登録をまとめてきました。

SquidはSSSDに丸投げはできないみたいでSquid自身(実行者squid)がkeytabにアクセスする必要があるため、Squid用のキータブファイルを別に用意します。

$ kadmin.local
kadmin.local: ktadd -k /etc/squid/squid.keytab HTTP/minipc.home@HOME
kadmin.local: quit

$ chown squid:squid /etc/squid/squid.keytab

squid.confを修正する

kerberos認証を使うようにsquid.confを書き換えます。

上から順番にチェックして一致したらそこで確定という手順なので、Kerberos認証のallowより前に別のallowやdenyがマッチしたらKerberos認証が行われません。順番が大切です。

/etc/squid/squid.conf
# Kerberos認証との連携
auth_param negotiate program /usr/lib64/squid/negotiate_kerberos_auth -k /etc/squid/squid.keytab -s HTTP/minipc.home@HOME
acl auth_users proxy_auth REQUIRED
http_access allow auth_users

# localnetの無条件allowを停止する
# http_access allow localnet

Squidを再起動すればKerberos認証が通らない場合407を返すようになります。

$ systectl restart squid

# 407 Proxy Authentication Required
$ curl --proxy http://minipc.home:3128 https://www.google.com

# 200 OK
$ curl --proxy http://minipc.home:3128 --proxy-negotiate https://www.google.com

ブラウザ(Firefox)を対応させる

FirefoxでのWebブラウズもProxyを通している場合は認証で弾かれるようになります。

スクリーンショット 2025-05-11 032641.png

Firefoxの設定を修正します。

  1. アドレスバーに about:config と入力し設定画面を開く
  2. network.negotiate-auth.trusted-uris にproxyサーバ(minipc.home)を設定
  3. network.auth.use-sspifalse を設定

use-sspiをfalseにすることでWindows統合認証ではなくMIT Kerberosの方を使用するようになります。

この設定でFirefoxのproxyの設定だけでなくFoxyProxyでも認証を通過しました。アドオンでのproxy設定も認証がちゃんと通るみたいです。

Squidをやめてlighttpdにする

Squidをいれてしばらく経って、やっぱりちょいネットが引っかかる感じなのとGemini先生がSquid通すとナゼか遅くなるのでやっぱりSquidを止めました_(:3」∠)_

でも自室内WebアプリケーションはKerberos認証を通るようににしたかったので、開発用WebサーバのlighttpdにKerberos認証を入れることにしました。

とりあえずgssapiモジュールをインストールして、

$ dnf install lighttpd-mod_authn_gssapi

modules.confを修正して読み込むようにしておきます。

/etc/lighttpd/modules.conf
server.modules += (
  "mod_access",
...
  "mod_authn_gssapi",  <-追加
)

キータブをSquidからlighttpd用に変更します。

$ mv /etc/squid/squid.keytab /etc/lighttpd/lighttpd.keytab
$ chown lighttpd:lighttpd /etc/lighttpd/lighttpd.keytab

後はサーバ全体かサービスごとに適用するか決めて認証の設定を突っ込みます。

うちの場合はauth.backend.gssapi.store-credsdisableにしないと動きませんでした。あとauth.backend.gssapi.principalHTTPだけでも動きましたが一応全部書いておきました。

vhostの設定の中とかに突っ込む
    auth.backend = "gssapi"
    auth.backend.gssapi.keytab = "/etc/lighttpd/lighttpd.keytab"
    auth.backend.gssapi.principal = "HTTP/minipc.home@HOME"
    auth.backend.gssapi.store-creds = "disable"

    auth.require = (
       "/" => (
           "method" => "gssapi",
           "realm" => "HOME",
           "require" => "valid-user"
       )
    )

これだけで 認証が入るんだけどパスワード入力は不要 になるので、パスワード入力うぜー('A`)って認証ハズしちゃうこともなく。

透過的に認証が行われるっていうのは、思ってたより快適ですね☺️

ついでにApache

なんだかんだ、仕事では常にApache_(:3」∠)_

$ dnf install mod_auth_gssapi
vhost
#    Require all granted

    AuthType GSSAPI
    AuthName "Kerberos Login"
    GssapiAllowedMech krb5  # 無くても動く。入れとくとkrb5以外の認証を行わない
    GssapiCredStore keytab:/etc/httpd/httpd.keytab
    Require valid-user

ついでにCockpit

HTTP/minipc.home@HOMEをホスト用キータブの/etc/krb5.keytabに入れておくと、cockpitがデフォルト設定のままでもkerberos認証をしてくれます。

$ cp /etc/krb5.keytab /etc/krb5.keytab.bk

# ktaddだとKVNOが変わるので、read_kt/write_ktでコピーする
$ ktutil
ktutil: read_kt /etc/httpd/httpd.keytab
ktutil: write_kt /etc/krb5.keytab
ktutil: quit

ただしbasic認証が残ってしまうので、kerberos認証のみにする場合は[basic]を無効にしておきます。

/etc/cockpit/cockpit.conf
[basic]
action = none
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?