Highly-opinionated (ex-bullshit-free) MTPROTO proxy for Telegram. If you use v1.0 or upgrade broke you proxy, please read the chapter Version 2
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

example.config.toml 9.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. # This is an example of the configuration file for mtg. You actually can
  2. # run mtg with it. It starts a proxy on all interfaces with a secret
  3. # ee367a189aee18fa31c190054efd4a8e9573746f726167652e676f6f676c65617069732e636f6d
  4. #
  5. # It has all possible options with default values. So, a real world
  6. # configuration file should contain only those options you are going to
  7. # use. You do not need to enumerate all of them. In other words, each
  8. # option here has a default value. If you comment a key-value pair, it
  9. # should not make any effect.
  10. #
  11. # stats is the only exception.
  12. # Debug starts application in debug mode. It starts to be quite verbose
  13. # in output. Actually, the idea is that you run it in debug mode only if
  14. # you have any issue.
  15. debug = true
  16. # A secret. Please remember that mtg supports only FakeTLS mode, legacy
  17. # simple and secured mode are prohibited. For you it means that secret
  18. # should either be base64-encoded or starts with ee.
  19. secret = "ee367a189aee18fa31c190054efd4a8e9573746f726167652e676f6f676c65617069732e636f6d"
  20. # Host:port pair to run proxy on.
  21. bind-to = "0.0.0.0:3128"
  22. # This defines what types of traffic mtg listens to. If you are not sure,
  23. # then definitely keep it disable. Enable it only and only if incoming traffic
  24. # is coming from some sort of load-balancer like HAProxy or ELB.
  25. # https://www.haproxy.org/download/2.3/doc/proxy-protocol.txt
  26. #
  27. # mtg uses a library that supports v1 and v2 versions of ProxyProtocol.
  28. # default value is false.
  29. # proxy-protocol-listener = false
  30. # Defines how many concurrent connections are allowed to this proxy.
  31. # All other incoming connections are going to be dropped.
  32. concurrency = 8192
  33. # A size of user-space buffer for TCP to use. Since we do 2 connections,
  34. # then we have tcp-buffer * (4 + 2) per each connection: read/write for
  35. # each connection + 2 copy buffers to pump the data between sockets.
  36. #
  37. # Deprecated: this setting is no longer makes any effect.
  38. # tcp-buffer = "4kb"
  39. # Sometimes you want to enforce mtg to use some types of
  40. # IP connectivity to Telegram. We have 4 modes:
  41. # - prefer-ipv6:
  42. # We can use both ipv4 and ipv6 but ipv6 has a preference
  43. # - prefer-ipv4:
  44. # We can use both ipv4 and ipv6 but ipv4 has a preference
  45. # - only-ipv6:
  46. # Only ipv6 connectivity is used
  47. # - only-ipv4:
  48. # Only ipv4 connectivity is used
  49. prefer-ip = "prefer-ipv6"
  50. # FakeTLS uses domain fronting protection. So it needs to know a port to
  51. # access.
  52. domain-fronting-port = 443
  53. # By default, mtg resolves the fronting hostname (from the secret) via DNS
  54. # to establish a TCP connection. If DNS resolution of that hostname is blocked,
  55. # you can specify an IP address to connect to directly. The hostname is still
  56. # used for SNI in the TLS handshake.
  57. #
  58. # default value is not set (DNS resolution is used).
  59. # domain-fronting-ip = "142.250.185.112"
  60. # FakeTLS can compare timestamps to prevent probes. Each message has
  61. # encrypted timestamp. So, mtg can compare this timestamp and decide if
  62. # we need to proceed with connection or not.
  63. #
  64. # Sometimes time can be skewed so we accept all messages within a
  65. # time range of this parameter.
  66. tolerate-time-skewness = "5s"
  67. # Telegram has a concept of DC. You can think about DC as a number of a cluster
  68. # with a certain purpose. Some clusters serve media, some - messages, some rule
  69. # channels and so on. But sometimes unknown DC number is requested by client.
  70. # It could be a bug or some global reconfiguration of the Telegram.
  71. #
  72. # By default, proxy rejects such requests. But it is also possible to fallback
  73. # this request to any DC. Telegram works in a way that any DC is able to serve
  74. # any request but sacrificing a latency.
  75. #
  76. # If this setting is disabled (default), mtg will reject a connection.
  77. # Otherwise, chose a new DC.
  78. allow-fallback-on-unknown-dc = false
  79. # Telegram uses different DCs for different purposes. Unfortunately, most of
  80. # DCs are not public, and dependent on a location of the current user, so
  81. # mtg cannot know upfront about all of them, and how to access them. It has
  82. # a default list of DCs, including some CDN IPs, but it is possible that some
  83. # of them are not working for you. In this case, you can override them here.
  84. [[dc-overrides]]
  85. dc = 101
  86. ips = ["127.0.0.1:443"]
  87. # network defines different network-related settings
  88. [network]
  89. # please be aware that mtg needs to do some external requests. For
  90. # example, if you do not pass public ips, it will request your public ip
  91. # address from some external service.
  92. #
  93. # As for 2.0, if you set a public-ip on your own, mtg won't issue any
  94. # network requests except of those required for Telegram.
  95. #
  96. # so, in order of doing them, it needs to do DNS lookup. mtg ignores DNS
  97. # resolver of the operating system and uses DOH instead. This is a host
  98. # it has to access.
  99. #
  100. # By default we use Cloudflare.
  101. doh-ip = "1.1.1.1"
  102. # mtg can work via proxies (for now, we support only socks5). Proxy
  103. # configuration is done via list. So, you can specify many proxies
  104. # there.
  105. #
  106. # Actually, if you supply an empty list, then no proxies are going to be
  107. # used. If you supply a single proxy, then mtg will use it exclusively.
  108. # If you supply >= 2, then mtg will load balance between them.
  109. #
  110. # If you add an empty string here, this is an equivalent of 'plain network',
  111. # with no proxy usage.
  112. #
  113. # Proxy configuration is done via ordinary URI schema:
  114. #
  115. # socks5://user:password@host:port?open_threshold=5&half_open_timeout=1m&reset_failures_timeout=10s
  116. #
  117. # Only socks5 proxy is used. user/password is optional. As you can
  118. # see, you can specify some parameters in GET query. These parameters
  119. # configure circuit breaker.
  120. #
  121. # open_threshold means a number of errors which should happen so we stop
  122. # use a proxy.
  123. #
  124. # half_open_timeout means a time period (in Golang duration notation)
  125. # after which we can retry with this proxy
  126. #
  127. # reset_failures_timeout means a time period when we flush out errors
  128. # when circuit breaker in closed state.
  129. #
  130. # Please see https://docs.microsoft.com/en-us/azure/architecture/patterns/circuit-breaker
  131. # on details about circuit breakers.
  132. proxies = [
  133. # "socks5://user:password@host:port?open_threshold=5&half_open_timeout=1m&reset_failures_timeout=10s"
  134. ]
  135. # network timeouts define different settings for timeouts. tcp timeout
  136. # define a global timeout on establishing of network connections. idle
  137. # means a timeout on pumping data between sockset when nothing is
  138. # happening.
  139. #
  140. # please be noticed that handshakes have no timeouts intentionally. You can
  141. # find a reasoning here:
  142. # https://www.ndss-symposium.org/wp-content/uploads/2020/02/23087-paper.pdf
  143. [network.timeout]
  144. tcp = "5s"
  145. http = "10s"
  146. idle = "1m"
  147. # Some countries do active probing on Telegram connections. This technique
  148. # allows to protect from such effort.
  149. #
  150. # mtg has a cache of some connection fingerprints. Actually, first bytes
  151. # of each connection. So, it stores them in some in-memory LRU+TTL cache.
  152. # You can configure this cache here.
  153. [defense.anti-replay]
  154. # You can enable/disable this feature.
  155. enabled = true
  156. # max size of such a cache. Please be aware that this number is
  157. # approximate we try hard to store data quite dense but it is possible
  158. # that we can go over this limit for 10-20% under some conditions and
  159. # architectures.
  160. max-size = "1mib"
  161. # we use stable bloom filters for anti-replay cache. This helps
  162. # to maintain a desired error ratio.
  163. error-rate = 0.001
  164. # You can protect proxies by using different blocklists. If client has
  165. # ip from the given range, we do not try to do a proper handshake. We
  166. # actually route it to fronting domain. So, this client will never ever
  167. # have a chance to use mtg to access Telegram.
  168. #
  169. # Please remember that blocklists are initialized in async way. So,
  170. # when you start a proxy, blocklists are empty, they are populated and
  171. # processed in backgrounds. An error in any URL is ignored.
  172. [defense.blocklist]
  173. # You can enable/disable this feature.
  174. enabled = true
  175. # This is a limiter for concurrency. In order to protect website
  176. # from overloading, we download files in this number of threads.
  177. download-concurrency = 2
  178. # A list of URLs in FireHOL format (https://iplists.firehol.org/)
  179. # You can provider links here (starts with https:// or http://) or
  180. # path to a local file, but in this case it should be absolute.
  181. urls = [
  182. "https://iplists.firehol.org/files/firehol_level1.netset",
  183. # "/local.file"
  184. ]
  185. # How often do we need to update a blocklist set.
  186. update-each = "24h"
  187. # Allowlist is an opposite to a blocklist. Only those IPs that are coming from
  188. # subnets defined in these lists are allowed. All others will be rejected.
  189. #
  190. # If this feature is disabled, then there won't be any check performed by this
  191. # validator. It is possible to combine both blocklist and whitelist.
  192. [defense.allowlist]
  193. # You can enable/disable this feature.
  194. enabled = false
  195. # This is a limiter for concurrency. In order to protect website
  196. # from overloading, we download files in this number of threads.
  197. download-concurrency = 2
  198. # A list of URLs in FireHOL format (https://iplists.firehol.org/)
  199. # You can provider links here (starts with https:// or http://) or
  200. # path to a local file, but in this case it should be absolute.
  201. urls = [
  202. # "https://iplists.firehol.org/files/firehol_level1.netset",
  203. # "/local.file"
  204. ]
  205. update-each = "24h"
  206. # statsd statistics integration.
  207. [stats.statsd]
  208. # enabled/disabled
  209. enabled = false
  210. # host:port for UDP endpoint of statsd
  211. address = "127.0.0.1:8888"
  212. # prefix of metric for statsd
  213. metric-prefix = "mtg"
  214. # tag format to use
  215. # supported values are 'datadog', 'influxdb' and 'graphite'
  216. # default format is graphite.
  217. tag-format = "datadog"
  218. # prometheus metrics integration.
  219. [stats.prometheus]
  220. # enabled/disabled
  221. enabled = true
  222. # host:port where to start http server for endpoint
  223. bind-to = "127.0.0.1:3129"
  224. # prefix of http path
  225. http-path = "/"
  226. # prefix for metrics for prometheus
  227. metric-prefix = "mtg"