SOCKSプロキシのOSS〜Dante〜
近年、テレワークの普及やクラウドサービスの利用拡大により、従来の「社内ネットワーク=安全」という前提が崩れつつあります。こうした背景から、「すべての通信を信頼しない」ことを前提とするゼロトラストの考え方が重要視されています。SOCKSプロキシサーバのOSS「Dante」は、通信の許可/拒否の条件を詳細に設定することができるため、ユーザ単位や通信先など、条件に基づいて柔軟なアクセス制御を実現することができます。この記事では、Danteの機能やゼロトラストのための活用例を紹介します。
- +
目次
SOCKSプロキシとHTTPプロキシの違い

SOCKSプロキシとは、クライアントと宛先間のTCP/UDP通信を中継するプロキシ方式の一つです。SOCKSプロトコルにはSOCKS4とSOCKS5が存在し、特にSOCKS5は認証機能やUDP通信の中継に対応しているため、現在ではSOCKS5が主流となっています。
HTTPプロキシは、その名の通りWeb通信(HTTP/HTTPS)に特化したプロキシです。URLやHTTPヘッダといったアプリケーション層の情報を解釈できるため、アクセス制御やコンテンツフィルタリング、キャッシュなどの高度な制御が可能です。その一方で、基本的にはWebブラウザの通信に用途が限定されます。
これに対してSOCKSプロキシは、特定のアプリケーション層プロトコルに依存しない、より汎用的なプロキシです。TCPやUDPレベルで通信をそのまま中継する仕組みのため、HTTP通信だけでなく、SSH、メール、FTPなどさまざまなプロトコルに対応できます。
そのためSOCKSプロキシは、踏み台サーバを経由した通信や、閉域環境から外部へのアクセス手段として利用されることが多く、Linuxサーバ環境における柔軟な通信中継手段として広く利用されています。一方で、HTTPプロキシのようにHTTPヘッダ解析に基づく詳細な制御は基本的に行いません。
SOCKSプロキシのメリット
SOCKSプロキシを利用することで、クライアントは、直接接続できない外部や内部の接続先へ、プロキシサーバを経由して通信を行うことができます。
これはVPNと同様に中継経路を提供する仕組みですが、VPNが端末全体の通信を対象にトンネルを構築するのに対し、SOCKSプロキシは、アプリケーション単位で中継経路による通信の利用可否を選択することができます。そのためVPNと比較して、アプリケーションごとにSOCKSプロキシを経由するか否かを選択できる点で柔軟性が高く、導入も容易です。
ただし、SOCKSプロキシを利用するアプリケーション側でSOCKSプロキシ設定が必要となります。
Danteとは
Danteとは、クライアントの通信を中継するSOCKSプロキシサーバソフトウェアです。BSDライセンスで公開されています。SOCKS4およびSOCKS5に対応しており、TCP/UDP通信をプロキシ経由で転送できます。Web用のリバースプロキシ(Apache HTTP Server、Nginx、Traefik Proxyなど)とは異なり、HTTP通信の処理ではなく、SOCKSによる汎用的な通信中継を目的としたソフトウェアです。
Danteの導入メリット
Danteを導入することで以下のようなメリットがあります。
ゼロトラスト環境の実装に適している
ゼロトラストとは、「何も信頼しない(Never Trust)、常に検証する(Always Verify)」という考え方に基づくセキュリティモデルです。従来のように「社内ネットワークに入ったら安全」という前提を捨て、社内・社外を問わず、すべてのアクセス・通信・認証を常に検証し続けることを基本思想としています。
Danteは、接続してくるクライアントやSOCKS経由で接続される宛先に対して、通信を許可または拒否する条件を詳細に定義することが可能です。そのため、ユーザや端末ごとにアクセス可能な範囲を制御したり、不正な通信先へのアクセスを遮断したりすることができ、ゼロトラスト環境を実現することができます。
ネットワーク通信を最小権限で制御したい場合に有効
通信の中継ルールを柔軟に設定できるため、「必要な通信だけを許可する」というネットワーク制御を実現できます。
たとえば、特定のユーザやアプリケーションに対して「特定の宛先・ポートへの通信のみ許可する」といった細かな制御が可能です。これにより、不要な外部通信を遮断し、万が一の不正アクセスやマルウェア感染時の被害範囲を限定することができます。
VPNの代替的な手段として小規模な構成に利用しやすい
Danteは、VPNのようにネットワーク全体を接続する方式とは異なり、特定の通信のみを中継する構成を実現することができます。そのため、小規模な踏み台構成や閉域ネットワーク環境では、VPNの代替的な手段として利用することができます。
Danteの機能
Danteには以下のような機能があります。
柔軟なアクセス制御設定
Danteでは柔軟なアクセス制御を設定することができます。具体的に以下のような設定を行うことができます。
- 接続元IPアドレス指定による通信許可・拒否
- 接続先(宛先)IPアドレス指定による通信許可・拒否
- 接続元/接続先ポート指定による通信許可・拒否
- プロトコル種別(TCP/UDP)による通信許可・拒否
- ユーザ毎の通信許可・拒否
上記のアクセス制御ルールを設定することで、接続元IPアドレス、宛先ポート、通信プロトコル(TCP/UDP)などを条件として通信可否を制御することができます。
内部側クライアントでのDNS名前解決
Danteはクライアントから名前解決を指定された場合、内部ネットワークのDNS環境を用いて名前解決を実施することができます。
通常、宛先などにホスト名を指定した場合、そのホスト名の名前解決は接続元のクライアント側で実施されます。しかし、外部ネットワークから内部ネットワークへの接続で、内部DNSでのみ解決可能なホスト名を指定するようなケースでは、外部のクライアントはホスト名の名前解決を行うことができません。
このような場合にDanteを利用することで、名前解決を内部側に委ねることが可能です。そして、取得したIPアドレスをもとに宛先ホストを特定し、クライアントと宛先サーバ間の通信を中継します。
認証機能
クライアントから宛先へのSOCKS通信時に各種認証機能を利用し、接続可能な利用者を制限することができます。認証方式として、ユーザ名/パスワード認証やLDAP認証を設定することが可能です。socksルール毎に、OSユーザ・グループによるアクセス制御設定を行うこともできます。
ログ出力
Danteのログは、「クライアント→SOCKSサーバ→宛先サーバ」の流れを段階ごとに出力しています。そのため、accept(接続受付)→connect(宛先接続)の2段階でログを出力することができます。
他のSOCKSプロキシソフトウェアとの比較
Danteと、代表的なSOCKSプロキシソフトウェアの主要機能を比較表にまとめました。
| Dante | 3proxy | Shadowsocks | SS5 | |
|---|---|---|---|---|
| 主な用途 | SOCKS4/5 | SOCKS4/5 | SOCKS5 | SOCKS4/5 |
| TCP中継 | 〇 | 〇 | 〇 | 〇 |
| UDP中継 | 〇 | × | × | × |
| IP・ポート・プロトコルの同時指定による通信制御 | 〇 | × | × | × |
| 認証方式 | PAM、LDAP、RADIUS、OSユーザ | パスワードのみ (プロキシ接続時のPW) |
パスワードのみ (プロキシ接続時のPW) |
パスワード、LDAP |
| DNS解決 | 〇 (クライアントがホスト名で接続した際に、自分でDNS問い合わせしてIP取得) |
× (OS依存) |
× (OS依存) |
× (OS依存) |
| 用途 | TCP/UDP両方の汎用中継。複数条件を組み合わせた柔軟なアクセス制御や多様な認証方式が利用可能 | 軽量TCP中継、 小規模環境向き |
軽量TCP中継、 小規模環境向き |
TCP中継中心、 小〜中規模環境向き |
3proxyやShadowsocks、SS5は設定や運用が比較的シンプルで、単一条件のアクセス制御や限定的な認証方式で十分な環境に向いています。
一方、DanteはTCP・UDP両方の中継に対応し、IP・ポート・プロトコルの同時指定や多様な認証方式を利用できるため、複数条件を組み合わせた柔軟なアクセス制御が求められる環境に向いています。
SOCKSプロキシの利用例
SOCKSプロキシは、アプリケーションでも利用することができます。例えば、Webブラウザやファイル転送ソフトなど、多くのネットワークアプリケーションがSOCKSプロキシに対応しています。プロキシサーバを経由した通信を行うことで、ネットワークの制限を回避したり、通信経路を制御したりすることが可能になります。
SOCKSプロキシに対応したソフトウェアとしては、次のようなものが挙げられます。
WinSCP

