home A TCP Proxy in 30 lines of Rust Jul 2021 TCP proxies accept connections from one computer and forward them to another. AWS Global Accelerator and Cloudflare Spectrum are examples of TCP proxies you can pay to use in the wild. TCP proxies can be quite simple. Here we’ll write one in 30 some lines of Rust. After we write it we’ll demonstrate the proxy’s functionality by proxying traffic from lo
MySQL 8.0.22 の新機能で DNS SRV レコードのサポートというのがあったので試してみた。 https://dev.mysql.com/doc/refman/8.0/en/connecting-using-dns-srv.html MySQLサーバー3台 (a.example.com, b.example.com, c.example.com)とそれに接続するためのクライアントの計4台を docker-compose で作成する。 Dockerfile FROM ubuntu RUN apt update RUN apt install -y mysql-client libmysqlclient-dev gcc unbound bind9-dnsutils RUN rm -f /etc/unbound/unbound.conf.d/root-auto-trust-ancho
In this course, you will learn how to work with the UDP and TCP internet protocols in real-world scenarios. You will apply your skills to build small, fun networking applications in Rust — right in your browser! No previous knowledge of network programming is required, but we assume that you are familiar with Rust syntax. If you’re not, that's fine too! You can read The Rust Book and learn by prac
More posts When writing services that accept TCP connections, we tend to think of our work as starting from the point where our service accepts a new client connection and finishing when we complete the request and close the socket. For services at scale, operations can happen at such a high rate that some of the default resource limits of the Linux kernel can break this abstraction and start caus
現在標準化が進められている次世代HTTPの「HTTP/3」は、トランスポートプロトコルとして「QUIC」と呼ばれる新しいプロトコルを採用します。 現時点のHTTPはトランスポートプロトコルとして「TCP」が採用されています。その上で、可能な限り高速な通信が行えるようにさまざまな工夫や最適化が進められてきました。そしてもうこれ以上高速にしようとすると、TCPそのものを改善していくべきだろう、というところまできたのです。 それがHTTP/3で「QUIC」が採用される大きな理由といわれています。 TCPは内部で輻輳制御や再送などを自動的に行うことで通信が確実に行われることを保証してくれる便利なプロトコルですが、それゆえに、確実に通信が行われるまで待つ必要があるために通信環境によっては遅くなりがち、などの側面があります。 そこでQUICは、TCPのような通信の保証がない代わりにリアルタイム性の高い
本稿では、基本的なDissectorの作り方と、Dissectorを活用したパケット解析方法を紹介します。 WiresharkのDissectorをご存知でしょうか?DissectorはWiresharkのプロトコル解析部分で、バイト列を人が理解できる内容に変換し表示してくれます。 Wiresharkを使った事がある方なら、独自プロトコルのバイト列を人が理解できる表示にできないかなぁと思った経験があると思います。 Dissectorを自作しPluginとして追加すると独自プロトコル解析が容易になります。 なぜ今Dissectorを紹介するの? 技術部の安井です。 長年、制御システムを開発した経験から、現在は制御システムセキュリティを見ています。 現在、世の中の多くのプロトコルに対応したDissectorがWiresharkに搭載されています。しかし、制御システムやIoT機器など独自プロトコ
様々な輻輳制御アルゴリズム 輻輳制御アルゴリズムとは、輻輳ウインドウサイズ(cwndと表されます)をいかに上手にコントロールするか、の方法です。より効率の良いデータ転送を実現するために、これまで非常に多くの輻輳制御アルゴリズムが研究されてきました。 これまでに開発された代表的な輻輳制御アルゴリズムとその関係性を、図1を用いて紹介します。 図1 様々な輻輳制御アルゴリズム 図中では、四角い囲みが各輻輳制御アルゴリズムの名称と提案年を表します。横軸は時間軸で、右に位置するものほど新しい輻輳制御アルゴリズムであることを表します。塗りつぶしの色はフィードバック形式の違いを表し、黄色がLoss-based、濃緑がDelay-based、そして水色がHybridを表します。Loss-basedはパケットロスを、Delay-basedは遅延を、Hybridはその両方を基準に、cwndを更新する輻輳制御ア
なんとなく興味がでてきたのでインターネット情報を参考にTCP Proxyを書いてPostgreSQLの通信覗いてみた。クエリの取得まではできた。 HTTP/1.1の世界で生きていたので、プログラムでバイナリ?を触ったの久しぶり過ぎるし(TokyoTyrantのPHPクライアント書いたときぶり?)やっぱり全然慣れない— k1LoW (@k1LoW) 2018年7月15日 覗いてみました。 ただ見るだけなら tcpdump などを活用すれば良さそうなのですが、せっかくならプロトコルを解析した結果を出力してみたかったので、取得結果をイジれるようにTCP Proxyを書くところからはじめてみました。 TCP Proxyってどうやって書けば?というのは基本的にインターネットの情報を参考にしました。特に以下のツールのコードを参考にしました。 github.com で、書いたのが tcprxy です。
TL;DR 平文のTCP/IPの通信では送信したデータの完全性は期待できないので、経路にはSSL/TLSを使いましょう TCP/IPはUDPと違い、信頼性のある通信を実現するためのプロトコルという説明がよくされる。なのでTCP/IPでやり取りしたデータは1bitの狂いもなく転送先に届くと思われがちだ。TCP/IPが信頼性のある通信を確保してると言われているのは下記の理由による。 1. データが届かなかった場合の再送処理がプロトコルに入っている 2. TCPパケットにペイロードのチェックサムがあり、不具合が検知されると修正もしくは再送される(ただし16bit) 3. IP層の更に下の層にチェックサムがあり、不具合が検知されると修正もしくは再送される(イーサの場合32bit) しかしチェックサムはそれぞれ16/32bitのため、昨今の超大量データを取り扱うにはかなり心もとない。 1. ざっくり
Hori Blogフリーランスでバックエンドエンジニアとして活動している Ryota Hori のブログです。 最近はテック系記事より雑記ブログ気味。 先日発表された AWS の Network Load Balancer (NLB) を gRPC で使ってみたのですが、 idle timeout 周りで盛大にミスったので知見共有です。 経緯 先日、 NLB こと Network Load Balancer が AWS にてリリースされました。 新しい Network Load Balancer – 秒間数百万リクエストに簡単にスケーリング | Amazon Web Services ブログ NLB は TCP レベルでのロードバランシングができ、プレウォーミングなしで高パフォーマンスを発揮できるため既存の AWS の LB に比べ gRPC との相性が良いです。 マイクロサービス構成を取
Disclaimer 私はネットワークの勉強もちゃんとしたことないし、Linux のソース読むのもはじめてな素人です。 何かおかしなところなどあれば、遠慮なくコメント欄でまさかりをお願いいたします。 ソースコードの引用に関して 本文中で Linux のコード/ドキュメントを引用している箇所がありますが、すべてタグ v4.11 のものです。また、日本語のコメント・翻訳文は筆者が入れたものです。 TL; DR Linux のカーネルパラメータ net.ipv4.tcp_tw_recycle は、バージョン4.12から廃止されました。 今後はこの設定は行わないようにしましょう(というかできません)。 一方、net.ipv4.tcp_tw_reuse は安全であり、引き続き利用できます。 …というだけの話なのですが、自分用にメモがてら経緯・背景などを記録しておきます。 なんで気がついたか このパラ
Google、TCPのスループットとレイテンシを改善する輻輳制御アルゴリズム「TCP BBR」をGoogle Cloudで利用開始 Googleは、同社が開発したTCPの輻輳制御アルゴリズム「TCP BBR」をGoogle Cloud Platformで利用可能にしたと発表しました。 インターネットにおける通信にはTCPを用いる場合とUDPを用いる場合に分かれますが、BBRはTCPにおける輻輳制御アルゴリズムを改善したもの。すでにGoogleはTCP BBRをYouTubeのネットワークで利用しており、従来のパケットロスをベースにした輻輳制御アルゴリズムであるCUBICを用いた場合と比較して、スループットが平均で4%、最大で14%以上改善したことを明らかにしています。 TCP BBRは現在の高速なネットワークに適した輻輳制御アルゴリズム TCP BBRのBBRは「Bottleneck Ba
ども、大瀧です。 AWSが提供するLinuxディストリビューション Amazon Linuxの最新版であるAmazon Linux 2017.03がリリースされました。このリリースで採用しているLinuxカーネル バージョン4.9では、新しいTCP輻輳制御アルゴリズムBBRのサポートが追加されています。 しかしながらAmazon Linux 2017.03.0のカーネルパッケージではBBRモジュールが無効なため、今回はカーネルを再ビルドして試す手順をご紹介してみたいと思います。 お断り : 一般的にカーネルを再ビルドして利用することはディストリビュータのサポート範囲外になります。自己責任の元、検証用途にとどめ本番環境への適用はビルド済みカーネルパッケージのリリースを待ちましょう。 ビルド環境の準備 まずは、カーネルを再ビルドするための環境を整えましょう。一般的にカーネルの再ビルドにはローカ
昨日、「MalwareMustDie」のブログで昨年10月からの SSH での TCP フォワーディングを使うハッキングの仕組みを 報告しました。 SSHでのTCPポートフォワーディングとは日本語では「SSHでのポートフォワーディング」ですね。ようは、確立している SSH 接続をトンネルとして利用し、任意の通信をトンネルを経由させて転送することで、転送先ネットワークやサーバとは、透過的な通信が可能となります。 報告内容の中にSSHでのポートフォワーディングの上でSMTP経由のハッキングの動きがあり、回数も多く、2016年10月24日から2017年2月27日の段階では 8,000件以上 の SMTP 不正なアクセスの動きを発見しました。 スクリーンショットは下記となります↓ ↑その中に74件は国内のメールサーバのIPを発見致しました。 報告しましたSSHでのポートフォワーディング経由SMTP
カリフォルニア大学らの研究者らが公開したホワイトペーパー「Off-Path TCP Exploits: Global Rate Limit Considered Dangerous (PDF)」が、Linuxカーネルバージョン3.6以降にはネットワークスタックに重大な脆弱性があり、遠隔から攻撃者によってTCP通信の内容を推測される危険性があると指摘していることを複数のメディアが伝えた。Linuxカーネル3.6は2012年に公開されており、影響範囲が広範囲に及ぶ可能性が高く注意が必要。 研究者らが指摘した脆弱性はパス外TCP攻撃(Off-Path TCP Exploits)を許してしまうというもの。1分間ほどの攻撃で90%程度の確率で通信に割り込むパケットを生成することが可能になるとされている。この攻撃は受けていることがわかりにくく、しかも広範囲に影響が及ぶ可能性が高い。Linux以外のオペ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く