GSLB_and_DNS

GSLBとは はい、GSLB(Global Server Load Balancing)について知っています。GSLBは、複数の地理的に分散したサーバー間でネットワークトラフィックを効果的に分散するための技術です。これにより、以下のような利点が得られます。 高可用性: サーバーの障害が発生した場合でも、トラフィックを他の健全なサーバーにリダイレクトすることでサービスの継続性を確保します。 負荷分散: トラフィックを複数のサーバーに分散することで、特定のサーバーに過負荷がかかるのを防ぎます。 低遅延: ユーザーに最も近いサーバーにトラフィックをルーティングすることで、応答時間を短縮します。 災害復旧: 地理的に分散したサーバーを利用することで、特定地域での災害や障害に対する耐性を向上させます。 GSLBは、DNSベースの方法や、アプリケーション層でのルーティングを使用して実現されることが一般的です。具体的な実装方法や製品には、以下のようなものがあります。 DNSラウンドロビン: 最も基本的なGSLBの方法で、DNSサーバーが複数のIPアドレスを順番に返すことで負荷を分散します。 Anycast: 同じIPアドレスを複数の地理的に分散したサーバーに割り当て、最も近いサーバーにトラフィックをルーティングします。 商用製品: F5 NetworksのBIG-IP、CitrixのNetScaler、Amazon Web ServicesのRoute 53など、さまざまな商用ソリューションがあります。 GSLBは、大規模なWebサービスやクラウドサービスでよく利用される技術です。 僕の質問 一般ユーザはDNSを介してどのサーバにアクセスするかがきいまると思います。また、DNSは裏でGSLBと繋がっていて、一般ユーザー>DNS -> GSLBという流れでリクエストが流れると思います。この認識は合っていますか? chatGPTの回答 基本的な認識は合っていますが、もう少し詳細に説明すると、DNSとGSLBの関係は次のようになります。 一般ユーザーのリクエスト: 一般ユーザーがウェブサイトにアクセスしようとすると、まずDNSリクエストが発生します。このリクエストは、ユーザーが入力したドメイン名をIPアドレスに変換するためのものです。 DNSサーバーの役割: DNSサーバーは、このドメイン名に対応するIPアドレスを返します。ここで、GSLBがDNSサーバーに組み込まれているか、もしくはGSLBがDNSサーバーと連携しています。 GSLBの動作: GSLBは、複数の地理的に分散したサーバーの中から最適なサーバーを選択し、そのサーバーのIPアドレスをDNSサーバーに返します。選択基準には、サーバーの負荷、地理的な距離、ネットワークの遅延などが含まれます。 DNSの応答: DNSサーバーは、GSLBから受け取った最適なサーバーのIPアドレスをユーザーに返します。 ユーザーのアクセス: 最終的に、ユーザーのブラウザは返されたIPアドレスを使って直接サーバーにアクセスします。 この流れを図にすると以下のようになります: mermaid sequenceDiagram participant User as 一般ユーザー participant DNS as DNSサーバー participant GSLB as GSLBシステム participant Server as 最適なサーバー User->>DNS: ドメイン名の解決リクエスト DNS->>GSLB: 最適なサーバーのIPアドレスを要求 GSLB->>DNS: 最適なサーバーのIPアドレスを返す DNS->>User: IPアドレスを返す User->>Server: サーバーにアクセス このように、一般ユーザーのリクエストは最終的にはDNSを介してGSLBによって選ばれた最適なサーバーに到達します。DNSはGSLBと連携して動作し、ユーザーに最適なサーバーのIPアドレスを提供します。 ...

July 9, 2024 · 2 min · 276 words · Me

site to site routing (VPN)

