【OpenGFW】OpenGFWをAlmaLinuxにインストールする方法

AlmaLinux

こんにちはmOqOmです。
今回は巷で話題のOpenGFWをAlmaLinuxにインストールする方法を紹介していきます。
Go言語が使用できる環境であれば、Go言語のセットアップ手順をスキップしてください。

Go言語のセットアップ

# Go言語のダウンロード
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
# optフォルダに解凍
sudo tar -C /opt/ -xzf go1.22.0.linux-amd64.tar.gz

# Go言語のパスの追加
echo 'export GOROOT=/opt/go' >> ~/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin' >> ~/.bashrc

source ~/.bashrc

# Go言語のバージョンを確認
go version

OpenGFWのセットアップ

# OpenGFWのクローン
git clone https://github.com/apernet/OpenGFW.git
# フォルダの移動
cd OpenGFW
# OpenGFWのビルド
go build -o /opt/OpenGFW/OpenGFW

# config.yamlとrules.yamlを作成
nano /opt/OpenGFW/config.yaml
nano /opt/OpenGFW/rules.yaml

config.yamlのサンプル

io:
  queueSize: 1024
  local: true # FORWARD チェーンで OpenGFW を実行したい場合は false に設定する

workers:
  count: 4
  queueSize: 16
  tcpMaxBufferedPagesTotal: 4096
  tcpMaxBufferedPagesPerConn: 64
  udpMaxStreams: 4096

rules.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"})

- name: block google socks
  action: block
  expr: string(socks?.req?.addr) endsWith "google.com" && socks?.req?.port == 80

- name: block wireguard by handshake response
  action: drop
  expr: wireguard?.handshake_response?.receiver_index_matched == true

- name: block bilibili geosite
  action: block
  expr: geosite(string(tls?.req?.sni), "bilibili")

- name: block CN geoip
  action: block
  expr: geoip(string(ip.dst), "cn")

OpenGFWの起動

# Logレベルの設定
export OPENGFW_LOG_LEVEL=debug
# OpenGFWの起動
/opt/OpenGFW/OpenGFW -c /opt/OpenGFW/config.yaml /opt/OpenGFW/rules.yaml

特定サイトのブロック方法

例えばYouTubeをブロックした場合は以下のように記載すればブロックされます。
YouTubeをブロックしたい場合にはrules.yamlに以下を記載します。
内容を軽く説明すると、httpとhttpsをブロックし、youtube.comのDNS名前解決を0.0.0.0に書き換えています。
※認識が間違っている可能性があります。

- name: block YouTube http
  action: block
  expr: string(http?.req?.headers?.host) endsWith "youtube.com"

- name: block YouTube https
  action: block
  expr: string(tls?.req?.sni) endsWith "youtube.com"

- name: youtube dns poisoning
  action: modify
  modifier:
    name: dns
    args:
      a: "0.0.0.0"
      aaaa: "::"
  expr: dns != nil && dns.qr && any(dns.questions, {.name endsWith "youtube.com"})

OpenGFWの起動とサービス化

SELinuxの無効化

私の知識不足で、SELinuxの有効化しておくとOpenGFWサービスが起動できないので、SELinuxの無効化を行います。

nano /etc/selinux/config

変更前

# To revert back to SELinux enabled:
#
#    grubby --update-kernel ALL --remove-args selinux
#
SELINUX=enforcing

変更後

# To revert back to SELinux enabled:
#
#    grubby --update-kernel ALL --remove-args selinux
#
SELINUX=disabled

再起動後にOpenGFWのサービス化を実施します。

OpenGFWのサービス化

sudo nano /etc/systemd/system/opengfw.service

以下が今回サービス化としてのファイルの内容になります。

[Unit]
Description=OpenGFW Service
After=network.target

[Service]
Type=simple
ExecStart=/opt/OpenGFW/OpenGFW -c /opt/OpenGFW/config.yaml /opt/OpenGFW/rules.yaml
Environment="OPENGFW_LOG_LEVEL=debug"
WorkingDirectory=/opt/OpenGFW
Restart=always
RestartSec=3
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=opengfw

[Install]
WantedBy=multi-user.target

OpenGFWサービスの起動

サービスファイルの作成が完了したらデーモンの再読みを行いOpenGFWのサービスを起動させます。

# デーモンの再読込み
sudo systemctl daemon-reload
 
# OpenGFWの起動
sudo systemctl start opengfw
# OpenGFWの自動起動
sudo systemctl enable opengfw

コメント

タイトルとURLをコピーしました