Dante接続時のWinSCP画面
WinSCPは、SFTPやSCPなどのプロトコルを利用して、サーバにファイル転送を行うことができるソフトウェアです。SOCKSプロキシを利用することで、社内ネットワークの外部から内部サーバへ接続する場合や、ファイアウォールによって直接接続が制限されている場合でも、通信経路を確保することができます。これにより、ネットワーク構成やセキュリティポリシーを維持したまま、ファイル転送やサーバ管理を行うことが可能になります。
FreeRDP

Dante接続時のFreeRDP画面
FreeRDPは、RDP(リモートデスクトッププロトコル)を利用して宛先サーバへ接続し、遠隔からデスクトップ操作を行うことができるソフトウェアです。SOCKSプロキシを経由することで、ネットワーク構成やアクセス制御のポリシーを変更することなく、リモートサーバへの接続を実施することができます。また、通信経路を一元化することができるため、アクセス制御やログ管理を行いやすくなるという利点もあります。
PuTTY

Dante接続時のPutty画面
PuTTYは、主にSSHプロトコルを利用してリモートサーバへ接続し、遠隔からサーバの操作や管理を行うことができるクライアントソフトウェアです。PuTTYは主にWindows環境で利用されるSSHクライアントであり、GUI画面から簡単に接続設定を行うことができます。SOCKSプロキシを経由することで、ネットワーク構成やファイアウォール設定を変更することなく宛先サーバへの管理接続を実施することができるほか、SSH通信の経路をプロキシサーバに集約することができるため、アクセス制御や接続ログの管理を一元的に行いやすくなるという利点があります。
TeraTerm