何の記事 vpnサーバに接続してきたvpnクライアントがいるネットワークに、vpnサーバからアクセスできるようにする方法の手順を解説 ちなみに、これはCloudflaairとかいう会社が提供しているzero trustっていうサービスと同等のことを可能にしてくれる。 初めに VPNサーバを立てて、VPNクライアントのパケット通信をVPNサーバを通すようにすることはできていた。 これによって、クライアントはサーバと同じネットワーク上にいるかのようにふるまうことができていたわけだね。 しかしこの逆ができなかったのですよ。 つまり、 サーバがクライアントのネットワークにいるかの如くふるまうように設定することがずっとできなかったんですよね。 その必要性も当時はあまりなかったからね。 だが、この度新しいおうちに引っ越して、「単一のグローバルipが与えられておりポート開放できるルータがある」環境を失ってしまった。 外からアクセスできないんですよね、今のうちのネットワーク環境だと。 家の外に借りたVPSは結構あって、そこにVPNサーバを立てることはできる。 そこで今まで試したけど挫折してきた、「隔絶されたネットワークに、そのネットワークにいるvpnクライアントを介してアクセスする方法」。 今回はそれを可能にする方法を教えます。 ちなみに、二つの異なるネットワークセグメントをvpnサーバとvpnクライアントを使って完全につなげることを、 「site to site routing」といいます。マジでかっこいいですね。あこがれちゃいます。そんな憧れを、今回、達成してしまうんです。 これによって、「remote.it」のように、ポート開放をしていない、隔絶されているネットワーク環境に、外からアクセスできるようになるんです。えぐいですねーーー。えぐい。とにかくえぐい。 参考記事 記事1 記事2 openVPN公式 site2siteに関しては二つ目がかなりいい感じにまとめてくれています。 まずはいつも通り普通にopenvpnサーバを立てる OpenVPNとeasy-rsaのインストール sudo yum install openvpn easy-rsa -y easy-rsaを使って証明書関係を作る ./easyrsa init-pki ca証明書を作成 ./easyrsa build-ca *ca証明書=認証局(ca)証明書。 認証局(CA)とは、ウェブサイトやその他の独立した存在などに、デジタル証明書を発行する信頼できる組織。 できたら移動しておく cp pki/ca.crt /etc/openvpn diffie-helman parameterを生成 ./easyrsa gen-dh 移動しておく sudo cp pki/dh.pem /etc/openvpn Certificate Revocation List (CRL) を生成 ./easyrsa gen-crl OpenVPN Serverように証明書と秘密鍵を生成 (サーバ証明書の生成) ./easyrsa build-server-full server nopass 移動しておく sudo cp pki/issued/server.crt /etc/openvpn sudo cp pki/private/server.key /etc/openvpn クライアント証明書と秘密鍵を生成 ./easyrsa build-client-full username 各コマンドの詳しい説明 ./easyrsa build-ca ./easyrsa build-ca コマンドは、 Easy-RSAツールを使用して 新しい認証局(CA)のルート証明書と秘密鍵を生成するためのものです。 認証局は、VPN証明書を発行および署名するために使用されます。 このプロセスは通常、VPNサーバーをセットアップする最初のステップの一つです。 具体的には、このコマンドは以下の操作を行います: CAの秘密鍵の生成:認証局(CA)の秘密鍵を生成します。 この鍵は、CAによって発行される証明書に署名するために使用されます。 CAの自己署名証明書の生成:CAの自己署名証明書を生成します。 この証明書は、CA自身が正当な認証局であることを証明します。 このコマンドを実行すると、以下のファイルが生成されます: ca.crt: CAの自己署名証明書 ca.key: CAの秘密鍵 これらのファイルは、VPNサーバーの証明書発行および署名プロセスで使用されます。 具体的には、CAの秘密鍵 (ca.key) は秘密に保管されるべきであり、 CAの証明書 (ca.crt) はクライアントと共有され、 クライアントはこれを使用してサーバー証明書の有効性を検証します。 証明書には公開鍵も含まれていると考えていいです。 ./easyrsa build-server-full server nopass ./easyrsa build-server-full server nopass コマンドは、Easy-RSAツールを使用してOpenVPNサーバーの証明書と秘密鍵を生成するためのものです。このコマンドは、サーバー証明書を生成し、その秘密鍵にパスフレーズを設定せずに保存します。 具体的には、このコマンドは以下の操作を行います: サーバー証明書の生成:指定された名前(この場合は server)でサーバー証明書を生成します。この証明書はサーバーがVPNクライアントに自身を証明するために使用されます。 サーバーの秘密鍵の生成:サーバー証明書と一緒に使用される秘密鍵を生成します。この秘密鍵は、VPN接続を暗号化するために使用されます。 証明書署名要求(CSR)の作成および署名:証明書署名要求(CSR)を作成し、それを認証局(CA)で署名することで有効な証明書を生成します。 パスフレーズの省略:nopassオプションにより、生成される秘密鍵にはパスフレーズが設定されません。これにより、サーバーが起動するたびにパスフレーズを入力する必要がなくなります。 このコマンドを実行すると、通常、以下のファイルが生成されます: server.crt: サーバー証明書 server.key: サーバーの秘密鍵 server.req: 証明書署名要求(CSR) これらのファイルは、OpenVPNサーバー設定に必要なものであり、適切に保管されるべきです。特に、server.key は秘密に保つ必要があります。 ./easy gen-dh ./easyrsa gen-dh コマンドは、Easy-RSAツールを使用してDiffie-Hellman(DH)パラメータを生成するためのものです。DHパラメータは、VPNサーバーとクライアント間で安全にキー交換を行うために使用されます。これにより、セッションごとに異なる鍵が生成され、通信のセキュリティが強化されます。 具体的には、このコマンドは以下の操作を行います: Diffie-Hellmanパラメータの生成:DH鍵交換プロトコルに使用されるパラメータを生成します。これらのパラメータは、安全な通信チャネルを確立するために必要です。 生成されたファイルの保存:生成されたDHパラメータは、VPNサーバーの設定で使用されます。 このコマンドを実行すると、以下のファイルが生成されます: dh.pem: Diffie-Hellmanパラメータ ./easyrsa gen-crl ./easyrsa gen-crl コマンドは、Certificate Revocation List (CRL) を生成するためのものです。CRLは、無効または失効された証明書のリストを保持し、認証局(CA)が管理します。 具体的には、このコマンドは以下の操作を行います: CRLの生成:現在の認証局の設定に基づいて、新しいCRLファイルを生成します。このファイルには、CAによって失効された証明書のリストが含まれています。 既存の失効証明書の確認:CRLを生成する際に、すでに失効されている証明書が正しくリストに含まれていることを確認します。 CRLは、VPNサーバーやその他のサービスがクライアント証明書の有効性を確認するために使用されます。具体的には、クライアントがVPNに接続しようとする際、サーバーはそのクライアントの証明書がCRLに含まれていないことを確認することで、失効された証明書による不正アクセスを防ぎます。 生成されたCRLファイルは通常、crl.pem という名前で保存されます。このファイルは、VPNサーバーの設定に組み込まれる必要があります。例えば、OpenVPNサーバーでは、crl-verify オプションを使用してこのCRLファイルを指定します。 ./easyrsa build-client-full username このコマンドは、Easy-RSAツールを使用してOpenVPNクライアント証明書と鍵を生成するためのものです。具体的には、build-client-fullコマンドは以下の操作を行います: クライアント証明書の生成:指定されたユーザー名(この場合はusername)に対して、クライアント証明書を生成します。証明書はクライアントがVPNに接続するために必要なものであり、認証局(CA)によって署名されます。 クライアントの秘密鍵の生成:クライアント証明書と一緒に使用される秘密鍵を生成します。この鍵は、クライアント証明書とともにVPN接続を確立するために必要です。 証明書署名要求(CSR)の作成および署名:証明書署名要求(CSR)を作成し、それを認証局(CA)で署名することで有効な証明書を生成します。 このコマンドを実行すると、通常、以下のファイルが生成されます: username.crt: クライアント証明書 username.key: クライアントの秘密鍵 username.req: 証明書署名要求(CSR) これらのファイルは、VPNクライアント設定に必要なものであり、適切に保管されるべきです。クライアントはこれらの証明書と鍵を使用してOpenVPNサーバーに接続し、暗号化された通信を確立します。 以上の鍵が生成される順番と、これらのカギを使って実際にクライアントがサーバとコネクションを張り暗号化された通信をするまでの流れ 1. 接続の確立 クライアントがVPNサーバーに接続を試みます クライアントはVPNサーバーに接続リクエストを送信します。 2. サーバーの証明書を検証 クライアントはサーバーから送られてきた証明書 (server.crt) を検証します。 クライアントは自身のCA証明書 (ca.crt) を使用して、 サーバー証明書がCAによって署名されていることを確認します。 この検証により、 クライアントは接続しようとしているサーバーが信頼できるものであることを確信します。 3. クライアントの証明書を検証 サーバーもクライアントから送られてきた証明書 (username.crt) を検証します。 サーバーは自身のCA証明書 (ca.crt) を使用して、 クライアント証明書がCAによって署名されていることを確認します。 サーバーはさらに、クライアント証明書が失効していないことをCRL (crl.pem) を用いて確認します。 4. 秘密鍵の使用 クライアントとサーバーのそれぞれの秘密鍵(username.key と server.key)は、相手の証明書と合わせて使用され、相互認証を実施します。 サーバーの秘密鍵(server.key)は、サーバーが送信するデータのデジタル署名と暗号化に使用されます。 クライアントの秘密鍵(username.key)は、クライアントが送信するデータのデジタル署名と暗号化に使用されます。 5. 鍵交換とセッションの確立 Diffie-Hellman鍵交換プロトコルの使用 クライアントとサーバーは、Diffie-Hellman鍵交換プロトコルを使用して、セッション鍵を安全に交換します。 このプロセスでは、サーバーの dh.pem ファイルが使用されます。 セッション鍵の生成 Diffie-Hellman鍵交換によって生成されたセッション鍵を使用して、クライアントとサーバー間で安全な通信チャネルを確立します。 これにより、以降の通信が暗号化されます。 暗号化された通信の開始 暗号化された通信の開始 セッション鍵が確立された後、クライアントとサーバー間の通信は暗号化されます。 以降のデータは、このセッション鍵を使用して暗号化・復号化されます。 各通信データは、相手側の公開鍵で暗号化され、自身の秘密鍵で復号化されます。 VPNサーバの起動 sudo systemctl stop openvpn サーバがうまく起動できないとき こっちで試してみるのもありかもしれない。 ...

