Centos7 上の Squid をActive Directory と連携させ、ADのグループに登録されたユーザはデータセンタのProxyを経由してInternetへアクセス可能としつつ、Office365への通信はそもそも認証なしでクラウド上のManaged Proxy経由で接続させる
個別要件ごとに記事を分けて書こうかとも思ったんですが、面倒になったのでぜんぶひとまとめに書きます
わかりにくい場合はごめんなさい
今回作成するProxyサーバに求められる要件
- Office365への通信は認証不要でクラウド上のManaged Proxy経由で接続
- ADのグループに登録されたユーザはデータセンタに配置されたProxyを経由してInternetのすべてのサーバへのアクセスを可能とする
技術的なトライは2つ
- 宛先ドメインに応じて上位プロキシを選択する
- ADと連携し、指定したグループに属するユーザのみ利用可能とする
つまり、Squidによる宛先に応じた上位プロキシの振り分けと、AD連携、それもグループによる振り分け(?)を同時に満たすってことですね
宛先ドメインに応じて上位プロキシを選択する
このために必要なのは、Office365が使用するドメインのリストを作成しaclとして設定、cache_peer_access を使って宛先がリストに含まれる場合は指定した上位プロキシ(今回はクラウド上のManaged Proxy)経由での接続を許可する
#http_access allow localnet
acl whitelist dstdomain "/etc/squid/whitelist"
cache_peer [Managed ProxyのFQDN] parent [Managed Proxyのport] 0 no-query
cache_peer [DCのProxyのFQDN] parent [DCのProxyのport] 0 no-query #default proxycache_peer_access [Managed ProxyのFQDN] allow whitelist
never_direct allow all
以下ちょっとした解説
#http_access allow localnet
デフォルトで許可されているlocalnetからの通信はとりあえず不許可としておく
sqid.conf の書き方というか解釈のされ方としては、1行の中で書かれているものは and の条件で解釈し、各行はそれぞれ or で評価される
そのため、localnetからのアクセスを許可されてしまうと、その他でどれだけ制限をかけてもこの行のためにすべてが許可されてしまう
というわけでこの行はコメントにしておく
まずはOffice365が使用するドメインのリストを作る
リストの中は
1行1ドメインとし、以下のページに記載されているドメインはすべてリストに入れたつもり
cache_peer [Managed ProxyのFQDN] parent [Managed Proxyのport] 0 no-query
cache_peer [DCのProxyのFQDN] parent [DCのProxyのport] 0 no-query #default proxy
上位プロキシをcache_peerとしてリスト化しておく
この際、Office365へのアクセスで使用する方を上に、その他すべての宛先へのアクセスに使用する方を下に書くと、下の方がデフォルトとされるとのこと
この書き方でOffice365でへのアクセスには認証を要求しないこととクラウド上のManaged Proxyを経由する設定を同時に行っている
ADと連携し、指定したグループに属するユーザのみ利用可能とする
Centos7のSquidをADと連携させるには、Squidのサーバをドメインにjoinさせる必要はないが、realmdのほか、 sssd、adcli、samba-common-toolsを追加でインストールした
正直全てが必要かどうかは不明だが、4つすべてがインストールされていない環境ではADへの接続ができなかった
# yum install realmd sssd adcli samba-common-tools
# Active Directory Auth
auth_param basic program /usr/lib64/squid/basic_ldap_auth -v3 -R -b "DC=[ドメイン],DC=local" -D "CN=[squid専用に作成した、権限を最小限に抑えたユーザ],CN=Users,DC=[ドメイン],DC=local" -W /etc/squid/secret -f "(&(sAMAccountName=%s)(objectClass=Person))" -h [認証に使用するドメインコントローラのFQDN]
auth_param basic children 5external_acl_type ldap_group ttl=30 %LOGIN /usr/lib64/squid/ext_ldap_group_acl -v 3 -R -b "DC=[ドメイン],DC=local" -D "CN=[squid専用に作成した、権限を最小限に抑えたユーザ],CN=Users,DC=[ドメイン],DC=local" -W /etc/squid/secret -f '(&(objectclass=person)(sAMAccountName=%u)(memberof=CN=%g,OU=Users,DC=[ドメイン],DC=local))' -h [ドメインコントローラのFQDN] -S
acl proxy_allow_group external ldap_group [ドメインに作成したグループ名]
http_access allow localnet proxy_allow_group
# And finally deny all other access to this proxy
http_access deny all
同じく以下解説
auth_param basic program /usr/lib64/squid/basic_ldap_auth -v3 -R -b "DC=[ドメイン],DC=local" -D "CN=[squid専用に作成した、権限を最小限に抑えたユーザ],CN=Users,DC=[ドメイン],DC=local" -W /etc/squid/secret -f "(&(sAMAccountName=%s)(objectClass=Person))" -h [認証に使用するドメインコントローラのFQDN]
この行では basic_ldap_auth というSquidが提供している外部コマンドを使ってユーザが入力するIDとパスワードの組み合わせを検証する方法を設定しますが、引数として以下を設定しています
- v3:LDAPプロトコルのバージョン 3を使用する
- R:Do not follow referrals ドメインコントローラが他のLDAPサーバに問い合わせをリダイレクトすることを許可しません
- b:basedn 対象ドメインそのものの識別名
- D:binddn ドメインコントローラへ接続する際に使用するユーザの識別名
- W:secretfile 上記ユーザのパスワードを記載したファイルへのパス
- f:LDAP search filter LDAPの検索に使用するフィルタ
- h:認証に使用するドメインコントローラ
肝心のフィルタの意味としては
-f "(&(sAMAccountName=%s)(objectClass=Person))"
sAMAccountName が入力されたIDで、かつobjectClassがPersonのものに限定している
external_acl_type ldap_group ttl=30 %LOGIN /usr/lib64/squid/ext_ldap_group_acl -v 3 -R -b "DC=[ドメイン],DC=local" -D "CN=[squid専用に作成した、権限を最小限に抑えたユーザ],CN=Users,DC=[ドメイン],DC=local" -W /etc/squid/secret -f '(&(objectclass=person)(sAMAccountName=%u)(memberof=CN=%g,OU=Users,DC=[ドメイン],DC=local))' -h [ドメインコントローラのFQDN] -S
この行では ext_ldap_group_acl という同じくSquidが提供している外部コマンドを使って、上記ユーザが対象グループに含まれているかどうかを確認している
引数の大半は basic_ldap_auth と共通
- S:引数として渡されたIDからドメイン名を削る
フィルタの意味としては
- f '(&(objectclass=person)(sAMAccountName=%u)(memberof=CN=%g,OU=Users,DC=[ドメイン],DC=local))'
objectclass が Person で、sAMAccountName が入力されたユーザで、かつ対象のグループのメンバーであるように絞り込んでいる
proxy_allow_groupというaclを設定し、対象のグループを指定している
http_access allow localnet proxy_allow_group
上の方で許可することをやめたlocalnetとandでAD認証かつ対象グループに含まれることを要求している
http_access deny all
一番下でこれを入れておくことで、この上で許可されたもの以外はすべて不許可としている
以下はとても参考になった
ありがとうございました
ITに関すること: [CentOS7] SquidでADと連携する方法
http://itsp0.blogspot.com/2017/09/centos7-squidad.html
香港 OctopusカードにHSBCクレジットカードの機能を使って自動的にチャージする
近況
2018年10月より香港に駐在しています。
香港で生活する上でOctopusは非常に便利ですが、便利だからこそチャージの手間が気になりました。
HSBCのクレジットカードにはOctopusへ自動でチャージするAutomation Add Value Service (AAVS)があるので、これを利用したいと思います。
目次
- インターネットバンキングでAAVSの申し込み
- AndroidのOctopusアプリで有効化
インターネットバンキングでAAVSの申し込み
申し込むにあたってインターネットバンキングにログインしますが、メニューが多くてわかりにくいです。
My borrowingのOctopus AAVSをクリック
ここではOctopusカードの番号を登録するくらいだったと思います。
申し込んだ直後には5営業日くらいかかる旨の通知が届きましたが、翌日無事申請が通ったと連絡がありました。
AndroidのOctopusアプリで有効化
申請が通った状態であれば、MTRのCustomer ServiceでActivateしてもらうのが一番手軽です。
しかし、ITでできることはなるべくITでやりたい性分なので、以下手順で有効化しました
- Android端末にOctopusの公式アプリ Octopus をインストール
- 携帯番号、メールアドレスを登録してアカウントを作成
- 自身のOctopusカードを読み込んで登録
- AAVSを有効化
Android端末にOctopusの公式アプリ Octopus をインストール
提供元は Octopus Card Limited となっています。
普通にGoogle Playからインストールするだけです。
携帯番号、メールアドレスを登録してアカウントを作成
これも普通に登録するだけですが、携帯番号に対してはSMSで、メールアドレスに対してはメールで確認用のコードやURLが届きます。
自身のOctopusカードを読み込んで登録
ここまででアプリが使えるようになったはずですので、おもむろにAndroid端末の背面にOctopusカードをあててみます。
うまくいけば登録するか聞かれますので登録します。
ここまででも過去3か月分の使用履歴が見れたり、現在の残高が確認できたりします。
AAVSを有効化
Octopus アプリの画面左上部にある3本線をタップして表示されるメニューから、Automatic Add Value Serviceをタップします。
開いた画面にActivate AAVSがあるのでこれをタップします。
HSBC口座開設時の申請に使用した香港IDまたはPassport番号の最後の4文字と、誕生日を入力し、問題なければActivateが完了します。
オートチャージが有効になると、残高が0になった瞬間に自分の指定した額(250HKDまたは500HKD)がチャージされます。
自分はMTRやトラム、船以外でも、コンビニやスーパーなどいろんなところでOctopusを使うのでとても便利に感じています。
とはいえ、正直MTRのCustomer Serviceで有効化してもらった方がお手軽です。
が、2019年1月から始まったMTR利用料の還付についてだとか、学ぶことの多い作業だったので個人的には満足しています。
RODCにlocal管理者としてリモートで接続する
<手順>
1.RODCでコマンドプロンプトを起動し、下記コマンドを入力
dsmgmt
2.下記コマンドを入力
local roles
3.下記コマンドを入力
Add <ドメイン名>\<ユーザー名> administrators
Add <ドメイン名>\<ユーザー名> "remote desktop users"
以下のコマンドを実行することで設定した役割を確認することができる
show role administrators
show role "remote desktop users"
参考
[RODC] 読み取り専用ドメインコントローラについて ( Windows ) - ぎじゅつメモ - Yahoo!ブログ
https://blogs.yahoo.co.jp/technotes2008/1368361.html
Windows Server 2008 RODC〜管理者の役割の分離について : オラクる。
Windows Server 2008(Hyper-V 2.0)上のCentos5.11を Windows Server 2012 (Hyper-V 3.0)へ移設する
目次
- Windows Server 2008(Hyper-V 2.0)上のCentos5.1のカーネルをyum upgradeであげられるだけあげておく
- LinuxIC 2.1 を LinuxIC 3.5へアップデート
- 上記vhdをWindows Server 2012(Hyper-V 3.0)へコピーし、仮想サーバを構築
- ifcfg-seth0 → ifcfg-eth0 へNICの設定ファイルが変わっているので変更
- iscsidサービスがKernel Panicを起こすので起動しないように設定
Windows Server 2008(Hyper-V 2.0)上のCentos5.1のカーネルをyum upgradeであげられるだけあげておく
# yum upgrade
LinuxIC 2.1 を LinuxIC 3.5へアップデート
MSのサイトから、LinuxIC 3.5のisoを落として、マウントし、中身をコピー
# mount /dev/cdrom /mnt/cdrom # cp -R /mnt/cdrom/* /usr/src/linuxid-3.5/
インストール済みのLinuxIC 2.1をアンインストール
# cd /usr/src/linuxic-2.1 # make uninstall
LinuxIC 3.5を(とりあえずRHEL5.5として)インストール
# cd /usr/src/linuxic-3.5/RHEL55 # ./install-rhel55.sh
上記vhdをWindows Server 2012(Hyper-V 3.0)へコピーし、仮想サーバを構築
ifcfg-seth0 → ifcfg-eth0 へNICの設定ファイルが変わっているので変更
# cd /etc/sysconfig/network-script/ # cp ifcfg-eth0 ifcfg-eth0.org.bak # vi ifcfg-eth0
IPアドレスやネットワークアドレス、Broadcast、デフォルトGW等を書いて保存
iscsidサービスがKernel Panicを起こすので起動しないように設定
# chkconfig iscsid off
Security-Licensing-SLC イベントID 8200への対応
File : Application Type : エラー Source : Microsoft-Windows-Security-Licensing-SLC Category : 0 Count : 116 LastTime : 2011/10/26 00:10:59 Message : ライセンス取得の失敗に関する詳細。 hr=0x80072EFD
タスクスケジューラでエラーコード 2147943645
Windows Server 2008のタスクスケジューラでエラーコード 2147943645 が記録され、タスクが開始されていない
タスク スケジューラは、ユーザー "[ドメイン名]\[ユーザ名]" の "\[タスク名]" タスクを開始できませんでした。追加データ: エラー値: 2147943645。
この原因は、
- タスクが「ユーザがログオンしているときのみ実行する」よう設定されている
- 誰もログオンしていない
というタイミングでタスク起動の時間がくると記録されるorz