2014-02-22, 14:06
  #1
Medlem
Philip-Seymour-H.s avatar
Jag har skrivit ett bashskript för att kolla om VPN dör. Men vet ej hur jag dödar min uppkoppling idiotsäker? skall jag använda brandväggen eller på något annat sätt? detta är vad mina frågor handlar om :-) Tacksam för svar :-)



Okay, detta är mitt första inlägg, jag ber om ursäkt för alla nybörjarfel jag kan tänkas göra! Jag har två tydliga frågor. :-)



Jag har skrivit mitt första bash skript, jag är inte en van programmerare ...

Bakgrund.
I höstas efter NSA-affären skaffade jag en VPN-tunnel via relakks.com men jag insåg snabbt att VPN-anslutningen kunde stängas ner utan förvarning och så sitter man ändå där med en öppen oanonym dator!., och man kanske inte ens är hemma och vem som helst kan se vad man gör. :-S

Jag skrev därför skriptet "kolla_VPN" för att ständigt kontrollera om jag är uppkopplad. Se längre ner:

Relakks tilldelar alltid användaren en IP adress som alltid börjar på 93.182, så via kommandot ifconfig så hämtar mitt skript min IP och kontrollerar att den här 93.182.Om det inte är det skall den ögonblickligen stänga ner mitt internet. Är tanken.


Nu har jag två problem.

1.
Om jag låter skriptet kontrollera precis hela tiden blir datorn ganska varm eller fläkten börjar rusa som fan ... så jag la in en sekunds fördröjning med raden

sleep 1

skall det vara så? är det krävande att ständigt fråga ifconfig att returnera ett värde? eller var datorn redan för varm från början?


2.
Tanken var att om VPN stängs ner så skall skriptet stänga ner Internet detta tänkte jag göra med kommandot

nmckli con down id Min_Uppkoppling

Problemet är att datorn kopplar ju upp själv i alla fall.. självmant, automatiskt...


Detta har fått mig att fundera på om jag kan strypa internet idiotsäkert... och vilket kommando skall jag ha då? :-)

Är Brandväggen en väg att gå? kan jag anropa iptables eller skall jag anropa ufw? och eller hur skall jag göra? Vad skall jag skriva, jag kan nästan inget om iptables eller ufw,
Vilka kommandon i ett skript stänger av mitt internet idiotsäkert? :-)

Och med vilket kommando låser jag upp det igen? :-)


Ett annat problem är ju att jag antar att om jag skall anropa iptables så behöver jag göra det som root? ellers om superuser och då måste jag ju ange mitt lösenord i själva skriptfilen och jag vill helst inte ha mitt sudo lösenord drällande i dokument i datorn. Kan jag strypa allt internet för mig själv? .

Eller skall jag starta skriptet redan från början som superuser med typ

sudo ./kolla_VPN

Någon har sagt att man inte skall köra skript som root? eller är det bara root och inte som superuser?

Eller finns det något annat sätt att stänga av Internet på elektronisk anropar väg...Jag har hört att network manager som nmcli anropar lever sitt egna liv och kommer i konflikt med brandväggen, men brandväggen alltid är överlägsen ... men finns det något annat sätt, när man inte är hemma och kan dra ut sladden?

Tacksam för svar! och återigen jag ber om ursäkt om jag gått över gränser. Jag har sökt info ganska mycket men inte löst dessa problem. :-)

Om någon skulle vilja använda skriptet för egen del, be my guest...


#!/bin/bash
# Skalskrip som skall koppla ner internet när VPN inte fungerar.
# skrivet av Anonymous licence GNU

echo "Först kopplar vi upp mot internet"
echo " " # blankrad
echo " " # blankrad
echo " " # blankrad
nmcli -p con up id Min_Uppkoppling # kopplar upp mot internet
echo " " # blankrad


echo " " # blankrad
echo "Sen kopplar vi upp mot VPN"
echo " " # blankrad
nmcli -p con up id relakks # koppla upp vpn
echo " " # blankrad



echo " " # blankrad
Str1=`ifconfig | grep -o "93.182"` # hämtar min IP, grep med växeln -o
Str2="$Str1" # ger nästa variabel samma värde
echo " " # blankrad
echo "nu är har vi hämtat värdet med ifconfig"
echo " " # blankrad
echo "Min IP adress börjar på "
echo $Str1 # Och visar upp värdet
echo $Str2
echo " " # blankrad
echo " sov tre sekunder"
echo " " # blankrad
sleep 3