July 5, 2024 · 3 min · 569 words · Me

ロングファットパイプ、TCPダンプ

事始め 例のシステムで、tcコマンドでネットワークレイテンシーを増加させたんですけどね。 そしたら、たったの100msの遅延だったんですけど、64MiBのデータを送信するときに、 アプリから見た時の遅延の時間がなんと1sくらいまで伸びてしまったんですよね。これ、めちゃめちゃ面白い話で、深堀りする価値があるんです。 もしかしたら、ロングファットパイプ問題についても、わかるかもしれないね。 まず、TCPの基礎、どうやって動いているのかを理解する必要がある。 が、せっかくなので、もう一回上からやろうか。 アプリケーションレイヤーから、どうやってデータが通信相手まで伝わるのか、ってのをもう一回確認して、 本題のTCPレイヤーのMTU,MSS,windowサイズについて話した後、tcpダンプの使い方を調べ、最後に実際にTCPダンプをして、 例のシステムにおいて、サーバ・クライアント間で100msの遅延が生じているときのデータのやり取りについてみてみましょう。 OSIモデル、プロトコルスタックについて確認 まず、プロトコルスタックとは「コンピュータネットワーク用のプロトコルの階層」のことです。 OSIモデル(7層) で見ていくのが大事そうですね。上から、アプリケーション層、プレゼンテーション層、セッション層、トランスポート層、ネットワーク層、データリンク層、物理層。 アプリケーション層では、具体的なサービスを提供。HTTPとか、websocketとか、FTPとか、SSHとか、その他いろいろ。 プレゼンテーション層は、データのフォーマットを定義する?そうですね。エンコードの方法とか。これはおそらくまだOSレイヤーの話ではない。 ここからがOSの世界の話。 セッション層は、connect(sockdrp,IP)で、コネクションを確立したときに、コネクションの相手を覚えておく層、だと思っていい。 つまり、ソケットのことです。ソケットが通信相手の情報を覚えておきます。 ソケットは、OSによってプログラムのされ方が違うらしいです。それでも異なるOS同士ど通信ができるのは、トランスポート層で規定されているプロトコルにすべてのOSが準拠しているからです。 トランスポート層 (L4) が、TCP / UDP です。TCPでは、アプリケーションからもらったデータを小分けにして、通し番号を付けて、 小分けにしたデータをちょっとづつ送ります。小分けにされたデータが、いわゆる「パケット」です。 再送とかもする。信頼性が高いのです。その代わりスループットは悪くなります。 一方、UDPはデータを投げっぱなしにします。信頼性は低いですが、スループットは高くなります。VoIPなどに使われますね。 L4ではまだ、IPは指定しません。 その下、ネットワーク層が、IPです。ルーティングを決めてくれます。 その下、データリンク層が、イーサネットですね。L2TPとかをするVPN、ありますよね。あれはね、このレイヤーで動いているんですよね。 その下、もう物理層です。L1です。 L4、トランスポート層のTCPについてもう少し詳しく見ていく まずは、TCPヘッダーのフォーマットを見てみましょう。 送信元ポート番号:16bit 送信先ポート番号:16bit シーケンス番号:32bit ACK番号:32bit データオフセット:4bit 未使用:6bit コントロールビット:6bit ウインドウ:16bit チェックサム:16bit 緊急ポインタ:16bit オプション:可変長 いろいろありますが、ここでまず注目したいのは、通信相手のIPアドレスがないってことですね。 なぜなら、それはL3が担当するからです。 その他、自分的にまだ理解が完ぺきではないけど大事そうなのは、シーケンス番号、ACK番号、コントロールビット、 ウィンドウの、4つですね。それぞれについて説明していきます。 シーケンス番号 「このパケットの先頭のデータが送信データの何バイト目にあたるのか送信側から受信側に伝えるためのもの」 TCPではデータを小分けにして送りますね。パケットです。で、何バイト目か?って話ですね。32bitしかないってことは、 2^32/1024/1024/1024 = 4GiBしか一回で送れないってこと?まじ??まあいいや。そんなことはないと思うけどね。 ACK番号 「データが何バイト目まで受信側に届いたのか、受信側から送信側に伝えるためのもの。」だそうです。 コントロールビット URG:緊急ポインタ ACK:データが正しく受信側に届いたことを意味する PSH:FLUSH動作によって送信されたデータである RST:接続を強制的に終了:異常終了 SYN:送信側と受信側で連番を確認しあう。これで接続どうさを表す FIN:切断 ウィンドウ 「受信側から、送信側にウィンドウサイズ (受信確認を待たずにまとめて送信可能なデータ量) を通知するために使う。」 これが16bitであるのが、もんだいなんですよ!! 以上を念頭に次に進みます。 TCPが接続を開始して、データを送信し、切断するまで はい。一言でいうと、 「TCPはスループットを犠牲に、信頼性を高めた通信プロトコル」です。 信頼性を高めるために、されている工夫が2つあるんですね。それが、 3ウェイハンドシェイクと、パケット送信時の受け取り確認です。 (UDPはスリーウェイハンドシェイクも、受け取り確認もしない) ...

