Compare commits

...

5 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
3 changed files with 75 additions and 72 deletions

View file

@ -6,74 +6,78 @@ RULES="/var/tmp/tor-router.save"
TRANS_PORT="9040" TRANS_PORT="9040"
case "$1" in case "$1" in
start) start)
if test -f "$RULES"; then if test -f "$RULES"; then
echo "$RULES exists. Either delete it, or stop tor-router first." echo "$RULES exists. Either delete it, or stop tor-router first."
exit exit 1
else else
iptables-save > $RULES
# Executable file to create rules for transparent proxy # Executable file to create rules for transparent proxy
# Destinations you do not want routed through Tor # Destinations you do not want routed through Tor
NON_TOR="192.168.1.0/24 192.168.0.0/24" 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. # the UID Tor runs as, actually only support for Debian, ArchLinux and Fedora as been added.
if command -v pacman > /dev/null; then if command -v pacman >/dev/null; then
TOR_UID=$(id -u tor) TOR_UID=$(id -u tor)
elif command -v apt > /dev/null; then elif command -v apt >/dev/null; then
TOR_UID=$(id -u debian-tor) TOR_UID=$(id -u debian-tor)
elif command -v dnf > /dev/null; then elif command -v dnf >/dev/null; then
TOR_UID=$(id -u toranon) TOR_UID=$(id -u toranon)
else else
echo "Unknown distro, please create report the issue to https://github.com/edu4rdshl/tor-router/issues" echo "Unknown distro, please create report the issue to https://github.com/edu4rdshl/tor-router/issues"
exit exit 1
fi fi
if ! command -v tor > /dev/null; then 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 fi
;; ;;
stop)
if ! -f "$RULES"; then 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." echo "$RULES does not exist. Not doing anything."
exit exit
else
echo "Restoring previous rules from $RULES"
iptables -t nat -F
iptables-restore < $RULES
rm $RULES
fi fi
;; ;;
restart)
restart)
stop stop
sleep 2 sleep 1
start start
;; ;;
*) *)
echo "Usage: $0 {start|stop|restart}" echo "Usage: $0 {start|stop|restart}"
;;
esac esac

View file

@ -1,6 +1,7 @@
[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

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