diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 0000000..09f045b --- /dev/null +++ b/README.ja.md @@ -0,0 +1,109 @@ +# ![OpenGFW](docs/logo.png) + +[![License][1]][2] + +[1]: https://img.shields.io/badge/License-MPL_2.0-brightgreen.svg +[2]: LICENSE + +OpenGFW は、Linux 上の [GFW](https://en.wikipedia.org/wiki/Great_Firewall) の柔軟で使いやすいオープンソース実装であり、多くの点で本物より強力です。これは家庭用ルーターでできるサイバー主権です。 + +> [!CAUTION] +> このプロジェクトはまだ開発の初期段階です。使用は自己責任でお願いします。 + +> [!NOTE] +> 私たちはこのプロジェクト、特により多くのプロトコル用のアナライザーの実装を手伝ってくれるコントリビューターを探しています!!! + +## 特徴 + +- フルIP/TCP再アセンブル、各種プロトコルアナライザー + - HTTP、TLS、DNS、SSH、その他多数 + - Shadowsocks の"完全に暗号化されたトラフィック"の検出、 + など。 (https://gfw.report/publications/usenixsecurity23/data/paper/paper.pdf) + - トロイの木馬キラー (https://github.com/XTLS/Trojan-killer) に基づくトロイの木馬 (プロキシプロトコル) 検出 + - [WIP] 機械学習に基づくトラフィック分類 +- IPv4 と IPv6 をフルサポート +- フローベースのマルチコア負荷分散 +- 接続オフロード +- [expr](https://github.com/expr-lang/expr) に基づく強力なルールエンジン +- 柔軟なアナライザ&モディファイアフレームワーク +- 拡張可能な IO 実装(今のところ NFQueue のみ) +- [WIP] ウェブ UI + +## ユースケース + +- 広告ブロック +- ペアレンタルコントロール +- マルウェア対策 +- VPN/プロキシサービスの不正利用防止 +- トラフィック分析(ログのみモード) + +## 使用方法 + +### ビルド + +```shell +go build +``` + +### 実行 + +```shell +export OPENGFW_LOG_LEVEL=debug +./OpenGFW -c config.yaml rules.yaml +``` + +### 設定例 + +```yaml +io: + queueSize: 1024 + local: true # FORWARD チェーンで OpenGFW を実行したい場合は false に設定する + +workers: + count: 4 + queueSize: 16 + tcpMaxBufferedPagesTotal: 4096 + tcpMaxBufferedPagesPerConn: 64 + udpMaxStreams: 4096 +``` + +### ルール例 + +サポートされているすべてのプロトコルと、それぞれのプロトコルがどのようなフィールドを持っているかについてのドキュメントはまだ準備できておりません。 +一旦は、"analyzer "ディレクトリの下にあるコードを直接チェックする必要があります。 + +式言語の構文については、[Expr 言語定義](https://expr-lang.org/docs/language-definition)を参照してください。 + +```yaml +- name: block v2ex http + action: block + expr: string(http?.req?.headers?.host) endsWith "v2ex.com" + +- name: block v2ex https + action: block + expr: string(tls?.req?.sni) endsWith "v2ex.com" + +- name: block shadowsocks + action: block + expr: fet != nil && fet.yes + +- name: block trojan + action: block + expr: trojan != nil && trojan.yes + +- name: v2ex dns poisoning + action: modify + modifier: + name: dns + args: + a: "0.0.0.0" + aaaa: "::" + expr: dns != nil && dns.qr && any(dns.questions, {.name endsWith "v2ex.com"}) +``` + +#### サポートされるアクション + +- `allow`: 接続を許可し、それ以上の処理は行わない。 +- `block`: 接続をブロックし、TCP 接続の場合は TCP RST を送信する。 +- `drop`: UDP の場合、ルールのトリガーとなったパケットをドロップし、同じフローに含まれる以降のパケットの処理を継続する。TCP の場合は、`block` と同じ。 +- `modify`: UDP の場合、与えられた修飾子を使って、ルールをトリガしたパケットを修正し、同じフロー内の今後のパケットを処理し続ける。TCP の場合は、`allow` と同じ。 diff --git a/README.md b/README.md index 9a32832..3467b41 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ [2]: LICENSE **[中文文档](README.zh.md)** +**[日本語ドキュメント](README.ja.md)** OpenGFW is a flexible, easy-to-use, open source implementation of [GFW](https://en.wikipedia.org/wiki/Great_Firewall) on Linux that's in many ways more powerful than the real thing. It's cyber sovereignty you can have on a home router.