January 19, 2024 · 4 min · 650 words · Me

How_to_proxy

Squidについて Squidはプロキシやリバースプロキシの機能を提供するソフトウェアです。 プロキシを置く理由 主に、サービスの利用者向けのソフトウェアですね。 リバースプロキシを置く理由 リバースプロキシサーバーをバックエンドサーバーの前段に置く理由は、主に以下の5つです。 キャッシュサーバーとして利用 レスポンスを圧縮 (レスポンスの転送を高速化) SSL ターミネーション (暗号化や復号化の処理をリバースプロキシにオフロード) セキュリティの向上 (リバースプロキシでフィルタリング、バックエンドサーバーを隠蔽) 拡張性 (クライアントはリバースプロキシと通信するので、バックエンドサーバーを変更可能) こっちは主に、サービスの提供者側向けのソフトですね。 僕がやりたいこと 全部の通信が、Torみたいに、複数のサーバを介して行われる感じにしたいんですよね。んで、最終目的地はデータベースです。ユーてこれって、openvpnとかでじっそうできるのかな?いやできないか。 ネットワークの通信、頑張って自分で作れたりするのかな。いけそうな気もするな。

August 13, 2023 · 1 min · 20 words · Me

openvpn client in a docker container

やりたいこと webアプリケーションを家のサーバで動かすとなるとセキュリティーの観点からして怖いじゃないですか。やっぱり自宅のipさらしたくないじゃないですか。 だからAWSなどのVPSを借りてそのうえでアプリを動かすんだと思います。 ただね、VPSでは二次記憶で使えるデータ量が決まっているんですね。しかもそのデータ量が結構限られています。例えば僕が契約しているサーバは二次記憶の容量が30GBです。つまり、大規模なデータベースを展開するには、大幅な課金が必要になるわけです。しかもさ、データベースを移植するのって結構面倒だからさ、一回構築したやつを長く使いたいんです。だからね、データベースだけは自宅においておき、アプリケーションが自宅のDBにデータをとりにきたり、おきに来たりすればいいのでは?と今思っているわけです。DBクライアントがデータを取ってくる時の通信量も考えるとどっちが安いかはまだわからないんですけどね。 じゃあ、自宅のルータをポート開放して、ポートフォワードすればいいんじゃねーの?って思うよね。でもね、データベース用のポートを開放しておくのもなんか怖いんですよ。ブルートフォースとか受けて、破られることもあるわけじゃないですか。ということで、vpnを介して自宅のネットワークにアクセスできるようにしておけばいいのではないか?というのが僕の考えです。 vpnクライアントのインストール sudo apt update sudo apt install openvpn vpnクライアント、設定ファイルのインポート config.ovpnをサーバに配置 sudo openvpn --config /path/to/my/ovpn/file パスワードを入力してトンネル完了 openvpnを介して自宅のmysqlサーバに接続 mysql -u ray -h 192.168.3.10 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 473 Server version: 8.0.33-0ubuntu0.20.04.2 (Ubuntu) Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> いけてしまっている…これはマジで感動!!ネットワークはやはり面白い。仕組みとかはもっと勉強しないといけませんが。 いやー--、実際これはすごいです。マジですごいですわ!!感動ですわ。 ...

