2024-01-01から1年間の記事一覧

ssh-agent転送のセキュリティ問題と適切な鍵管理の方法について考える

ssh-agentは鍵ファイルのパスフレーズを記憶してsshログイン時に毎回入力しなくても済むようにしてくれたりリモートマシンからローカルの鍵を使えるようにしてくれたり(ssh-agent転送)といった機能をもつ便利なツールですが、このssh-agent転送にはセキュ…

root権限のないssh上にUDPを通す方法について(ポートフォワード、SOCKS5プロキシなど)

sshはリモートマシンとの通信に汎用的に使われるセキュアなプロトコルで、ポートフォワードを使用してリモート上のプログラムがローカルで使える(あるいはその逆)ようにしたり-Dオプションを使用してSOCKSプロキシとして動作させることでローカルのアプリ…

ファイルブラウザ(エクスプローラ)の右クリックメニューで、rclone・sshfs経由で閲覧しているssh先のファイル・フォルダをssh先のシェルやVS Codeで開く

sshを使ってリモートのサーバー上で開発を行っているとします。このとき、基本的にはほとんど全てのこと(コンパイルや機械学習など計算を伴うものや、ファイル操作など)はsshで入った先のリモート上(ターミナル、あるいはVS CodeならRemote SSH拡張機能)…

Rustのslotmapやslabを使って双方向連結リスト(っぽい何か)を作る

Rustで双方向連結リストが欲しいと思ったときは、意外と簡単に実装できる代替品が使えるかも?という記事です。 Rustでの連結リスト実装に関しては、何よりもまずIntroduction - Learning Rust With Entirely Too Many Linked Listsという有名な文献がありま…

日本国内の組織に割り当てられている1048576(/12)以上の大きさのIPアドレス範囲の一覧

何となく知りたくなったので、JPNIC管理下で、APNICが逆引きの管理を行っているIPv4アドレス一覧 - JPNIC この中で1048576(0x100000)以上の大きさのものをどこの会社が持っているのか調べてみました。全部で14個あります。大きい順(大きさが同じなら若い…

2つのLinux間でIPv4 over IPv6トンネリング

IPv4 over IPv6トンネリングを使うと、IPv6しか使えない環境から、IPv4/IPv6どちらも使える環境(VPSなど)を経由してIPv4でインターネットに出ていくことができます。 今回は別にIPv4が使えなかったわけではないのですがこれを試してみました。 リモート側…

LinuxルーターのMAP-Eで良い感じにNATポートを使い回す方法

OpenWRTなどLinuxを使用してMAP-E(v6プラス、OCNバーチャルコネクトなど)接続を行う方法は様々なサイトで紹介されていますが、iptablesやnftables(バックで動いているのはnetfilter)のNATでは使用ポート範囲を複数(1000-2000, 3000-4000みたいな感じで…

Linux 6.5のnetfilterのNATはTCPのTIME_WAIT状態のポートを使いまわす

TCPでは、自分から接続を切断する際に、外向きのFIN(+ACK)→内向きのFIN+ACK→最後の外向きのACK、という順でパケットがやりとりされます。この外向きのACKを送ったあとしばらくはソケットを使い回さないようにTIME_WAITという状態が設定されます(理由は他…

GCPのCompute EngineのFree Tier(無料枠)の外部静的IPには本当に課金されないのか?

ドキュメント読んでもわかりづらいのでメモを残しておきます。 2024/4現在、GCPの無料枠(Free Tier)ではメモリ1GBくらいの仮想マシンを永久無料で使えることになっていますが、これに割り当てられる外部IPv4アドレス(インターネットと接続するために必要…

ファイルをディスク上で暗号化し、ログイン時に自動で復号する方法まとめ(Windows・Linux)

概要 モバイルPCなどでは、盗難のリスクがあるため、機密性の高いユーザーデータはディスク上に平文で保存せず、適切に暗号化した状態で保存することが望ましいといえます。ただ、復号のために専用のパスワードを入力するような方法は手間がかかるため、この…

特定アプリケーションのTCP・UDP通信を透過的なSocks5プロキシ経由にする方法(Windows・Linux・Androidなど)

概要 ネットワーク上の制約を回避するためにプロキシやVPNのような類のものを使用するにあたって、(必ずしもそれ自体ではプロキシなどに対応していない)特定のアプリケーションを対象に、またTCPだけでなくUDPにも対応したいということがあると思います。 …

マルチユーザー&root権限なしの環境で他ユーザーからTCPポートを保護する

sshサーバーなど、多くのユーザーが1つのオペレーティングシステムを共用するマルチユーザー環境では、TCP/UDPのようなポートを使用するアプリケーションを起動するとそれは他のユーザーからもアクセスできるようになります。これはセキュリティ的に望ましく…

cgroupのnet_clsを使って、特定のプロセス(ツリー)に対するiptables/nftablesルールを設定する

概要 Linuxのcgroup機能とは、プロセスをグループに分けて管理し、その単位ごとにCPU/メモリの割り当て等の設定を可能にするものです。 cgroupのサブシステムにはcpu, memoryなどの他にnet_clsというものがあり、これを使うと指定したグループからのパケット…

Linuxで一つのパケットに2回(複数回)NATをかけるための2つの方法

概要 LinuxでNATなどを担当するiptablesやnftables(中身はnetfilter)の機能では、一つのパケットに2回以上SNATあるいはDNATをかけることはできません。SNATでもDNATでも、パケットにNATをかけると一度決まったらそのパケットのNATに関する処理はそこで完了…

NAT動作をめぐる誤解まとめ

概要 この記事では、P2P通信の快適性などに大きく影響するところでありつつ、メーカー・プロバイダ側からそれほど積極的に情報が提供されているとは言えないNAT機器の動作について、よくある誤解をいくつか取り上げて解説します。 NAT動作に関する前提知識(…

Linuxのnetfilterのconnection trackingとNAT動作の仕組み

概要 LinuxではNATやファイアウォールなどのパケットの扱いを担当するカーネルの機能としてnetfilterというものが搭載されており、特にそのconnection trackingの機能を理解することがLinuxのNAT動作の理解には不可欠です。また、安価な市販ルーターの多くは…

nftables/iptables/ufwの使い分け・ベストプラクティス

(2024/05/22) Docker関連とiptablesのリセットの話を追加し、順番を入れ替えるなど大幅な変更を行いました。また、iptablesでもチェインを使えばnftablesと似たような設定ができそうと書きましたが誤っていたので修正しました。 概要 Linuxのファイアウォー…

【v6プラス/OCNバーチャルコネクトでもNATタイプA】LinuxでポートセービングIPマスカレード付きの制限コーン風NAT(EIM/ADF)を動かす

概要 NAT動作をめぐる誤解まとめ - turgenev’s blogでは、UDPホールパンチングのしやすさとポートの節約を両立するには「Address Dependentなマッピングを保持しつつEIM風に動作するADFなNAT」が一番いいという話を書きました。これだとv6プラスやOCNバーチ…

NATタイプ、ポートセービングIPマスカレード、UDPホールパンチング、STUN

概要 この記事では、NAT(NAPT)を行う機器の動作タイプの分類、およびそれと密接に関連する話題として、ポートの枯渇を防止するためのいわゆる「ポートセービングIPマスカレード」の手法とUDPホールパンチングについて解説します。 NAT(NAPT)(あるいはIPマ…