Dante接続時のTeraTerm画面
TeraTermは、SSHやTelnetなどのプロトコルを利用してリモートサーバへ接続し、遠隔からサーバの操作や管理を行うことができるソフトウェアです。TeraTermも、SOCKSプロキシを利用することで、宛先サーバへの管理接続を実施したり、アクセス制御や接続ログの一元管理を行ったりすることができます。
Webブラウザ

Dante接続時のFirefox画面
Webブラウザは、HTTPやHTTPSなどのプロトコルを利用してWebサーバへ接続し、Webページの閲覧やWebアプリケーションの利用を行います。
OSSのWebブラウザであるFirefoxは、追加ソフトウェアや起動オプションなしで、ブラウザの設定から直接SOCKSプロキシを指定することが可能です。Webブラウザの通信も、SOCKSプロキシの利用によって対象となるWebサーバへアクセスしたり、ブラウザからの通信経路をプロキシサーバに集約したりすることができます。
なお、Google ChromeやMicrosoft Edgeでは、Firefoxのようにブラウザの設定画面から直接SOCKSプロキシを指定する機能は提供されていませんが、起動オプションを利用したり、Windowsのプロキシ設定でSOCKSプロキシを設定することで、SOCKSプロキシ経由の通信を実施することが可能です。
デージーネットの取り組み
デージーネットでは、ゼロトラストを実現するソリューションとして、Danteを利用したシステムの構築をご提案しています。デージーネットでシステムを構築したお客様には、導入後支援サービスとして、Open Smart Assistanceを提供しています。Open Smart Assistanceでは、ソフトウェア単体のサポートではなく、Linuxなどを含むシステム全体に対するサポートをしています。ソフトウェアにバグがあった場合には、回避方法の調査、コミュニティへの連絡による改善促進といったサポートを受けることができます。
また、Danteのインストール方法や使い方、詳しい機能などを調査し、調査報告書に掲載しています。調査報告書は無料でダウンロードすることが可能です。
関連情報の一覧
Dante調査報告書

Danteは、クライアントの通信を中継するSOCKSプロキシサーバソフトウェアです。ネットワーク通信を最小権限で制御したい場合やゼロトラスト環境の実装に適しており、ユーザや端末ごとの厳密なアクセス制御ができます。
無料で使えるプロキシサーバ/ロードバランサおすすめ21選

この記事では、プロキシサーバ/ロードバランサとして利用できるオープンソースソフトウェアを比較し、用途に応じた選び方のポイントをご紹介します。
デージーネットがお勧めするOSSを使ったゼロトラスト対応〜ゼロトラストをわかりやすく解説〜

ここではゼロトラストをわかりやすく解説するとともに、デージーネットがお勧めするOSSを活用した現実的なゼロトラスト対応の進め方について、わかりやすく解説します。


