それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

sslh で 443 ポートのUDP/TCP を振り分ける(openvpn/udpとwireguard/ udp を使う)

443 ポートを活用する

443 ポートで https / ssh / openvpn / wireguard を全部の待受ができたらいいなと思った。

フリーWiFiが443 / 53 /80 以外のポートを使わせてくれない事が非常に多い。公衆無線LANでポート監視やるのは流石にまずいと思うんだけど。実際やられてるんだから仕方ない。あまり監視をしちゃうと、某国みたいにVPNのイタチごっこが始まるので本当に勘弁してほしい。

よろしい、ならば抵抗してみよう。

sslh 最新版が UDP に対応

sslh の最新版がUDPに対応していた

最新版コードを持ってきて ビルドする

git clone https://github.com/yrutschle/sslh.git
cd sslh
make 

UDP にも対応させる

UDPはfork でパケットを流せないらしいので、select コールで使うらしい

./sslh-select -F /etc/sslh.conf

/etc/sslh.conf

verbose: 0;
foreground: true;
inetd: false;
numeric: false;
transparent: true;
timeout: 1;
user: "sslh";
pidfile: "/var/run/sslh/sslh-select.pid";



# Change hostname with your external address name.
listen:
(
    {
      host: "192.168.1.222";
      is_udp: false;
      port: "443";
    },
    {
      host: "192.168.1.222";
      is_udp: true;
      port: "443";
    }
);

protocols:
(
    { name: "ssh";
          service: "ssh";
          host: "127.0.0.1";
          port: "8022";
          is_udp: false;
          fork: true;
    },
    { name: "openvpn"; host: "localhost"; port: "1194"; },
    { name: "tls";
        host: "127.0.0.1";
        port: "443";
        alpn_protocols: [ "h2", "http/1.1", "spdy/1", "spdy/2", "spdy/3" ];
        is_udp: false;
        fork: true;
        log_level: 0;
        tfo_ok: true },
    # wireguard
    { name: "regex";
        host: "192.168.1.21";
        log_level: 2;
        is_udp: true;
        fork: false;
        port: "11945";
        regex_patterns: [ "\x01\x00\x00\x00" ];
      }
);

wiregaurd は regex

regex_patterns: [ "\x01\x00\x00\x00" ];

これで、wireguardのパケットを識別できるらしい。識別できるってことはブロックされちゃうってことでもあるけど、そこまで流行ってないwireguardだ、これでしばらく通信できそうな気はする。

UDPTCP を同時リッスンするポイント

リッスンをudp/tcp と2つかくことが設定ポイントになる。

listen:
(
    {
      host: "192.168.1.222";
      is_udp: false;
      port: "443";
    },
    {
      host: "192.168.1.222";
      is_udp: true;
      port: "443";
    }
);

UDP サポートについて

UDPは本家のマニュアルに記載が追加されていた。

https://github.com/yrutschle/sslh/blob/master/doc/config.md#udp

UDPがサポートされたのは2021/08 の 1.22 リリース前後のようです。

443 ポートで隠す?

暗号化通信をしていたとしても、SNIでドメイン名は丸見えだし、IPアドレスは隠せない。

そうなると、必然的にVPNを使うことになる。TLSでトンネルを掘るとか、HTTPSで Proxy Connectをすることになる。

となると、TLS通信を監視する必要が出てくる。そのためにカスペルスキーのようなソフトでTLSの監視を行うことになる。

となると、すべての通信はLocalhost経由になり、監視されることになり、証明書を信用できなくなる。本当にそれは望んだ自由な社会なのだろうか。

IPv6でIP範囲指定が難しくなり、すべての端末がグローバルアドレスになりつつある現代でローカルネットやPC管理を前提としたセキュリティは崩壊寸前かもしれない。