apacheでリバースプロキシを立てる
前提
クライアント → リバースプロキシ(今回設定する箇所) → 裏にあるサーバ
としたい。
設定
リバースプロキシとするサーバに、以下を入れて、systemctl restart httpd
する。
# tail -n 10 /etc/httpd/conf/httpd.conf LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so Listen 8888 <VirtualHost *:8888> ProxyPreserveHost On ProxyPass / http://back-server:8888/ ProxyPassReverse / http://back-server:8888/ </VirtualHost>
動作
リバースプロキシは、
- 8888でリクエストが来ると(典型的には、クライアントからhttp://[リバプロのホスト名]:8888/hoge/fuga でリクエストが送られてくると)
- 裏にあるサーバ(back-server)へ、http://back-server:8888/hoge/fuga でアクセスし、
- 結果をクライアントに返す。
ProxyPassの設定は・・・
ProxyPass /AAA BBB
と設定すると、http://[リバプロのホスト名]:8888/AAA
をBBB
と読み替える動きをする- 仮に
ProxyPass /hoge http://back-server:8888/
とした場合、http://back-server:8888/fuga
に読み替えて裏のサーバにアクセスする。
ProxyPassReverse の設定はProxyPassの設定と同じに
参考
DHCPスヌーピング
スヌーピー!?おかわわわわ!?と思って概要を調べた。
ネットワークを全く知らない人にどうやったらスヌーピーのことを伝えられるか、と思って歩きながら考えたポエム。
全編たとえ話なので、正しいかどうかは全く保証しません。
DHCPスヌーピングの立ち位置としては、「1.DHCPプロトコルの穴を突いて2.不正にネットワークに潜り込もうとする人に対する3.防御策」なので、順を追って説明することにします。(番号が対応します)
DHCP (Dynamic Host Configuration Protocol)
DHCPとは、ネットワーク内のIPアドレスの分配を簡便に管理するプロトコルである。 ネットワークに新しいデバイスが接続されると、DHCPサーバーが空いているIPアドレスを自動で割り振ってくれる。家庭内ではルータがこの役割を果たすことが多い。
ざっくり以下のような感じ。 あなた(新規デバイス)は新しい街に越してきて、各種手続きのために市役所(ネットワーク)に訪れたとする。
- 役所に来たら、まずあなたは「新しく越してきました!転入手続きをしたいですが窓口がわかりません!助けてください!」と叫ぶ (DHCP DISCOVER, ブロードキャスト)
- 受付の人がやってきて、「受付番号(貸出IP)を取ってきました。これでいいですか?」と話しかけてくれる (DHCP OFFER, ユニキャスト)
- あなたは、「この受付番号でOKです!」と叫ぶ(DHCP REQUEST, ブロードキャスト)
- 受付の人が、市役所のフロアマップ、窓口への行き方を教えてくれる (DHCP ACKNOWLEDGEMENT, ユニキャスト)
DHCP spoofing
DHCP spoofing (なりすまし)とは、ネットワーク内に存在する悪意のあるデバイスが、新規デバイスのDHCP DISCOVERに対して偽の応答を返し、新規デバイスのIP通信のconfigを都合良く設定してしまう手法である。例えば新規デバイスのデフォルトゲートウェイを悪意あるデバイスに設定することで、新規デバイスの通信は必ず悪意あるデバイスを一度経由することになり、通信が盗聴される、といったケースが考えられる。
上の例に倣うと、
- 役所に来たら、まずあなたは「助けてください!」と叫ぶ
- 正規の受付の人が来る前に不審者がやってきて、「君が行こうとしてる窓口はあっちだよ」と誘導する
- 誘導された窓口では市役所の人間ではない不審者が待ち構えている。
みたいな感じだろうか。
DHCP snooping
上記のDHCP spoofingを防ぐために、ルータには「DHCP通信を監視し、信頼できるポートからのDHCP応答のみルータの通過を許可する」機能がついている。これがDHCP snoopingと呼ばれる機能である。(snoopingは"嗅ぎまわる"という意味)
さらに上の例に倣うと、
という感じ。
まとめ
無理に例えると余計わかりにくい。正しい説明はいつか書きます。
VBAことはじめ
Date型
バイトへの置き土産のついでにVBAを触ってみる.指定した月の日付を出して土日だけ灰色にする.
Date型は結局値をどう保持してるのか謎だけど下みたいな無理やりな入れ方でも通る.
起動時に実行させるにはプロージャ名をSub workbook_open()
とする.他にもいろいろ指定できるらしい(VBA基本(そのブックを開いた時に自動実行)).ブックへの指定となるため標準モジュールではなくThisWorkboookに記述しないといけないそうでちょっとハマった.
year,month
とかを変数宣言するとYear()
とかMonth()
とかが使えなくてそわそわする.配列も関数も引数の指定の仕方が同じなのがよくない.
Sub workbook_open() Set ws1 = Sheets("Sheet1") ws1.Range(Cells(1, 1), Cells(31, 4)).ClearContents ws1.Range(Cells(1, 1), Cells(31, 4)).Interior.ColorIndex = xlNone Dim ym As String ym = InputBox("2018/2の形で入力してください", "月の確認", "") Dim buff As Variant buff = Split(ym, "/") If UBound(buff) <> 1 Then MsgBox "入力が不正です" Exit Sub End If Dim y, m As Integer y = Int(buff(0)) m = Int(buff(1)) Dim ymd As Date ymd = DateAdd("d", 25, DateAdd("m", -1, ym + "/1")) Dim i As Integer For i = 1 To 31 ws1.Cells(i, 1).Value = year(ymd) ws1.Cells(i, 2).Value = month(ymd) ws1.Cells(i, 3).Value = day(ymd) ws1.Cells(i, 4).Value = WeekdayName(Weekday(ymd), True) If Weekday(ymd) = 1 Or Weekday(ymd) = 7 Then ws1.Cells(i, 4).Interior.ColorIndex = 15 End If ymd = DateAdd("d", 1, ymd) If day(ymd) >= 26 And month(ymd) = m Then Exit Sub End If Next End Sub
出力.どうしても灰色にしたいらしい.