Compare commits

...

11 commits

Author SHA1 Message Date
5b79c1ce49 Update script.
Fix #11
2024-01-17 19:03:07 -05:00
290d0b1e29 Apply shellcheck fixes. 2023-05-04 01:40:09 -05:00
ab272cb25f Add Requires to the unit. 2023-04-29 18:26:01 -05:00
2fdae488f9 Use appropiate exit code when failing
Currently, we use the 0 status code, doesn't matter if it's a failure or not, so lets fix it.
2023-04-29 18:25:19 -05:00
Eduard Tolosa
144767ebb2
Fix issue detecting the rules file. 2023-04-16 00:35:20 +00:00
Eduard Tolosa
3a81a3b48a
Style 2023-04-16 00:16:44 +00:00
Eduard Tolosa
f53ced3004
Add informative message. 2023-04-16 00:15:59 +00:00
mullerhx
d0734de5c0
Service improvements
* Created start/stop methods to make service management easier

* Added start/stop functions. Added iptables-save/restore functionality.

---------

Co-authored-by: strepsil <hm@bitlabs.co.za>
2023-03-20 19:45:15 +00:00
Eduard Tolosa
34738887a0
Create FUNDING.yml 2021-07-26 09:11:12 +00:00
FaultierSP
7658db7e1c
Update tor-router (#7)
In line 26 switched "if" to "elif"
2020-06-07 14:20:56 -05:00
Rasool Safari
0bfd341c65
Add support for Fedora.
Co-authored-by: Rasool Safari <safari@rasoll.com>
2020-05-07 09:03:34 -05:00
4 changed files with 88 additions and 48 deletions

1
.github/FUNDING.yml vendored Normal file
View file

@ -0,0 +1 @@
github: [edu4rdshl]

View file

@ -1,43 +1,83 @@
#!/bin/bash #!/bin/bash
# Executable file to create rules for transparent proxy
# Destinations you do not want routed through Tor RULES="/var/tmp/tor-router.save"
NON_TOR="192.168.1.0/24 192.168.0.0/24"
# the UID Tor runs as, actually only support for Debian and ArchLinux as been added.
if command -v pacman > /dev/null; then
TOR_UID=$(id -u tor)
elif command -v apt > /dev/null; then
TOR_UID=$(id -u debian-tor)
else
echo "Unknown distro, please create report the issue to https://github.com/edu4rdshl/tor-router/issues"
exit
fi
# Tor's TransPort # Tor's TransPort
TRANS_PORT="9040" TRANS_PORT="9040"
if ! command -v tor > /dev/null; then case "$1" in
echo "You need to install the tor package." start)
exit if test -f "$RULES"; then
elif ! systemctl is-active tor.service > /dev/null; then echo "$RULES exists. Either delete it, or stop tor-router first."
echo "The tor service is not active, please start the tor service before running the script." exit 1
exit else
else # Executable file to create rules for transparent proxy
iptables -F # Destinations you do not want routed through Tor
iptables -t nat -F NON_TOR="192.168.1.0/24 192.168.0.0/24 10.0.0.0/8"
iptables -t nat -A OUTPUT -m owner --uid-owner $TOR_UID -j RETURN # the UID Tor runs as, actually only support for Debian, ArchLinux and Fedora as been added.
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 5353 if command -v pacman >/dev/null; then
TOR_UID=$(id -u tor)
elif command -v apt >/dev/null; then
TOR_UID=$(id -u debian-tor)
elif command -v dnf >/dev/null; then
TOR_UID=$(id -u toranon)
else
echo "Unknown distro, please create report the issue to https://github.com/edu4rdshl/tor-router/issues"
exit 1
fi
for NET in $NON_TOR 127.0.0.0/9 127.128.0.0/10; do if ! command -v tor >/dev/null; then
iptables -t nat -A OUTPUT -d $NET -j RETURN echo "You need to install the tor package."
done exit 1
elif ! systemctl is-active tor.service >/dev/null; then
echo "The tor service is not active, please start the tor service before running the script."
exit 1
elif ! command -v iptables >/dev/null; then
echo "You need to install the iptables package."
exit 1
else
# Only save the rules when we are sure that everything is working
iptables-save >$RULES
iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT iptables -F
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -t nat -A OUTPUT -m owner --uid-owner "$TOR_UID" -j RETURN
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 6669
for NET in $NON_TOR 127.0.0.0/8; do for NET in $NON_TOR 127.0.0.0/9 127.128.0.0/10; do
iptables -A OUTPUT -d $NET -j ACCEPT iptables -t nat -A OUTPUT -d "$NET" -j RETURN
done done
iptables -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT
iptables -A OUTPUT -j ACCEPT iptables -t nat -A OUTPUT -p udp -j REDIRECT --to-ports $TRANS_PORT
fi iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
for NET in $NON_TOR 127.0.0.0/8; do
iptables -A OUTPUT -d "$NET" -j ACCEPT
done
iptables -A OUTPUT -m owner --uid-owner "$TOR_UID" -j ACCEPT
fi
fi
;;
stop)
if test -f "$RULES"; then
echo "Restoring previous rules from $RULES"
iptables -F
iptables-restore <"$RULES"
rm "$RULES"
else
echo "$RULES does not exist. Not doing anything."
exit
fi
;;
restart)
stop
sleep 1
start
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac

View file

@ -1,12 +1,13 @@
[Unit] [Unit]
Description=Start rules for transparent tor proxy Description=Start rules for transparent tor proxy
After=network-online.target tor.service After=network-online.target tor.service
Requires=tor.service
[Service] [Service]
Type=simple Type=simple
ExecStart=/usr/bin/tor-router ExecStart=/usr/bin/tor-router start
RemainAfterExit=yes RemainAfterExit=yes
ExecStop=/usr/bin/iptables -F OUTPUT ExecStop=/usr/bin/tor-router stop
TimeoutStopSec=180 TimeoutStopSec=180
KillMode=process KillMode=process
KillSignal=SIGINT KillSignal=SIGINT

View file

@ -1,4 +1,4 @@
#!/bin/sh #!/bin/bash
# Script that automate the procces for setting up TOR as a tranparent proxy # Script that automate the procces for setting up TOR as a tranparent proxy
# Autor: Edu4rdSHL @edu4rdshl # Autor: Edu4rdSHL @edu4rdshl
@ -9,33 +9,31 @@ executablerules="$PWD/files/tor-router"
servicefile="$PWD/files/tor-router.service" servicefile="$PWD/files/tor-router.service"
#Check if the current user have root privileges #Check if the current user have root privileges
if [ "$UID" -ne "0" ] ; then if [ "$UID" -ne "0" ]; then
echo -e "\nYou need root permisions to run it script." echo -e "\nYou need root permisions to run it script."
exit exit
fi fi
echo -e "Checking if TOR and Systemd are installed..." echo -e "Checking if TOR and Systemd are installed..."
if command -v tor >/dev/null && command -v systemctl > /dev/null ; then if command -v tor >/dev/null && command -v systemctl >/dev/null; then
if grep -iq "# Seting up TOR transparent proxy for tor-router" "$torconfig" ; then if grep -iq "# Seting up TOR transparent proxy for tor-router" "$torconfig"; then
echo -e "\ntor-router is already configured in $torconfig" echo -e "\ntor-router is already configured in $torconfig"
else else
echo -e "\nAll fundamentals tools are installed, proceding..." echo -e "\nAll fundamentals tools are installed, proceding..."
echo -e "\nMaking a backup of your torrc file, if you have problems with the new configuration, delete $torconfig and move $torconfigbackup to $torconfig" echo -e "\nMaking a backup of your torrc file, if you have problems with the new configuration, delete $torconfig and move $torconfigbackup to $torconfig"
cp "$torconfig" "$torconfigbackup" cp "$torconfig" "$torconfigbackup"
echo -e "\nConfiguring the torrc file to use TOR as a transparent proxy..." echo -e "\nConfiguring the torrc file to use TOR as a transparent proxy..."
echo -e "\n# Seting up TOR transparent proxy for tor-router\nVirtualAddrNetwork 10.192.0.0/10\nAutomapHostsOnResolve 1\nTransPort 9040\nDNSPort 5353" >> "$torconfig" echo -e "\n# Seting up TOR transparent proxy for tor-router\nVirtualAddrNetwork 10.192.0.0/10\nAutomapHostsOnResolve 1\nTransPort 9040\nDNSPort 6669" >>"$torconfig"
echo -e "\nCreating, enabling and starting the service file tor transparent proxy..." echo -e "\nCreating, enabling and starting the service file tor transparent proxy..."
cp "$executablerules" "/usr/bin/" cp "$executablerules" "/usr/bin/"
chmod +x "/usr/bin/tor-router" chmod +x "/usr/bin/tor-router"
cp "$servicefile" "/etc/systemd/system/" cp "$servicefile" "/etc/systemd/system/"
systemctl enable tor-router.service && systemctl start tor-router.service systemctl enable tor-router.service && systemctl start tor-router.service
echo -e "\nEnabling and restarting the TOR daemon using systemctl..." echo -e "\nEnabling and restarting the TOR daemon using systemctl..."
systemctl enable tor && systemctl restart tor if systemctl enable tor && systemctl restart tor; then
if [ "$?" == 0 ] ; then
echo -e "Checking if all are working..." echo -e "Checking if all are working..."
if command -v curl >/dev/null ; then if command -v curl >/dev/null; then
curl https://check.torproject.org/ | grep "Congratulations." if curl https://check.torproject.org/ | grep "Congratulations."; then
if [ "$?" == 0 ] ; then
echo -e "\nAll is OK, from now on all your network traffic is under the TOR Network, look for your IP addres in your browser." echo -e "\nAll is OK, from now on all your network traffic is under the TOR Network, look for your IP addres in your browser."
exit exit
fi fi