August 13, 2023 · 1 min · 157 words · Me

openvpn client in a docker container

やりたいこと webアプリケーションを家のサーバで動かすとなるとセキュリティーの観点からして怖いじゃないですか。やっぱり自宅のipさらしたくないじゃないですか。 だからAWSなどのVPSを借りてそのうえでアプリを動かすんだと思います。 ただね、VPSでは二次記憶で使えるデータ量が決まっているんですね。しかもそのデータ量が結構限られています。例えば僕が契約しているサーバは二次記憶の容量が30GBです。つまり、大規模なデータベースを展開するには、大幅な課金が必要になるわけです。しかもさ、データベースを移植するのって結構面倒だからさ、一回構築したやつを長く使いたいんです。だからね、データベースだけは自宅においておき、アプリケーションが自宅のDBにデータをとりにきたり、おきに来たりすればいいのでは?と今思っているわけです。DBクライアントがデータを取ってくる時の通信量も考えるとどっちが安いかはまだわからないんですけどね。 じゃあ、自宅のルータをポート開放して、ポートフォワードすればいいんじゃねーの?って思うよね。でもね、データベース用のポートを開放しておくのもなんか怖いんですよ。ブルートフォースとか受けて、破られることもあるわけじゃないですか。ということで、vpnを介して自宅のネットワークにアクセスできるようにしておけばいいのではないか?というのが僕の考えです。 vpnクライアントのインストール sudo apt update sudo apt install openvpn vpnクライアント、設定ファイルのインポート config.ovpnをサーバに配置 sudo openvpn --config /path/to/my/ovpn/file パスワードを入力してトンネル完了 openvpnを介して自宅のmysqlサーバに接続 mysql -u ray -h 192.168.3.10 -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 473 Server version: 8.0.33-0ubuntu0.20.04.2 (Ubuntu) Copyright (c) 2000, 2023, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> いけてしまっている…これはマジで感動!!ネットワークはやはり面白い。仕組みとかはもっと勉強しないといけませんが。 いやー--、実際これはすごいです。マジですごいですわ!!感動ですわ。 ...

