# π·πΊ RU
## Π‘ΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΠ΅
* ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
* (ΠΠΎΠ»Π½ΠΎΡΡΡΡ) ΡΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΡΡΠΊ
* ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° βοΈ
### ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
ΠΠ°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° flatpak ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΎΠΊΡΠΈ (ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ 127.0.0.1:2080) ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ **proxychains-ng** \
ΠΠΎΠΆΠ½ΠΎ ΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ ΠΏΡΠΎΠΊΡΠΈ Π½ΠΎ ΡΡΠΎ Π½Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ.
### (ΠΠΎΠ»Π½ΠΎΡΡΡΡ) ΡΡΡΠ½ΠΎΠΉ Π·Π°ΠΏΡΡΠΊ
1. Π‘ΠΊΠ°ΡΠ°ΡΡ ΠΈΡΡ
ΠΎΠ΄Π½ΠΈΠΊΠΈ ΠΈΠ· https://github.com/rofl0r/proxychains-ng/releases (`proxychains...tar.gz`)
2. Π Π°ΡΠΏΠ°ΠΊΠΎΠ²Π°ΡΡ Π³Π΄Π΅ ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈ Π·Π°ΠΉΡΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π² ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π΅
3. Π‘ΠΎΠ±ΡΠ°ΡΡ:
```
./configure
make
```
4. Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΏΠ°ΠΏΠΊΡ Π΄Π»Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ ΠΈ proxychains: `mkdir ~/proxychains`
5. Π‘ΠΊΠΎΠΏΠΈΡΠΎΡΠ°ΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΈΠΊΠΈ: `cp proxychains4 libproxychains4.so ~/proxychains/`
6. Π‘ΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π² `~/proxychains/proxychains4.conf` Π²ΠΈΠ΄Π°:
proxychains4.conf
```
# proxychains.conf VER 4.x
#
# HTTP, SOCKS4a, SOCKS5 tunneling proxifier with DNS.
# The option below identifies how the ProxyList is treated.
# only one option should be uncommented at time,
# otherwise the last appearing option will be accepted
#
#dynamic_chain
#
# Dynamic - Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped)
# otherwise EINTR is returned to the app
#
strict_chain
#
# Strict - Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# all proxies must be online to play in chain
# otherwise EINTR is returned to the app
#
#round_robin_chain
#
# Round Robin - Each connection will be done via chained proxies
# of chain_len length
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped).
# the start of the current proxy chain is the proxy after the last
# proxy in the previously invoked proxy chain.
# if the end of the proxy chain is reached while looking for proxies
# start at the beginning again.
# otherwise EINTR is returned to the app
# These semantics are not guaranteed in a multithreaded environment.
#
#random_chain
#
# Random - Each connection will be done via random proxy
# (or proxy chain, see chain_len) from the list.
# this option is good to test your IDS :)
# Make sense only if random_chain or round_robin_chain
#chain_len = 2
# Quiet mode (no output from library)
#quiet_mode
## Proxy DNS requests - no leak for DNS data
# (disable all of the 3 items below to not proxy your DNS requests)
# method 1. this uses the proxychains4 style method to do remote dns:
# a thread is spawned that serves DNS requests and hands down an ip
# assigned from an internal list (via remote_dns_subnet).
# this is the easiest (setup-wise) and fastest method, however on
# systems with buggy libcs and very complex software like webbrowsers
# this might not work and/or cause crashes.
proxy_dns
# method 2. use the old proxyresolv script to proxy DNS requests
# in proxychains 3.1 style. requires `proxyresolv` in $PATH
# plus a dynamically linked `dig` binary.
# this is a lot slower than `proxy_dns`, doesn't support .onion URLs,
# but might be more compatible with complex software like webbrowsers.
#proxy_dns_old
# method 3. use proxychains4-daemon process to serve remote DNS requests.
# this is similar to the threaded `proxy_dns` method, however it requires
# that proxychains4-daemon is already running on the specified address.
# on the plus side it doesn't do malloc/threads so it should be quite
# compatible with complex, async-unsafe software.
# note that if you don't start proxychains4-daemon before using this,
# the process will simply hang.
#proxy_dns_daemon 127.0.0.1:1053
# set the class A subnet number to use for the internal remote DNS mapping
# we use the reserved 224.x.x.x range by default,
# if the proxified app does a DNS request, we will return an IP from that range.
# on further accesses to this ip we will send the saved DNS name to the proxy.
# in case some control-freak app checks the returned ip, and denies to
# connect, you can use another subnet, e.g. 10.x.x.x or 127.x.x.x.
# of course you should make sure that the proxified app does not need
# *real* access to this subnet.
# i.e. dont use the same subnet then in the localnet section
#remote_dns_subnet 127
#remote_dns_subnet 10
remote_dns_subnet 224
# Some timeouts in milliseconds
tcp_read_time_out 15000
tcp_connect_time_out 8000
### Examples for localnet exclusion
## localnet ranges will *not* use a proxy to connect.
## note that localnet works only when plain IP addresses are passed to the app,
## the hostname resolves via /etc/hosts, or proxy_dns is disabled or proxy_dns_old used.
## Exclude connections to 192.168.1.0/24 with port 80
# localnet 192.168.1.0:80/255.255.255.0
## Exclude connections to 192.168.100.0/24
# localnet 192.168.100.0/255.255.255.0
## Exclude connections to ANYwhere with port 80
# localnet 0.0.0.0:80/0.0.0.0
# localnet [::]:80/0
## RFC6890 Loopback address range
## if you enable this, you have to make sure remote_dns_subnet is not 127
## you'll need to enable it if you want to use an application that
## connects to localhost.
# localnet 127.0.0.0/255.0.0.0
# localnet ::1/128
## RFC1918 Private Address Ranges
# localnet 10.0.0.0/255.0.0.0
# localnet 172.16.0.0/255.240.0.0
# localnet 192.168.0.0/255.255.0.0
### Examples for dnat
## Trying to proxy connections to destinations which are dnatted,
## will result in proxying connections to the new given destinations.
## Whenever I connect to 1.1.1.1 on port 1234 actually connect to 1.1.1.2 on port 443
# dnat 1.1.1.1:1234 1.1.1.2:443
## Whenever I connect to 1.1.1.1 on port 443 actually connect to 1.1.1.2 on port 443
## (no need to write :443 again)
# dnat 1.1.1.2:443 1.1.1.2
## No matter what port I connect to on 1.1.1.1 port actually connect to 1.1.1.2 on port 443
# dnat 1.1.1.1 1.1.1.2:443
## Always, instead of connecting to 1.1.1.1, connect to 1.1.1.2
# dnat 1.1.1.1 1.1.1.2
# ProxyList format
# type ip port [user pass]
# (values separated by 'tab' or 'blank')
#
# only numeric ipv4 addresses are valid
#
#
# Examples:
#
# socks5 192.168.67.78 1080 lamer secret
# http 192.168.89.3 8080 justu hidden
# socks4 192.168.1.49 1080
# http 192.168.39.93 8080
#
#
# proxy types: http, socks4, socks5, raw
# * raw: The traffic is simply forwarded to the proxy without modification.
# ( auth types supported: "basic"-http "user/pass"-socks )
#
# !!!!!
# Else proxy will redirect all to localhost
localnet 127.0.0.0/255.0.0.0
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 127.0.0.1 2080
#socks5 127.0.0.1 9150
```
7. ΠΠΎΠΌΠ΅Π½ΡΡΡ ΠΏΠΎΡΡ `2080` ΠΈ/ΠΈΠ»ΠΈ Π°Π΄ΡΠ΅Ρ Π½Π° Π»ΡΠ±ΠΎΠΉ ΡΠ΄ΠΎΠ±Π½ΡΠΉ, Π΅ΡΠ»ΠΈ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ.
8. ΠΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ°: `flatpak info --show-metadata YOUR.APP.HERE | grep command | cut -d '=' -f 2`
9. ΠΠ°ΠΉΡΠΈ Π² ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: `flatpak run --filesystem="~/proxychains:ro" --command="bash" YOUR.APP.HERE`
10. ΠΡΠΎΠ²Π΅ΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ: `proxychains/proxychains4 -f proxychains/proxychains4.conf curl ipinfo.io`
11. ΠΠ°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΠ΅Π· `proxychains/proxychains4 -f proxychains/proxychains4.conf YOUR_COMMAND_HERE`
### ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ° βοΈ
1. ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠΊΡΠΈΠΏΡ: `python setup.py`
2. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ°ΠΌ: ΡΠΊΠ°Π·Π°ΡΡ Π°Π΄ΡΠ΅Ρ ΠΏΡΠΎΠΊΡΠΈ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 127.0.0.1:2080), (ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅) Π½Π°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
3. Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΠΏΠΎΡΠ»Π΅: `COMMAND: ` Π² ΡΠ°Π·Π΄Π΅Π»Π΅ `Generated command`
ΠΠ°Π»Π΅Π΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅:
* ΡΠΎΠ·Π΄Π°ΡΡ ΡΡΠ»ΡΠΊ ΠΈ ΡΠΊΠ°Π·Π°ΡΡ Π² `Exec=` ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π²ΠΈΠ΄Π°: `Exec=/usr/bin/flatpak run ...`
* ΡΠΎΠ·Π΄Π°ΡΡ Π°Π»ΠΈΠ°Ρ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ° .bashrc
* ΡΠΎΠ·Π΄Π°ΡΡ ΡΠΊΡΠΈΠΏΡ Π΄Π»Ρ Π·Π°ΠΏΡΡΠΊΠ°
# πΊπΈ EN
## Content
* Description
* (Fully) manual start
* Automatic setup βοΈ
### ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅
Instructions set and small script for running flatpak app trought local proxy (for example 127.0.0.1:2080) using **proxychains-ng**
You can run and trought public proxy but it's not safe.
### (Fully) manual start
1. Download source code from https://github.com/rofl0r/proxychains-ng/releases (`proxychains...tar.gz`)
2. Unarchive wherever you like and got to directory in the terminal
3. Compile:
```
./configure
make
```
4. Create path for configuration and proxychains: `mkdir ~/proxychains`
5. Copy binaries: `cp proxychains4 libproxychains4.so ~/proxychains/`
6. Create configuration in `~/proxychains/proxychains4.conf` look like:
proxychains4.conf
```
# proxychains.conf VER 4.x
#
# HTTP, SOCKS4a, SOCKS5 tunneling proxifier with DNS.
# The option below identifies how the ProxyList is treated.
# only one option should be uncommented at time,
# otherwise the last appearing option will be accepted
#
#dynamic_chain
#
# Dynamic - Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped)
# otherwise EINTR is returned to the app
#
strict_chain
#
# Strict - Each connection will be done via chained proxies
# all proxies chained in the order as they appear in the list
# all proxies must be online to play in chain
# otherwise EINTR is returned to the app
#
#round_robin_chain
#
# Round Robin - Each connection will be done via chained proxies
# of chain_len length
# all proxies chained in the order as they appear in the list
# at least one proxy must be online to play in chain
# (dead proxies are skipped).
# the start of the current proxy chain is the proxy after the last
# proxy in the previously invoked proxy chain.
# if the end of the proxy chain is reached while looking for proxies
# start at the beginning again.
# otherwise EINTR is returned to the app
# These semantics are not guaranteed in a multithreaded environment.
#
#random_chain
#
# Random - Each connection will be done via random proxy
# (or proxy chain, see chain_len) from the list.
# this option is good to test your IDS :)
# Make sense only if random_chain or round_robin_chain
#chain_len = 2
# Quiet mode (no output from library)
#quiet_mode
## Proxy DNS requests - no leak for DNS data
# (disable all of the 3 items below to not proxy your DNS requests)
# method 1. this uses the proxychains4 style method to do remote dns:
# a thread is spawned that serves DNS requests and hands down an ip
# assigned from an internal list (via remote_dns_subnet).
# this is the easiest (setup-wise) and fastest method, however on
# systems with buggy libcs and very complex software like webbrowsers
# this might not work and/or cause crashes.
proxy_dns
# method 2. use the old proxyresolv script to proxy DNS requests
# in proxychains 3.1 style. requires `proxyresolv` in $PATH
# plus a dynamically linked `dig` binary.
# this is a lot slower than `proxy_dns`, doesn't support .onion URLs,
# but might be more compatible with complex software like webbrowsers.
#proxy_dns_old
# method 3. use proxychains4-daemon process to serve remote DNS requests.
# this is similar to the threaded `proxy_dns` method, however it requires
# that proxychains4-daemon is already running on the specified address.
# on the plus side it doesn't do malloc/threads so it should be quite
# compatible with complex, async-unsafe software.
# note that if you don't start proxychains4-daemon before using this,
# the process will simply hang.
#proxy_dns_daemon 127.0.0.1:1053
# set the class A subnet number to use for the internal remote DNS mapping
# we use the reserved 224.x.x.x range by default,
# if the proxified app does a DNS request, we will return an IP from that range.
# on further accesses to this ip we will send the saved DNS name to the proxy.
# in case some control-freak app checks the returned ip, and denies to
# connect, you can use another subnet, e.g. 10.x.x.x or 127.x.x.x.
# of course you should make sure that the proxified app does not need
# *real* access to this subnet.
# i.e. dont use the same subnet then in the localnet section
#remote_dns_subnet 127
#remote_dns_subnet 10
remote_dns_subnet 224
# Some timeouts in milliseconds
tcp_read_time_out 15000
tcp_connect_time_out 8000
### Examples for localnet exclusion
## localnet ranges will *not* use a proxy to connect.
## note that localnet works only when plain IP addresses are passed to the app,
## the hostname resolves via /etc/hosts, or proxy_dns is disabled or proxy_dns_old used.
## Exclude connections to 192.168.1.0/24 with port 80
# localnet 192.168.1.0:80/255.255.255.0
## Exclude connections to 192.168.100.0/24
# localnet 192.168.100.0/255.255.255.0
## Exclude connections to ANYwhere with port 80
# localnet 0.0.0.0:80/0.0.0.0
# localnet [::]:80/0
## RFC6890 Loopback address range
## if you enable this, you have to make sure remote_dns_subnet is not 127
## you'll need to enable it if you want to use an application that
## connects to localhost.
# localnet 127.0.0.0/255.0.0.0
# localnet ::1/128
## RFC1918 Private Address Ranges
# localnet 10.0.0.0/255.0.0.0
# localnet 172.16.0.0/255.240.0.0
# localnet 192.168.0.0/255.255.0.0
### Examples for dnat
## Trying to proxy connections to destinations which are dnatted,
## will result in proxying connections to the new given destinations.
## Whenever I connect to 1.1.1.1 on port 1234 actually connect to 1.1.1.2 on port 443
# dnat 1.1.1.1:1234 1.1.1.2:443
## Whenever I connect to 1.1.1.1 on port 443 actually connect to 1.1.1.2 on port 443
## (no need to write :443 again)
# dnat 1.1.1.2:443 1.1.1.2
## No matter what port I connect to on 1.1.1.1 port actually connect to 1.1.1.2 on port 443
# dnat 1.1.1.1 1.1.1.2:443
## Always, instead of connecting to 1.1.1.1, connect to 1.1.1.2
# dnat 1.1.1.1 1.1.1.2
# ProxyList format
# type ip port [user pass]
# (values separated by 'tab' or 'blank')
#
# only numeric ipv4 addresses are valid
#
#
# Examples:
#
# socks5 192.168.67.78 1080 lamer secret
# http 192.168.89.3 8080 justu hidden
# socks4 192.168.1.49 1080
# http 192.168.39.93 8080
#
#
# proxy types: http, socks4, socks5, raw
# * raw: The traffic is simply forwarded to the proxy without modification.
# ( auth types supported: "basic"-http "user/pass"-socks )
#
# !!!!!
# Else proxy will redirect all to localhost
localnet 127.0.0.0/255.0.0.0
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 127.0.0.1 2080
#socks5 127.0.0.1 9150
```
7. Change port `2080` and/or address to other if needed.
8. Get run command: `flatpak info --show-metadata YOUR.APP.HERE | grep command | cut -d '=' -f 2`
9. Go to the desired application: `flatpak run --filesystem="~/proxychains:ro" --command="bash" YOUR.APP.HERE`
10. Check work: `proxychains/proxychains4 -f proxychains/proxychains4.conf curl ipinfo.io`
11. Run running command trought `proxychains/proxychains4 -f proxychains/proxychains4.conf YOUR_COMMAND_HERE`
### Automatic setup βοΈ
1. Run script: `python setup.py`
2. Follow the prompts: set proxy's address (by default 127.0.0.1:2080), (code) application name.
3. Copy the command after: `COMMAND: ` in the section `Generated command`
Next you can:
* create shortcut and set in `Exec=` this command look like: `Exec=/usr/bin/flatpak run ...`
* create alias for start in .bashrc
* create script for start