You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

665 lines
25 KiB

  1. # shadowsocks-libev
  2. [![Build Status](https://travis-ci.com/shadowsocks/shadowsocks-libev.svg?branch=master)](https://travis-ci.com/shadowsocks/shadowsocks-libev) [![Snap Status](https://build.snapcraft.io/badge/shadowsocks/shadowsocks-libev.svg)](https://build.snapcraft.io/user/shadowsocks/shadowsocks-libev)
  3. ## Introdução
  4. [Shadowsocks-libev](https://shadowsocks.org) é um SOCKS5 leve e seguro
  5. proxy para dispositivos embutidos e caixas de baixo custo.
  6. É uma porta de [Shadowsocks](https://github.com/shadowsocks/shadowsocks)
  7. criado por [@clowwindy](https://github.com/clowwindy) e mantido por
  8. [@madeye](https://github.com/madeye) e [@linusyang](https://github.com/linusyang).
  9. Versão atual: 3.3.5 | [Changelog](debian/changelog)
  10. ## Características
  11. Shadowsocks-libev é escrito em C puro e depende de [libev](http://software.schmorp.de/pkg/libev.html). Ele foi projetado para ser uma implementação leve do protocolo shadowsocks, a fim de manter o uso de recursos o mais baixo possível.
  12. Para obter uma lista completa de comparação de recursos entre diferentes versões de shadowsocks, consulte a [página da Wiki (https://github.com/shadowsocks/shadowsocks/wiki/Feature-Comparison-across-Different-Versions).
  13. ## Começo rápido
  14. Snap é a maneira recomendada de instalar os binários mais recentes.
  15. ### Instale o snap core
  16. https://snapcraft.io/core
  17. ### Instalar a partir do snapcraft.io
  18. Stable channel:
  19. ```bash
  20. sudo snap install shadowsocks-libev
  21. ```
  22. Edge channel:
  23. ```bash
  24. sudo snap install shadowsocks-libev --edge
  25. ```
  26. ## Instalação
  27. ### Guia específico de distribuição
  28. - [Debian & Ubuntu](#debian--ubuntu)
  29. + [Instalar do repositório](#instale-a-partir-do-repositório-não-recomendado)
  30. + [Construa o pacote deb a partir da fonte](#compile-o-pacote-deb-a-partir-da-fonte)
  31. + [Configurar e iniciar o serviço](#configurar-e-iniciar-o-serviço)
  32. - [Fedora & RHEL](#fedora--rhel)
  33. + [Construir a partir da fonte com centos](#construa-a-partir-da-fonte-com-centos)
  34. - [Archlinux & Manjaro](#archlinux--manjaro)
  35. - [NixOS](#nixos)
  36. - [Nix](#nix)
  37. - [Compile e instale diretamente no sistema semelhante ao UNIX](#linux)
  38. - [FreeBSD](#freebsd)
  39. + [Instalar](#instalar)
  40. + [Configuração](#configuração)
  41. + [Executar](#executar)
  42. + [Executar como cliente](#executar-como-cliente)
  43. - [OpenWRT](#openwrt)
  44. - [OS X](#os-x)
  45. - [Windows (MinGW)](#windows-mingw)
  46. - [Docker](#docker)
  47. * * *
  48. ### Inicialize o ambiente de compilação
  49. Este repositório usa submódulos, então você deve puxá-los antes de começar, usando:
  50. ```bash
  51. git submodule update --init --recursive
  52. ```
  53. ### Guia de configuração de pré-compilação
  54. Para obter uma lista completa das opções de tempo de configuração disponíveis,
  55. tentar `configure --help`.
  56. ### Debian & Ubuntu
  57. #### Instale a partir do repositório (não recomendado)
  58. Shadowsocks-libev está disponível no repositório oficial para as seguintes distribuições:
  59. * Debian 8 ou superior, incluindo oldoldstable (jessie), old stable (stretch), stable (buster), testing (bullseye) e unstable (sid)
  60. * Ubuntu 16.10 ou superior
  61. ```bash
  62. sudo apt update
  63. sudo apt install shadowsocks-libev
  64. ```
  65. #### Compile o pacote deb a partir da fonte.
  66. Distribuições suportadas:
  67. * Debian 8, 9 ou superior
  68. * Ubuntu 14.04 LTS, 16.04 LTS, 16.10 ou superior
  69. Você pode construir shadowsocks-libev e todas as suas dependências por script:
  70. ```bash
  71. mkdir -p ~/build-area/
  72. cp ./scripts/build_deb.sh ~/build-area/
  73. cd ~/build-area
  74. ./build_deb.sh
  75. ```
  76. Para sistemas mais antigos, a construção de pacotes `.deb` não é suportada.
  77. Por favor, tente construir e instalar diretamente da fonte. Veja a seção [Linux](#linux) abaixo.
  78. **Nota para usuários do Debian 8 (Jessie) para construir seus próprios pacotes deb**:
  79. Nós encorajamos você a instalar shadowsocks-libev de `jessie-backports-sloppy`. Se você insistir em compilar a partir da fonte, você precisará instalar manualmente o libsodium de `jessie-backports-sloppy`, **NÃO** libsodium no repositório principal.
  80. Para mais informações sobre backports, você pode consultar [Debian Backports](https://backports.debian.org).
  81. ``` bash
  82. cd shadowsocks-libev
  83. sudo sh -c 'printf "deb http://deb.debian.org/debian jessie-backports main" > /etc/apt/sources.list.d/jessie-backports.list'
  84. sudo sh -c 'printf "deb http://deb.debian.org/debian jessie-backports-sloppy main" >> /etc/apt/sources.list.d/jessie-backports.list'
  85. sudo apt-get install --no-install-recommends devscripts equivs
  86. mk-build-deps --root-cmd sudo --install --tool "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y"
  87. ./autogen.sh && dpkg-buildpackage -b -us -uc
  88. cd ..
  89. sudo dpkg -i shadowsocks-libev*.deb
  90. ```
  91. **Nota para usuários do Debian 9 (Stretch) para construir seus próprios pacotes deb**:
  92. Nós encorajamos você a instalar shadowsocks-libev de `stretch-backports`. Se você insistir em compilar a partir do código-fonte, precisará instalar manualmente o libsodium de `stretch-backports`, **NÃO** libsodium no repositório principal.
  93. Para mais informações sobre backports, você pode consultar [Debian Backports](https://backports.debian.org).
  94. ``` bash
  95. cd shadowsocks-libev
  96. sudo sh -c 'printf "deb http://deb.debian.org/debian stretch-backports main" > /etc/apt/sources.list.d/stretch-backports.list'
  97. sudo apt-get install --no-install-recommends devscripts equivs
  98. mk-build-deps --root-cmd sudo --install --tool "apt-get -o Debug::pkgProblemResolver=yes --no-install-recommends -y"
  99. ./autogen.sh && dpkg-buildpackage -b -us -uc
  100. cd ..
  101. sudo dpkg -i shadowsocks-libev*.deb
  102. ```
  103. #### Configurar e iniciar o serviço
  104. ```
  105. # Edite o arquivo de configuração
  106. sudo vim /etc/shadowsocks-libev/config.json
  107. # Edite a configuração padrão do debian
  108. sudo vim /etc/default/shadowsocks-libev
  109. # Inicia o serviço
  110. sudo /etc/init.d/shadowsocks-libev start # para sysvinit, ou
  111. sudo systemctl start shadowsocks-libev # para systemd
  112. ```
  113. ### Fedora & RHEL
  114. Distribuições suportadas:
  115. * Versões recentes do Fedora (até EOL)
  116. * RHEL 6, 7 e derivados (incluindo CentOS, Scientific Linux)
  117. #### Construa a partir da fonte com centos
  118. Se você estiver usando o CentOS 7, precisará instalar estes pré-requisitos para compilar a partir do código-fonte:
  119. ```bash
  120. yum install epel-release -y
  121. yum install gcc gettext autoconf libtool automake make pcre-devel asciidoc xmlto c-ares-devel libev-devel libsodium-devel mbedtls-devel -y
  122. ```
  123. ### Archlinux & Manjaro
  124. ```bash
  125. sudo pacman -S shadowsocks-libev
  126. ```
  127. Consulte o script downstream [PKGBUILD](https://github.com/archlinux/svntogit-community/blob/packages/shadowsocks-libev/trunk/PKGBUILD) para modificações extras e bugs específicos da distribuição.
  128. ### NixOS
  129. ```bash
  130. nix-env -iA nixos.shadowsocks-libev
  131. ```
  132. ### Nix
  133. ```bash
  134. nix-env -iA nixpkgs.shadowsocks-libev
  135. ```
  136. ### Linux
  137. Em geral, você precisa das seguintes dependências de compilação:
  138. * autotools (autoconf, automake, libtool)
  139. * gettext
  140. * pkg-config
  141. * libmbedtls
  142. * libsodium
  143. * libpcre3 (antiga biblioteca pcre)
  144. * libev
  145. * libc-ares
  146. * asciidoc (somente para documentação)
  147. * xmlto (apenas para documentação)
  148. Notas: Fedora 26 libsodium versão >= 1.0.12, então você pode instalar via dnf install libsodium em vez de compilar a partir da fonte.
  149. Se seu sistema for muito antigo para fornecer libmbedtls e libsodium (posterior a **v1.0.8**), você precisará instalar essas bibliotecas manualmente ou atualizar seu sistema.
  150. Se o seu sistema fornece essas bibliotecas, você **não deve** instalá-las a partir do código-fonte. Você deve ir para esta seção e instalá-las a partir do repositório de distribuição.
  151. Para algumas das distribuições, você pode instalar dependências de compilação como esta:
  152. ```bash
  153. # Instalação de dependências básicas de compilação
  154. ## Debian / Ubuntu
  155. sudo apt-get install --no-install-recommends gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libev-dev libc-ares-dev automake libmbedtls-dev libsodium-dev pkg-config
  156. ## CentOS / Fedora / RHEL
  157. sudo yum install gettext gcc autoconf libtool automake make asciidoc xmlto c-ares-devel libev-devel
  158. ## Arch
  159. sudo pacman -S gettext gcc autoconf libtool automake make asciidoc xmlto c-ares libev
  160. # Instalação do libsodium
  161. export LIBSODIUM_VER=1.0.16
  162. wget https://download.libsodium.org/libsodium/releases/old/libsodium-$LIBSODIUM_VER.tar.gz
  163. tar xvf libsodium-$LIBSODIUM_VER.tar.gz
  164. pushd libsodium-$LIBSODIUM_VER
  165. ./configure --prefix=/usr && make
  166. sudo make install
  167. popd
  168. sudo ldconfig
  169. # Instalação do MbedTLS
  170. export MBEDTLS_VER=2.6.0
  171. wget https://github.com/Mbed-TLS/mbedtls/archive/refs/tags/mbedtls-$MBEDTLS_VER.tar.gz
  172. tar xvf mbedtls-$MBEDTLS_VER.tar.gz
  173. pushd mbedtls-$MBEDTLS_VER
  174. make SHARED=1 CFLAGS="-O2 -fPIC"
  175. sudo make DESTDIR=/usr install
  176. popd
  177. sudo ldconfig
  178. # Comece a construir
  179. ./autogen.sh && ./configure && make
  180. sudo make install
  181. ```
  182. Pode ser necessário instalar manualmente os softwares ausentes.
  183. ### FreeBSD
  184. #### Instalar
  185. Shadowsocks-libev está disponível na Coleção de Ports do FreeBSD. Você pode instalá-lo de qualquer maneira, `pkg` ou `ports`.
  186. **pkg (recomendado)**
  187. ```bash
  188. pkg install shadowsocks-libev
  189. ```
  190. **portas**
  191. ```bash
  192. cd /usr/ports/net/shadowsocks-libev
  193. make install
  194. ```
  195. #### Configuração
  196. Edite seu arquivo `config.json`. Por padrão, está localizado em `/usr/local/etc/shadowsocks-libev`.
  197. Para habilitar shadowsocks-libev, adicione a seguinte variável rc ao seu arquivo `/etc/rc.conf`:
  198. ```
  199. shadowsocks_libev_enable="YES"
  200. ```
  201. #### Executar
  202. Inicie o servidor Shadowsocks:
  203. ```bash
  204. service shadowsocks_libev start
  205. ```
  206. #### Executar como cliente
  207. Por padrão, shadowsocks-libev está rodando como um servidor no FreeBSD. Se você quiser iniciar o shadowsocks-libev no modo cliente, você pode modificar o script rc (`/usr/local/etc/rc.d/shadowsocks_libev`) manualmente.
  208. ```
  209. # modifique a seguinte linha de "ss-server" para "ss-local"
  210. command="/usr/local/bin/ss-local"
  211. ```
  212. Observe que é simplesmente uma solução alternativa, cada vez que você atualizar a porta, suas alterações serão substituídas pela nova versão.
  213. ### OpenWRT
  214. O projeto OpenWRT é mantido aqui:
  215. [openwrt-shadowsocks](https://github.com/shadowsocks/openwrt-shadowsocks).
  216. ### OS X
  217. Para OS X, use [Homebrew](http://brew.sh) para instalar ou compilar.
  218. Instale o Homebrew:
  219. ```bash
  220. ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  221. ```
  222. Instale shadowsocks-libev:
  223. ```bash
  224. brew install shadowsocks-libev
  225. ```
  226. ### Windows (MinGW)
  227. Para compilar binários nativos do Windows, o método recomendado é usar o Docker:
  228. * No Windows: clique duas vezes em `make.bat` em `docker\mingw`
  229. * No sistema do tipo Unix:
  230. cd shadowsocks-libev/docker/mingw
  231. make
  232. Um tarball com binários de 32 bits e 64 bits será gerado no mesmo diretório.
  233. Você também pode usar compiladores MinGW-w64 manualmente para compilar em shell do tipo Unix (MSYS2/Cygwin) ou compilar em sistemas semelhantes ao Unix (Linux/MacOS). Por favor, consulte os scripts de compilação em `docker/mingw`.
  234. Atualmente você precisa usar uma biblioteca libev corrigida para MinGW:
  235. * https://github.com/shadowsocks/libev/archive/mingw.zip
  236. Observe que o TCP Fast Open (TFO) está disponível apenas no **Windows 10**, **1607** ou versão posterior (precisamente, build >= 14393). Se você estiver usando **1709** (compilação 16299) ou versão posterior, também precisará executar o seguinte comando no PowerShell/Prompt de comando **como administrador** e **reinicializar** para usar o TFO corretamente:
  237. netsh int tcp set global fastopenfallback=disabled
  238. ### Docker
  239. Como você espera, basta puxar a imagem e executar.
  240. ```
  241. docker pull shadowsocks/shadowsocks-libev
  242. docker run -e PASSWORD=<password> -p<server-port>:8388 -p<server-port>:8388/udp -d shadowsocks/shadowsocks-libev
  243. ```
  244. Mais informações sobre a imagem podem ser encontradas [aqui](docker/alpine/README.md).
  245. ## Utilização
  246. Para obter uma lista detalhada e completa de todos os argumentos suportados,
  247. você pode consultar as páginas de manual dos aplicativos, respectivamente.
  248. ss-[local|redir|server|tunnel|manager]
  249. -s <server_host> Nome do host ou endereço IP de seu servidor remoto.
  250. -p <server_port> Número da porta do seu servidor remoto.
  251. -l <local_port> Número da porta do seu servidor local.
  252. -k <password> Senha do seu servidor remoto.
  253. -m <encrypt_method> Método de criptografia: rc4-md5,
  254. aes-128-gcm, aes-192-gcm, aes-256-gcm,
  255. aes-128-cfb, aes-192-cfb, aes-256-cfb,
  256. aes-128-ctr, aes-192-ctr, aes-256-ctr,
  257. camellia-128-cfb, camellia-192-cfb,
  258. camellia-256-cfb, bf-cfb,
  259. chacha20-ietf-poly1305,
  260. xchacha20-ietf-poly1305,
  261. salsa20, chacha20 e chacha20-ietf.
  262. A cifra padrão é chacha20-ietf-poly1305.
  263. [-a <user>] Executar como outro usuário.
  264. [-f <pid_file>] O caminho do arquivo para armazenar pid.
  265. [-t <timeout>] Tempo limite do soquete em segundos.
  266. [-c <config_file>] O caminho para o arquivo de configuração.
  267. [-n <number>] Número máximo de arquivos abertos.
  268. [-i <interface>] Interface de rede a ser vinculada.
  269. (não disponível no modo redir)
  270. [-b <local_address>] Endereço local para ligar.
  271. Para servidores: Especifique o endereço local a ser usado
  272. enquanto este servidor está fazendo saída
  273. conexões a servidores remotos em nome do
  274. clientes.
  275. Para clientes: Especifique o endereço local a ser usado
  276. enquanto este cliente está fazendo saída
  277. conexões com o servidor.
  278. [-u] Habilita retransmissão UDP.
  279. (TPROXY é necessário no modo redir)
  280. [-U] Ativa a retransmissão UDP e desativa a retransmissão TCP.
  281. (não disponível no modo local)
  282. [-T] Use tproxy em vez de redirecionar. (para tcp)
  283. (disponível apenas no modo redir)
  284. [-L <addr>:<port>] Endereço e porta do servidor de destino
  285. para encaminhamento de porta local.
  286. (disponível apenas no modo túnel)
  287. [-6] Primeiro, resolva o nome do host para o endereço IPv6.
  288. [-d <addr>] Servidores de nome para resolvedor de DNS interno.
  289. (disponível apenas no modo servidor)
  290. [--reuse-port] Habilita a reutilização de porta.
  291. [--fast-open] Habilita a abertura rápida do TCP.
  292. com kernel do Linux > 3.7.0.
  293. (disponível apenas no modo local e servidor)
  294. [--acl <acl_file>] Caminho para ACL (lista de controle de acesso).
  295. (disponível apenas no modo local e servidor)
  296. [--manager-address <addr>] endereço de soquete do domínio UNIX.
  297. (disponível apenas no modo servidor e gerenciador)
  298. [--mtu <MTU>] MTU de sua interface de rede.
  299. [--mptcp] Habilita o Multipath TCP no Kernel MPTCP.
  300. [--no-delay] Habilita TCP_NODELAY.
  301. [--executable <path>] Caminho para o executável do ss-server.
  302. (disponível apenas no modo gerenciador)
  303. [-D <path>] Caminho para o diretório de trabalho do ss-manager.
  304. (disponível apenas no modo gerenciador)
  305. [--key <key_in_base64>] Chave do seu servidor remoto.
  306. ## proxy transparente
  307. O mais recente shadowsocks-libev forneceu um modo *redir*. Você pode configurar sua caixa ou roteador baseado em Linux para fazer proxy de todo o tráfego TCP de forma transparente, o que é útil se você usar um roteador com OpenWRT.
  308. # Criar nova cadeia
  309. iptables -t nat -N SHADOWSOCKS
  310. iptables -t mangle -N SHADOWSOCKS
  311. # Ignore os endereços do seu servidor shadowsocks
  312. # É muito IMPORTANTE, apenas tome cuidado.
  313. iptables -t nat -A SHADOWSOCKS -d 123.123.123.123 -j RETURN
  314. # Ignore LANs e quaisquer outros endereços que você gostaria de ignorar o proxy
  315. # Veja Wikipedia e RFC5735 para lista completa de redes reservadas.
  316. # Consulte ashi009/bestroutetb para obter uma lista de rotas CHN altamente otimizada.
  317. iptables -t nat -A SHADOWSOCKS -d 0.0.0.0/8 -j RETURN
  318. iptables -t nat -A SHADOWSOCKS -d 10.0.0.0/8 -j RETURN
  319. iptables -t nat -A SHADOWSOCKS -d 127.0.0.0/8 -j RETURN
  320. iptables -t nat -A SHADOWSOCKS -d 169.254.0.0/16 -j RETURN
  321. iptables -t nat -A SHADOWSOCKS -d 172.16.0.0/12 -j RETURN
  322. iptables -t nat -A SHADOWSOCKS -d 192.168.0.0/16 -j RETURN
  323. iptables -t nat -A SHADOWSOCKS -d 224.0.0.0/4 -j RETURN
  324. iptables -t nat -A SHADOWSOCKS -d 240.0.0.0/4 -j RETURN
  325. # Qualquer outra coisa deve ser redirecionada para a porta local do shadowsocks
  326. iptables -t nat -A SHADOWSOCKS -p tcp -j REDIRECT --to-ports 12345
  327. # Adicione quaisquer regras UDP
  328. ip route add local default dev lo table 100
  329. ip rule add fwmark 1 lookup 100
  330. iptables -t mangle -A SHADOWSOCKS -p udp --dport 53 -j TPROXY --on-port 12345 --tproxy-mark 0x01/0x01
  331. # Aplicar as regras
  332. iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
  333. iptables -t mangle -A PREROUTING -j SHADOWSOCKS
  334. # Iniciar o shadowsocks-redir
  335. ss-redir -u -c /etc/config/shadowsocks.json -f /var/run/shadowsocks.pid
  336. ## Proxy transparente (tproxy puro)
  337. A execução deste script no host linux pode fazer proxy de todo o tráfego de saída desta máquina (exceto o tráfego enviado para o endereço reservado). Outros hosts na mesma LAN também podem alterar seu gateway padrão para o ip deste host linux (ao mesmo tempo, alterar o servidor dns para 1.1.1.1 ou 8.8.8.8, etc.) para fazer proxy de seu tráfego de saída.
  338. > Claro, o proxy ipv6 é semelhante, basta alterar `iptables` para `ip6tables`, `ip` para `ip -6`, `127.0.0.1` para `::1`, e outros detalhes.
  339. ```shell
  340. #!/bin/bash
  341. start_ssredir() {
  342. # modifique MyIP, MyPort, etc.
  343. (ss-redir -s MyIP -p MyPort -m MyMethod -k MyPasswd -b 127.0.0.1 -l 60080 --no-delay -u -T -v </dev/null &>>/var/log/ss-redir.log &)
  344. }
  345. stop_ssredir() {
  346. kill -9 $(pidof ss-redir) &>/dev/null
  347. }
  348. start_iptables() {
  349. ##################### SSREDIR #####################
  350. iptables -t mangle -N SSREDIR
  351. # connection-mark -> packet-mark
  352. iptables -t mangle -A SSREDIR -j CONNMARK --restore-mark
  353. iptables -t mangle -A SSREDIR -m mark --mark 0x2333 -j RETURN
  354. # modifique MyIP, MyPort, etc.
  355. # ignorar o tráfego enviado para o servidor ss
  356. iptables -t mangle -A SSREDIR -p tcp -d MyIP --dport MyPort -j RETURN
  357. iptables -t mangle -A SSREDIR -p udp -d MyIP --dport MyPort -j RETURN
  358. # ignorar o tráfego enviado para endereços reservados
  359. iptables -t mangle -A SSREDIR -d 0.0.0.0/8 -j RETURN
  360. iptables -t mangle -A SSREDIR -d 10.0.0.0/8 -j RETURN
  361. iptables -t mangle -A SSREDIR -d 100.64.0.0/10 -j RETURN
  362. iptables -t mangle -A SSREDIR -d 127.0.0.0/8 -j RETURN
  363. iptables -t mangle -A SSREDIR -d 169.254.0.0/16 -j RETURN
  364. iptables -t mangle -A SSREDIR -d 172.16.0.0/12 -j RETURN
  365. iptables -t mangle -A SSREDIR -d 192.0.0.0/24 -j RETURN
  366. iptables -t mangle -A SSREDIR -d 192.0.2.0/24 -j RETURN
  367. iptables -t mangle -A SSREDIR -d 192.88.99.0/24 -j RETURN
  368. iptables -t mangle -A SSREDIR -d 192.168.0.0/16 -j RETURN
  369. iptables -t mangle -A SSREDIR -d 198.18.0.0/15 -j RETURN
  370. iptables -t mangle -A SSREDIR -d 198.51.100.0/24 -j RETURN
  371. iptables -t mangle -A SSREDIR -d 203.0.113.0/24 -j RETURN
  372. iptables -t mangle -A SSREDIR -d 224.0.0.0/4 -j RETURN
  373. iptables -t mangle -A SSREDIR -d 240.0.0.0/4 -j RETURN
  374. iptables -t mangle -A SSREDIR -d 255.255.255.255/32 -j RETURN
  375. # marca o primeiro pacote da conexão
  376. iptables -t mangle -A SSREDIR -p tcp --syn -j MARK --set-mark 0x2333
  377. iptables -t mangle -A SSREDIR -p udp -m conntrack --ctstate NEW -j MARK --set-mark 0x2333
  378. # packet-mark -> connection-mark
  379. iptables -t mangle -A SSREDIR -j CONNMARK --save-mark
  380. ##################### OUTPUT #####################
  381. # proxy the outgoing traffic from this machine
  382. iptables -t mangle -A OUTPUT -p tcp -m addrtype --src-type LOCAL ! --dst-type LOCAL -j SSREDIR
  383. iptables -t mangle -A OUTPUT -p udp -m addrtype --src-type LOCAL ! --dst-type LOCAL -j SSREDIR
  384. ##################### PREROUTING #####################
  385. # proxy traffic passing through this machine (other->other)
  386. iptables -t mangle -A PREROUTING -p tcp -m addrtype ! --src-type LOCAL ! --dst-type LOCAL -j SSREDIR
  387. iptables -t mangle -A PREROUTING -p udp -m addrtype ! --src-type LOCAL ! --dst-type LOCAL -j SSREDIR
  388. # hand over the marked package to TPROXY for processing
  389. iptables -t mangle -A PREROUTING -p tcp -m mark --mark 0x2333 -j TPROXY --on-ip 127.0.0.1 --on-port 60080
  390. iptables -t mangle -A PREROUTING -p udp -m mark --mark 0x2333 -j TPROXY --on-ip 127.0.0.1 --on-port 60080
  391. }
  392. stop_iptables() {
  393. ##################### PREROUTING #####################
  394. iptables -t mangle -D PREROUTING -p tcp -m mark --mark 0x2333 -j TPROXY --on-ip 127.0.0.1 --on-port 60080 &>/dev/null
  395. iptables -t mangle -D PREROUTING -p udp -m mark --mark 0x2333 -j TPROXY --on-ip 127.0.0.1 --on-port 60080 &>/dev/null
  396. iptables -t mangle -D PREROUTING -p tcp -m addrtype ! --src-type LOCAL ! --dst-type LOCAL -j SSREDIR &>/dev/null
  397. iptables -t mangle -D PREROUTING -p udp -m addrtype ! --src-type LOCAL ! --dst-type LOCAL -j SSREDIR &>/dev/null
  398. ##################### OUTPUT #####################
  399. iptables -t mangle -D OUTPUT -p tcp -m addrtype --src-type LOCAL ! --dst-type LOCAL -j SSREDIR &>/dev/null
  400. iptables -t mangle -D OUTPUT -p udp -m addrtype --src-type LOCAL ! --dst-type LOCAL -j SSREDIR &>/dev/null
  401. ##################### SSREDIR #####################
  402. iptables -t mangle -F SSREDIR &>/dev/null
  403. iptables -t mangle -X SSREDIR &>/dev/null
  404. }
  405. start_iproute2() {
  406. ip route add local default dev lo table 100
  407. ip rule add fwmark 0x2333 table 100
  408. }
  409. stop_iproute2() {
  410. ip rule del table 100 &>/dev/null
  411. ip route flush table 100 &>/dev/null
  412. }
  413. start_resolvconf() {
  414. # or nameserver 8.8.8.8, etc.
  415. echo "nameserver 1.1.1.1" >/etc/resolv.conf
  416. }
  417. stop_resolvconf() {
  418. echo "nameserver 114.114.114.114" >/etc/resolv.conf
  419. }
  420. start() {
  421. echo "start ..."
  422. start_ssredir
  423. start_iptables
  424. start_iproute2
  425. start_resolvconf
  426. echo "start end"
  427. }
  428. stop() {
  429. echo "stop ..."
  430. stop_resolvconf
  431. stop_iproute2
  432. stop_iptables
  433. stop_ssredir
  434. echo "stop end"
  435. }
  436. restart() {
  437. stop
  438. sleep 1
  439. start
  440. }
  441. main() {
  442. if [ $# -eq 0 ]; then
  443. echo "usage: $0 start|stop|restart ..."
  444. return 1
  445. fi
  446. for funcname in "$@"; do
  447. if [ "$(type -t $funcname)" != 'function' ]; then
  448. echo "'$funcname' not a shell function"
  449. return 1
  450. fi
  451. done
  452. for funcname in "$@"; do
  453. $funcname
  454. done
  455. return 0
  456. }
  457. main "$@"
  458. ```
  459. ## Dicas de segurança
  460. Para qualquer servidor público, para evitar que os usuários acessem o localhost do seu servidor, adicione `--acl acl/server_block_local.acl` à linha de comando.
  461. Embora shadowsocks-libev possa lidar bem com milhares de conexões simultâneas, ainda recomendamos
  462. configurando as regras de firewall do seu servidor para limitar as conexões de cada usuário:
  463. # Até 32 conexões são suficientes para uso normal
  464. iptables -A INPUT -p tcp --syn --dport ${SHADOWSOCKS_PORT} -m connlimit --connlimit-above 32 -j REJECT --reject-with tcp-reset
  465. ## Licença
  466. ```
  467. Copyright: 2013-2015, Clow Windy <clowwindy42@gmail.com>
  468. 2013-2018, Max Lv <max.c.lv@gmail.com>
  469. 2014, Linus Yang <linusyang@gmail.com>
  470. Este programa é um software livre: você pode redistribuí-lo
  471. e/ou modificá-lo sob os termos da GNU General Public License
  472. conforme publicada pela Free Software Foundation, a versão 3
  473. da Licença ou (a seu critério) qualquer versão posterior.
  474. Este programa é distribuído na esperança de que seja útil,
  475. mas SEM QUALQUER GARANTIA; sem mesmo a garantia implícita
  476. de COMERCIALIZAÇÃO ou ADEQUAÇÃO A UM DETERMINADO FIM.Veja
  477. a Licença Pública Geral GNU para mais detalhes.
  478. Você deve ter recebido uma cópia da GNU General Public License
  479. juntamente com este programa. Caso contrário,
  480. consulte <http://www.gnu.org/licenses/>.
  481. ```