August 13, 2023 · 1 min · 171 words · Me

Let_us_encrypt

まあ便利なこと。無料でSSL証明書が発行できるなんて!! ということでね、Let’s encryptを使って期限が切れたSSL証明書を再発行していきたいと思います。 参考サイトは以下のとおりです。 ref step1 クライアントソフトのインストール sudo apt install certbot python3-certbot-nginx step2 443のポート開放 & ファイアウォールの設定 step3 SSL証明書の発行 sudo certbot certonly これでインタラクティブに設定できる。聞かれたことを書けばいいだけです。 Saving debug log to /var/log/letsencrypt/letsencrypt.log How would you like to authenticate with the ACME CA? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: Spin up a temporary webserver (standalone) 2: Place files in webroot directory (webroot) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Plugins selected: Authenticator webroot, Installer None Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): ingenboy.com Obtaining a new certificate IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/ingenboy.com-0001/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/ingenboy.com-0001/privkey.pem Your cert will expire on 2023-08-22. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le step4 nginx or apacheの設定を変更する。 nginxが証明書にアクセスできるようにパスをnginx.confに書き込むわけですね。はい、以上。 ...

May 24, 2023 · 2 min · 261 words · Me

Openvpn_client_from_ubuntu

ubuntuからopenvpnサーバにつなぐときの設定方法 いや、 settings -> network -> openvpn で一発や!笑 デフォルトでopenVPNのサーバに接続はできるようになっているみたいだ。 ここでメモしておきたいのは、ubuntuでLayer 2 Tunnel Protocolを使ったVPNの設定方法だね。これはデフォルトの設定ではできなくなっていて、ソフトをインストールする必要があるんです。以下のコマンドで一発です。 sudo apt-get update sudo apt-get install network-manager-l2tp sudo apt-get install network-manager-l2tp-gnome あとは、書かれているとおりに設定すれば問題なしです。

