Compare commits

...

9 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
4 changed files with 88 additions and 53 deletions

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

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

View file

@ -1,48 +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, ArchLinux and Fedora 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)
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
fi
# Tor's TransPort # Tor's TransPort
TRANS_PORT="9040" TRANS_PORT="9040"
if ! command -v tor > /dev/null; then case "$1" in
start)
if test -f "$RULES"; then
echo "$RULES exists. Either delete it, or stop tor-router first."
exit 1
else
# Executable file to create rules for transparent proxy
# Destinations you do not want routed through Tor
NON_TOR="192.168.1.0/24 192.168.0.0/24 10.0.0.0/8"
# the UID Tor runs as, actually only support for Debian, ArchLinux and Fedora 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)
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
if ! command -v tor >/dev/null; then
echo "You need to install the tor package." echo "You need to install the tor package."
exit exit 1
elif ! systemctl is-active tor.service > /dev/null; then 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." echo "The tor service is not active, please start the tor service before running the script."
exit exit 1
elif ! command -v iptables > /dev/null; then elif ! command -v iptables >/dev/null; then
echo "You need to install the iptables package." echo "You need to install the iptables package."
exit exit 1
else else
# Only save the rules when we are sure that everything is working
iptables-save >$RULES
iptables -F iptables -F
iptables -t nat -F iptables -t nat -A OUTPUT -m owner --uid-owner "$TOR_UID" -j RETURN
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
iptables -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to-ports 5353
for NET in $NON_TOR 127.0.0.0/9 127.128.0.0/10; do for NET in $NON_TOR 127.0.0.0/9 127.128.0.0/10; do
iptables -t nat -A OUTPUT -d $NET -j RETURN iptables -t nat -A OUTPUT -d "$NET" -j RETURN
done done
iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT iptables -t nat -A OUTPUT -p tcp --syn -j REDIRECT --to-ports $TRANS_PORT
iptables -t nat -A OUTPUT -p udp -j REDIRECT --to-ports $TRANS_PORT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
for NET in $NON_TOR 127.0.0.0/8; do for NET in $NON_TOR 127.0.0.0/8; do
iptables -A OUTPUT -d $NET -j ACCEPT iptables -A OUTPUT -d "$NET" -j ACCEPT
done done
iptables -A OUTPUT -m owner --uid-owner $TOR_UID -j ACCEPT iptables -A OUTPUT -m owner --uid-owner "$TOR_UID" -j ACCEPT
iptables -A OUTPUT -j ACCEPT fi
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