for (( ; ; )); do # skapar en oändlig loop

if [ "$Str1" = "$Str2" ] # Jämför om dom är samma.
then
echo " "
echo " "
echo "VPN fungerar fint...." # Berättar att VPN fungerar

echo "klockan är nu "
date # skriver ut klockslag och datum .

# echo " " # blankrad

Str1="Värdet är tömt...." # Jag tömmer värdet på variablen igen.

echo "Str1 är nu......" | echo $Str1
# echo " " # blankrad

Str1=`ifconfig | grep -o "93.182"` # hämta min IP igen

# echo "Nu är jag::"
echo $Str1
# echo " "
echo " Sov en sekund"
sleep 1

else

echo " " # blankrad
echo "nu kopplar Vi ner hela internet"
# nmcli -p con down id Min_Uppkoppling # koppla ner mitt internet
echo " "

fi
done
Citera
2014-02-22, 14:20
  #2
Medlem
cammos avatar
network shutdown
Citera
2014-02-23, 13:18
  #3
Medlem
Citat:
Ursprungligen postat av Philip-Seymour-H.
Ett annat problem är ju att jag antar att om jag skall anropa iptables så behöver jag göra det som root? ellers om superuser och då måste jag ju ange mitt lösenord i själva skriptfilen och jag vill helst inte ha mitt sudo lösenord drällande i dokument i datorn. Kan jag strypa allt internet för mig själv? .

Eller skall jag starta skriptet redan från början som superuser med typ

sudo ./kolla_VPN

Någon har sagt att man inte skall köra skript som root? eller är det bara root och inte som superuser?

Det är inga problem att köra script som root, men ju färre rader kod man kör i root-läge, desto bättre. Ju mindre kod desto mindre chans för en bugg = säkerhetshål. Så skaffa helst root-behörighet bara när du behöver och droppa den direkt efter.

Med sudo behöver man inte skriva lösenord i filer, det är en av fördelarna, sätt bara flaggan NOPASSWD på regeln. Kolla EXAMPLES här eller läs din lokala sudoers (5). Sudo är ett väldigt bra sätt att dela ut rättigheter på, och säkrare än suid:ade script. Men två fällor att undvika i sudoers-filen:

* Skriv alltid full path till programmet/scriptet i regeln, t.ex. "/usr/sbin/iptables" istället för "iptables". Annars kan man skriva ett script med valfritt innehåll, spara det nånstans med samma namn (iptables), lägga till mappen i PATH och köra alla program (istället för bara iptables).

* Använd "" efter programnamnet för att begränsa argumenten man kan skicka till programmet till 0 stycken. En regel utan nåt efter namnet betyder att man kan skicka vilka argument som helst till programmet, oftast inte en bra idé.
Citera
2014-02-23, 13:55
  #4
Medlem
MrBraxs avatar
Googlade runt lite, borde inte det här gå?

Kod:
iptables -A OUTPUT -o ppp0 -j ACCEPT
iptables -A OUTPUT -j DROP
iptables -A INPUT -i ppp0 -j ACCEPT
iptables -A INPUT -j DROP

Ser ju logiskt ut.
Citera
2014-02-23, 19:38
  #5
Moderator
vhes avatar
Att hålla på och trixa med brandvägg känns som en väldig slå-på-symtomen-snarare-än-orsaken-lösning. Ta reda på vad det är för magi som drar upp din länk och uppfostra den istället.

Startas den om ifall du kör ifdown eth0 alternativt ifdown wlan0 som root (den ena är för ethernet, den andra för wifi)?

I övrigt:
1) Anledningen till att maskinen går varm är inte att det egentligen är så jobbigt att fråga efter nätverksinställningar, utan för att du startar nya processer hela tiden. Ja, sleep, är typ rätt lösning givet nivån du lagt dig på.
2) Att köra script som root är OK om man vet vad scripten gör. Det man bör undvika är att tanka ner random skit från intarwebben och köra som root. Det är ekvivalent med att köra godtyckliga .exe-filer utan virusskydd på en Windows-maskin.
3) Posta gärna kod i kodtaggar, det blir mer läsligt så.
Citera
2014-02-24, 21:52
  #6
Medlem
Jag är också inne på något liknande men ändå inte

skulle det inte vara bättre att begränsa trafiken via eth0 till bara starten på tunneln ?
kan iofs bli ett ip-range men det borde gå att lösa tycker jag
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in