May 24, 2023 · 1 min · 25 words · Me

Openvpn_multiple_client

一つの証明書を複数のクライアントで使い、同時接続を可能にする方法 基本的にクライアント証明書は一つのクライアントにつき一つ作るのがいいとされている。しかし、新しく作るのがめんどいときもある。iphoneとsurfaceに同じクライアント証明書が入っているのだが、この二つを同時接続しようとすると、先に接続されていた方が追い出される形になる。 openvpnのログを見てみるとこんな感じである。 Thu Apr 27 12:37:15 2023 MULTI: new connection by client 'hogehoge' will cause previous active sessions by this client to be dropped. Remember to use the --duplicate-cn option if you want multiple clients using the same certificate or username to concurrently connect. chatGPTさんに解決方法を聞きました。 Yes, you can add the '--duplicate-cn' option to your OpenVPN server configuration file. To do this, follow these steps: Open your OpenVPN server configuration file (usually named 'server.conf') using a text editor. Add the line 'duplicate-cn' to the file, without the quotes. Save the file and restart the OpenVPN server for the changes to take effect. Here's an example of what the relevant section of the configuration file might look like: # Allow multiple sessions per client username or certificate duplicate-cn 解決です。chatGPT先生すごすぎ!!ググレカス!!はいずれ死語になるのでしょうか??? ...

