Senior Member
Join Date: Nov 2015
Location: AlliedMods.net
|
01-02-2021
, 05:39
Re: [Linux] Source Query Proxy: DDoS Protection - Kernel redirection!
|
#70
|
I don't know what's wrong.
This is the output when running sqproxy from /etc/sqproxy/conf.d:
Code:
2021-01-02 12:57:54,147 [INFO] [sqproxy.config] Found config: /etc/sqproxy/conf.d/00-globals.yaml
2021-01-02 12:57:54,156 [INFO] [sqproxy.config] Found config: /etc/sqproxy/conf.d/01-tf2.yaml
2021-01-02 12:57:54,371 [INFO] [sqproxy] eBPF redirection enabled
2021-01-02 12:57:54,371 [INFO] [sqproxy] Wait all proxies to be ready ...
2021-01-02 12:57:54,373 [INFO] [TF2Server] Binding ...
2021-01-02 12:57:54,381 [INFO] [TF2Server] Binding ... done!
2021-01-02 12:57:54,381 [INFO] [TF2Server] Listen for client requests ...
2021-01-02 12:57:54,408 [INFO] [sqproxy] Wait all proxies to be ready ... Done!
2021-01-02 12:57:54,408 [WARNING] [source_query_proxy.epbf] Wide interface is not supported yet. '0.0.0.0' will be interpreted like 'default interface'
2021-01-02 12:57:54,408 [INFO] [source_query_proxy.epbf] Run ['python3.7', 'redirect.py', '-p', '27015:27915']
Traceback (most recent call last):
File "redirect.py", line 11, in <module>
from bcc import BPF
ModuleNotFoundError: No module named 'bcc'
2021-01-02 12:57:54,527 [ERROR] [source_query_proxy.epbf] eBPF redirection exit with code 1
NoneType: None
Traceback (most recent call last):
File "/usr/local/bin/sqproxy", line 11, in <module>
sys.exit(sqproxy())
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/cli.py", line 14, in run
run()
File "/usr/local/lib/python3.7/dist-packages/pid/decorator.py", line 14, in decorator
return func(*func_args, **func_kwargs)
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/__main__.py", line 19, in run
asyncio.run(_run_servers())
File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "uvloop/loop.pyx", line 1456, in uvloop.loop.Loop.run_until_complete
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/__main__.py", line 48, in _run_servers
await asyncio.gather(*futures)
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/epbf.py", line 86, in run_ebpf_redirection
raise RuntimeError
RuntimeError
From /etc/sqproxy/:
Code:
2021-01-02 13:29:07,323 [INFO] [sqproxy.config] Found config: /etc/sqproxy/conf.d/00-globals.yaml
2021-01-02 13:29:07,330 [INFO] [sqproxy.config] Found config: /etc/sqproxy/conf.d/01-tf2.yaml
2021-01-02 13:29:07,332 [INFO] [sqproxy.config] Found config: conf.d/00-globals.yaml
Traceback (most recent call last):
File "/usr/local/bin/sqproxy", line 11, in <module>
sys.exit(sqproxy())
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/cli.py", line 12, in run
from .__main__ import run
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/__main__.py", line 8, in <module>
from . import config
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/config.py", line 257, in <module>
setup(settings)
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/config.py", line 239, in setup
merged_config_data = settings.get_merged_config_data()
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/config.py", line 132, in get_merged_config_data
return load_configs(iter_config_files(self.confdir_0, self.confdir_1))
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/config.py", line 195, in load_configs
raise ConfigurationError('eBPF already configured')
source_query_proxy.config.ConfigurationError: eBPF already configured
From /etc/ (and any other):
Code:
2021-01-02 13:30:19,115 [INFO] [sqproxy.config] Found config: /etc/sqproxy/conf.d/00-globals.yaml
2021-01-02 13:30:19,124 [INFO] [sqproxy.config] Found config: /etc/sqproxy/conf.d/01-tf2.yaml
2021-01-02 13:30:19,128 [INFO] [sqproxy.config] Confdir not found: /etc/conf.d
2021-01-02 13:30:19,337 [INFO] [sqproxy] eBPF redirection enabled
2021-01-02 13:30:19,337 [INFO] [sqproxy] Wait all proxies to be ready ...
2021-01-02 13:30:19,338 [INFO] [TF2Server] Binding ...
2021-01-02 13:30:19,349 [INFO] [TF2Server] Binding ... done!
2021-01-02 13:30:19,350 [INFO] [TF2Server] Listen for client requests ...
2021-01-02 13:30:19,371 [INFO] [sqproxy] Wait all proxies to be ready ... Done!
2021-01-02 13:30:19,372 [WARNING] [source_query_proxy.epbf] Wide interface is not supported yet. '0.0.0.0' will be interpreted like 'default interface'
2021-01-02 13:30:19,372 [INFO] [source_query_proxy.epbf] Run ['python3.7', 'redirect.py', '-p', '27015:27915']
Traceback (most recent call last):
File "/usr/local/bin/sqproxy", line 11, in <module>
sys.exit(sqproxy())
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 829, in __call__
return self.main(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 782, in main
rv = self.invoke(ctx)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1259, in invoke
return _process_result(sub_ctx.command.invoke(sub_ctx))
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 1066, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/usr/local/lib/python3.7/dist-packages/click/core.py", line 610, in invoke
return callback(*args, **kwargs)
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/cli.py", line 14, in run
run()
File "/usr/local/lib/python3.7/dist-packages/pid/decorator.py", line 14, in decorator
return func(*func_args, **func_kwargs)
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/__main__.py", line 19, in run
asyncio.run(_run_servers())
File "/usr/lib/python3.7/asyncio/runners.py", line 43, in run
return loop.run_until_complete(main)
File "uvloop/loop.pyx", line 1456, in uvloop.loop.Loop.run_until_complete
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/__main__.py", line 48, in _run_servers
await asyncio.gather(*futures)
File "/usr/local/lib/python3.7/dist-packages/source_query_proxy/epbf.py", line 73, in run_ebpf_redirection
process = await asyncio.create_subprocess_exec(*executable, *args, stdout=asyncio.subprocess.PIPE, cwd=cwd)
File "/usr/lib/python3.7/asyncio/subprocess.py", line 217, in create_subprocess_exec
stderr=stderr, **kwds)
File "uvloop/loop.pyx", line 2749, in subprocess_exec
File "uvloop/loop.pyx", line 2707, in __subprocess_run
File "uvloop/handles/process.pyx", line 596, in uvloop.loop.UVProcessTransport.new
File "uvloop/handles/process.pyx", line 98, in uvloop.loop.UVProcess._init
FileNotFoundError: [Errno 2] No such file or directory
Code:
Ubuntu 18.04.5 LTS (GNU/Linux 4.15.0-65-generic x86_64)
I have bpfcc-tools
Code:
bpfcc-tools is already the newest version (0.5.0-5ubuntu1).
Configs:
00-globals.yaml:
Code:
# Defaults for each server in `servers` section
# Any of these `values` can be overridden locally:
# in local `defaults` section
# in `servers` section
defaults:
# True - defaults will be applied for each NEXT config file in conf.d directory
# False - applied only for current file
# conf.d/ files read sequentially by alphabetical order
# we recommend start config names with sequential value: 00-globals.yaml, 01-game1.yaml, 02-game2.yaml
global: True
values:
network:
# False (default) - queries from `server_port` will be redirected to `bind_port`
# only for auto-ebpf handling, for more info see `ebpf` section below
# True - disable redirection (useful for just proxying and debug purposes)
ebpf_no_redirect: false
# How often update A2S_INFO data
a2s_info_cache_lifetime: 5
# How often update A2S_RULES data
a2s_rules_cache_lifetime: 5
# How often update A2S_PLAYERS data
a2s_players_cache_lifetime: 3
# How often change src port for queries to Real Game Server
# Some games required that due integrated ddos protection
# Without it sqporxy ip:port will be "banned" for queries
src_query_port_lifetime: 10
# False (default) - no action, A2S_RULES will work
# True - don't update A2S_RULES cache
# This will be helpful for HLDS servers which protocol is different
# But be careful, you also need disable redirection for A2S_RULES packets
# see the IS_QUERY_REQUEST_PACKET in https://github.com/spumer/source-query-proxy-kernel-module/blob/master/src-ebpf/utils.h
# CS:GO also has broken A2S_RULES, but fix available at https://forums.alliedmods.net/showthread.php?t=236521
no_a2s_rules: false
servers:
# Automatically run eBPF redirection
ebpf:
# Download any release of SQProxy Kernel Module
# And add path to `redirect.py`
# https://github.com/spumer/source-query-proxy-kernel-module/releases
enabled: True
executable: 'python3.7'
script_path: './src-ebpf/redirect.py'
01-tf2.yaml:
Code:
# Local defaults
# Empty. Only demonstrate file structure
defaults:
servers:
TF2Server:
network:
# Real game server IP address
server_ip: 'XXX.XXX.XXX.XXX'
# IP address for listening incoming queries
bind_ip: '0.0.0.0'
# Real game server PORT (respect to server_ip)
server_port: 27015
# PORT for listening incoming queries (respect to bind_ip)
bind_port: 27915
__________________
|
|