April 27, 2023 · 1 min · 128 words · Me

Tor

インターネット上での匿名性について 確かフツーのtcp/ip通信はsource/destination がパケットのヘッダーになっているから、サーバはクライアントが誰だか知ることができるんだよね。ヘッダーのsourceを変える方法はいくつかある。例えば、vpn。しかし、vpnはサービス提供者がパケットを全部見ることができるんだよね。んで、不正アクセスがあった時には警察側にログを提供しかねないんですよね。んで、ログから接続先が割れて逮捕されてしまうと。これを防ぐのがtorだね。 警察からの追跡は完全に逃れることができる。ただ、torノードの提供者にヤバいやつがいてパケットダンプをしているってこととかはあると思う。まあ、パケットダンプしていても暗号化されていれば大丈夫なんだけど。 The onion router 匿名性を守るための通信手段がtor。んで、torを使ったインターネットブラウジングを可能にするのが、torブラウザ。 言ってしまえばtorはvpnの上位互換だな。torネットワークに所属するtorノードの中から3つのノードをランダムに選んで、それぞれが暗号化して通信する。通信経路の各ノードは通信元ノードと通信先ノードしかわからないため、完全に秘匿性が守られる。通信元(ブラウザ)と通信先(ウェブサイト)のセットを得ることが不可能である。 例えば、 browser -> tor1 -> tor2 -> tor3 -> website でwebsiteと通信するとき、tor1はbrowserから送られていることがわかるけど、browserがどのサイトを見に行っているかはわからないようになっている。これによって完全に秘匿性が守られるわけだね。素晴らしい。まあ、通信速度はあほみたいに遅いけど。 ただ、気を付けたいのが、tor3 -> websiteの段階では平文が流れるわけだから、ここがhttpだと普通に見れてしまうわけですね。例えば攻撃者がtorネットワークにノードを配置するとき、そのノードがtor3になると通信が全部見られてしまうわけですね。 ちなみにtor3のことを出口ノードって言います。 torを利用するときに使えるツール tor networkから接続いるか どのipから接続しているかがわかるサイト 上のやつの日本版(cman) torの速度をfast.comで ログが取られていない、秘匿性の高いVPNサービス protonVPN PrivateInternetAccess すべての通信にtorを使うtailsというos tails vpn over tor と tor over vpn vpnのの先にtorがあるか、torの先にvpnがあるかのちがいで安全性は変わるのだろうか?いや変わらないな。いずれにしろvpnで秘匿化されるphaseが入るから。いやでもtor3が攻撃者である可能性も否めないので、vpn over torが一番安全なのか。これも平文が流れる場合など限定されるけど。 んで、tor over vpnは、普通にvpnを起動してからtorブラウザを使えばいいね。 vpn over torが厄介でね、まずプロトコルはopenvpnじゃないとだめっぽいですね。んで、openvpnの設定ファイルに次の行を書き込むっぽい。 socks-proxy localhost 9050 socks-proxy-retry vpn over torを使うと、マジで完全にuntracableになる(実はならない。その理由を後で書きます)。 そして、torのさきにvpnを置くことで、torからの接続をブロックしているサイトにもアクセスできるようになるんですね。すばらしい!!vpnの代わりにプロキシ―を使うこともできます。 ただ、ブラウザの通信以外もtorを通すためにはtorそのものをインストールする必要があります。 *vpn over torでも完全匿名にならない理由。 はい、それはtorの入口ノードがどこから接続が来ているかを監視している場合がるからですね。torの入口に攻撃者がいるっていうのが一番面倒くさいです。まあ、あくまでipが割れるってだけですけど。 なんで、一番安全なのはvpn over tor over vpnって感じかな。 これは確実にuntracableになる。 torと仮想通過 tor、という匿名ネットワークを利用するのだから、支払いも匿名でやりたいよね?となると、暗号通過しかないわけですね。暗号通過。 bitcon AtM torノード一覧 ノードリスト ...

January 19, 2023 · 4 min · 679 words · Me