উবুন্টুর জন্য কি ভিপিএন মনিটর / কিল স্যুইচ অ্যাপ্লিকেশন রয়েছে?


10

হাই আমি একটি ভিপিএন মনিটর / কিল স্যুইচ অ্যাপ্লিকেশন খুঁজছি যা নিশ্চিত করবে যে আমার ভিপিএন সংযোগ সর্বদা সংযুক্ত রয়েছে। আমার সুরক্ষিত সংযোগটি যদি ড্রপ হয়, তবে অ্যাপ্লিকেশনটি অ্যাপ্লিকেশনগুলি পর্যালোচনা করবে যা এটি পর্যালোচনা করে ডেটা ফাঁস রোধ করতে monitoring আমি জানি উইন্ডোজের জন্য এ জাতীয় অ্যাপ্লিকেশন রয়েছে। তবে লিনাক্সের জন্য এখনও আমার উপযুক্ত বিকল্প খুঁজে পাওয়া যায়নি।

উত্তর:


5

আমার একই সেটআপ ছিল এবং "ভিপিএন কিল স্যুইচগুলি" যেটি মনে করবে তার চেয়ে জটিল।

আপনার স্পেসিফিকেশন অনুসরণ করে, যা "ভিপিএন পড়লে নির্দিষ্ট কিছু অ্যাপ্লিকেশনগুলিকে হত্যা" হিসাবে পড়ছে, এর একটি সহজ সমাধান রয়েছে।

উবুন্টুতে, নেটওয়ার্ক মনিটরে নেটওয়ার্ক ইভেন্টগুলির কলব্যাক রয়েছে, যাতে আপনি চান অ্যাপ্লিকেশনগুলিকে মেরে ফেলার জন্য কোনও স্ক্রিপ্ট লিখতে পারেন। উদাহরণ অনুসরণ করে:

সম্পাদনা করুন /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rb:

#!/usr/bin/env ruby

if ARGV == [ 'tun0', 'vpn-down' ]
  `pkill -f transmission`
  `pkill -f deluge`
end

এটি কার্যকর করা যায়: chmod 755 /etc/NetworkManager/dispatcher.d/50vpndownkillapps.rbএবং উপভোগ করুন :-)

এই স্ক্রিপ্টটি রুবিতে রয়েছে (সুতরাং এটি রুবি প্রয়োজন) তবে এটি তুচ্ছভাবে শেল স্ক্রিপ্টে রূপান্তরিত হতে পারে।

এটিও ধরে নিয়েছে যে ভিপিএন অ্যাডাপ্টারটি ওপেনভিপিএন tun0কনফিগারেশনের জন্য আদর্শ।


1
একটি অজানা কারণে, দীর্ঘকাল ধরে ARGVশুরু হয়েছিল 'tun0', এবং হঠাৎ 'tun1'কোনও অজান্তেই পরিবর্তিত হয়েছিল । সুতরাং, হত্যা এই প্রথম (বেহুদা) পরিবর্তন মান সত্ত্বেও কাজ সুইচ রাখা, আমি পরীক্ষা পরিবর্তন করতে হয়েছিলif ARGV.last == 'vpn-down'
zezollo

3

আমার একই চাহিদা ছিল এবং লিনাক্সে এর জন্য কোনও উত্সর্গীকৃত সরঞ্জাম নেই বলে মনে হওয়ায় আমি আমার নিজস্ব সমাধান বিকাশ করেছি। খোলা অ্যাপ্লিকেশনগুলি ড্রপ / বন্ধ করার দরকার নেই! :)

আপনাকে iptables ফায়ারওয়াল সেটআপ করতে হবে, যাতে আপনার মেশিনটি কেবলমাত্র নির্দিষ্ট ভিপিএন সার্ভারের সাথে সংযোগ করতে পারে (স্থানীয় ছাড়া অন্য কোনও ট্র্যাফিকের অনুমতি নেই, সুতরাং কোনও "ফাঁস" থাকবে না)। এখানে এর জন্য একটি স্ক্রিপ্ট রয়েছে (এটি ওয়েবে পাওয়া গেছে):

#!/bin/bash

# iptables setup on a local pc
# dropping all traffic not going trough vpn
# allowes traffic in local area network
# special rules for UPNP and Multicast discovery

FW="/sbin/iptables"
LCL="192.168.1.0/24"
VPN="10.0.0.0/12"
local_interface="eno1"
virtual_interface="tun0"

# VPN Servers
servers=(
123.123.123.123
124.124.124.124
)

#---------------------------------------------------------------
# Remove old rules and tables
#---------------------------------------------------------------
echo "Deleting old iptables rules..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

echo "Setting up new rules..."

#---------------------------------------------------------------
# Default Policy - Drop anything!
#---------------------------------------------------------------
$FW -P INPUT DROP
$FW -P FORWARD DROP
$FW -P OUTPUT DROP

#---------------------------------------------------------------
# Allow all local connections via loopback.
#---------------------------------------------------------------
$FW -A INPUT  -i lo  -j ACCEPT
$FW -A OUTPUT -o lo  -j ACCEPT

#---------------------------------------------------------------
# Allow Multicast for local network.
#---------------------------------------------------------------
$FW -A INPUT  -j ACCEPT -p igmp -s $LCL -d 224.0.0.0/4 -i $local_interface
$FW -A OUTPUT -j ACCEPT -p igmp -s $LCL -d 224.0.0.0/4 -o $local_interface

#---------------------------------------------------------------
# UPnP uses IGMP multicast to find media servers.
# Accept IGMP broadcast packets.
# Send SSDP Packets.
#---------------------------------------------------------------
$FW -A INPUT  -j ACCEPT -p igmp -s $LCL -d 239.0.0.0/8  -i $local_interface
$FW -A OUTPUT -j ACCEPT -p udp  -s $LCL -d 239.255.255.250 --dport 1900  -o $local_interface

#---------------------------------------------------------------
# Allow all bidirectional traffic from your firewall to the
# local area network
#---------------------------------------------------------------
$FW -A INPUT  -j ACCEPT -s $LCL -i $local_interface
$FW -A OUTPUT -j ACCEPT -d $LCL -o $local_interface

#---------------------------------------------------------------
# Allow all bidirectional traffic from your firewall to the
# virtual privat network
#---------------------------------------------------------------

$FW -A INPUT  -j ACCEPT -i $virtual_interface
$FW -A OUTPUT -j ACCEPT -o $virtual_interface

#---------------------------------------------------------------
# Connection to VPN servers (UDP 443)
#---------------------------------------------------------------
server_count=${#servers[@]}
for (( c = 0; c < $server_count; c++ ))
do
    $FW -A INPUT  -j ACCEPT -p udp -s ${servers[c]} --sport 1194 -i $local_interface
    $FW -A OUTPUT -j ACCEPT -p udp -d ${servers[c]} --dport 1194 -o $local_interface
    $FW -A INPUT  -j ACCEPT -p tcp -s ${servers[c]} --sport 443 -i $local_interface
    $FW -A OUTPUT -j ACCEPT -p tcp -d ${servers[c]} --dport 443 -o $local_interface
done

#---------------------------------------------------------------
# Log all dropped packages, debug only.
# View in /var/log/syslog or /var/log/messages
#---------------------------------------------------------------
#iptables -N logging
#iptables -A INPUT -j logging
#iptables -A OUTPUT -j logging
#iptables -A logging -m limit --limit 2/min -j LOG --log-prefix "IPTables general: " --log-level 7
#iptables -A logging -j DROP


# Disable internet for "no-internet" user
#iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

আপনার টেবিল সেটআপ করতে হবে servers=()। কেবলমাত্র সেখানে আপনার পছন্দসই ভিপিএন সার্ভারের আইপি নির্দিষ্ট করুন।

স্ক্রিপ্টের শুরুতে অন্যান্য ভেরিয়েবলগুলি সঠিকভাবে সেট করা আছে কিনা তা পরীক্ষা করে দেখুন, অন্যথায় এটি আপনার পুরো সংযোগটি ব্লক করে দেবে।

এর সাথে iptables ব্যাকআপ তৈরি করতে ভুলবেন না:

sudo iptables-save > working.iptables.rules

(এর সাথে পুনরুদ্ধার sudo iptables-restore < working.iptables.rules)

এটি টিসিপি এবং ইউডিপি সংযোগগুলিকে সমর্থন করে, যদি আপনার কেবলমাত্র একটির প্রয়োজন হয় তবে for ()লুপ থেকে অযাচিত দুটি লাইন সরিয়ে ফেলুন । আপনার সরবরাহকারী একই বন্দর ব্যবহার করছেন কিনা তাও পরীক্ষা করে দেখুন - অন্যরকম হতে পারে।

ফে দিয়ে এই স্ক্রিপ্টটি চালান sudo /home/user/vpn.sh

আপনি যদি এটি বুটে লোড করতে চান (iptables সাধারণত পুনরায় বুটের পরে পুনরায় সেট করা হয়), আপনার /etc/rc.localফী লাইনে এই জাতীয় ফাইল যুক্ত করুন bash /home/user/vpn.sh


এর পরের অংশটি হ'ল ভিপিএন অটো-সংযোজক এবং মনিটর। এর জন্য এখানে আমার নিজস্ব বৈকল্পিকতা:

#!/bin/bash

# CONNECTIONS
# Those values can be checked by running `nmcli con show`

vpn=(
85e60352-9e93-4be4-8b80-f6aae28d3c94
)

# NUMBER OF CONNECTIONS
total=${#vpn[@]}

# SLEEP
amount=10 # number of seconds to wait after each connection checking cycle
countdown=true # enable/disable animated countdown
skip=1 # how many seconds to substract between each animated countdown iteration

# LOGS
dir='/home/user/logs-vpn' # directory for storing logs
name='vpn' # prefix/name for a log file
seperate=true # create a seperate log file for each init session or log to single file
init=false # log init event (with logging setup)
start=false # log vpn start event
yes=false # log connected events
no=false # log disconnected events

# STYLE
clean='\e[1A\033[K' # clean & move to previous line
default='\e[0m' # default
blink='\e[5m' # blinking (works only in couple terminals, e.g. XTerm or tty)
dim='\e[2m' # dim/half-bright
disconnected='\e[91m' # light red
connected='\e[92m' # light green
count='\e[94m' # light blue
reconnecting='\e[96m' # light cyan
initializing='\e[93m' # light yellow
connection='\e[1m\e[91m' # bold light red

# SETUP
time=$(date +"%Y-%m-%d_%H-%M-%S")
if $separate; then
    file="$dir/$time.log"
else
    file="$dir/$name.log"
fi

# RESET
reset # reset screen
tput civis -- invisible # disable cursor

# RE-TIME
time=$(date +"%Y.%m.%d %H:%M:%S")

# INITIALIZATION
if $init; then
    printf "$time INIT" >> $file
    if $yes; then
        printf " -y" >> $file
    fi
    if $no; then
        printf " -n" >> $file
    fi
    printf "\n" >> $file
fi

# START CONNECTION
con=$(nmcli con show --active | grep "  vpn")
if [[ $con == '' ]]; then

    if $start; then
        printf "$time START\n" >> $file
    fi

    time=$(date +"%H:%M:%S")
    echo -e "${dim}[$time]${default} ${initializing}INITIALIZING...${default}"
    echo ""
    echo ""

    random=$(((RANDOM % $total)-1))
    try=${vpn[$random]}

    (sleep 1s && nmcli con up uuid $try) >& /dev/null
    sleep 10s
fi

# LOOP
while [ "true" ]; do
        time=$(date +"%H:%M:%S")

        # CLEAN AFTER COUNTDOWN
        if $countdown; then
            echo -en $clean
            echo -en $clean
        fi

        # CHECK CONNECTION
        con=$(nmcli con show --active | grep "  vpn" | cut -f1 -d " ")

        if [[ $con == '' ]]; then
                if $no; then
                    printf "$time NO\n" >> $file
                fi
                echo -e "${dim}[$time]${default} ${disconnected}DISCONNECTED !!${default}"
                echo -e "${blink}${reconnecting}re-connecting ...${default}"

                random=$(((RANDOM % $total)-1))
                try=${vpn[$random]}

                (sleep 1s && nmcli con up uuid $try) >& /dev/null
        else
                if $yes; then
                    printf "$time YES\n" >> $file
                fi

                arr=(${con//./ })

                echo -en $clean
                echo -e "${dim}[$time]${default} ${connected}CONNECTED${default} (${connection}${arr[0]^^}${default})"
        fi

        # SLEEP
        if $countdown; then
            echo -e "${count}$amount${default}"
            for (( c=$amount; c>=1; c=c-$skip )); do
                echo -en $clean
                echo -e "${count}$c${default}"
                sleep $skip
            done
            echo -e "${count}0${default}"
        else
            sleep $amount
        fi
done

এটি শুরুতে স্বয়ংক্রিয়ভাবে সংযোগ স্থাপন করবে এবং প্রদত্ত বিরতি ( amount=1010 সেকেন্ডের ব্যবধান দেয়) দিয়ে আপনার সংযোগটি নিরীক্ষণ করবে এবং হারিয়ে যাওয়া সংযোগটি পুনরায় সংযোগ করবে। লগিং বৈশিষ্ট্য এবং অন্যান্য কিছু বিকল্প পেয়েছি।

আপনার সংযোগগুলি ইউইউডি ব্যবহার করছে কিনা তা পরীক্ষা করুন nmcli con showএবং আপনার পছন্দসইগুলি (ফায়ারওয়ালের সাথে আইপির সাথে মেলানো) vpn=()টেবিলটিতে যুক্ত করুন। যতবার না এলোমেলোভাবে এই টেবিলটিতে নির্দিষ্ট একটি সংযোগ নির্বাচন করবে।

আপনি এটিকে আপনার অটো-স্টার্টে যুক্ত করতে পারেন (সুডো প্রাইভেলিজের প্রয়োজন নেই)। টার্মিনালে এটি কীভাবে শুরু করবেন তা এখানে একটি উদাহরণ:

mate-terminal --command="/home/user/vpn-reconnect.sh"

... এবং এটি এখানে টার্মিনালে চলমান দেখায়:

এখানে চিত্র বর্ণনা লিখুন

... এবং এখানে আপনার ভিপিএন সংযোগ হ্রাস হওয়ার পরে লিক-প্রুফ পিংয়ের চেহারা কেমন দেখাচ্ছে তা এখানে:

এখানে চিত্র বর্ণনা লিখুন

উপভোগ করুন :)


1
বুটে স্ক্রিপ্টটি লোড করার বিষয়ে, আপনি কেবল ব্যবহার করবেন না কেন /etc/rc.local?
Andrea Lazzarotto

সুন্দর ধারণা (
মোহন

এটি দুর্দান্ত, আপনাকে অনেক ধন্যবাদ। এখনও জুলাই 2017 পর্যন্ত কাজ করার জন্য যাচাই করা হয়েছে
নরর

2

আমি ইউএফডাব্লু দিয়ে একটি সাধারণ ভিপিএন কিল সুইচ সেটআপ করতে সক্ষম হয়েছি। এটি আমার কাছে থাকা সমস্ত ভিপিএন নিয়ে কাজ করে।

এখানে আমার ufw সেটিংস:

sudo ufw default deny outgoing
sudo ufw default deny incoming`
sudo ufw allow out 443/tcp
sudo ufw allow out 1194/udp
sudo ufw allow out on tun0 from any to any port 80
sudo ufw allow out on tun0 from any to any port 53
sudo ufw allow out on tun0 from any to any port 67
sudo ufw allow out on tun0 from any to any port 68

আমার জন্য ঠিক কাজ করে :)


দেখতে ঠিক আছে, তবে sudo ufw allow out 443/tcpভিপিএন সংযুক্ত না থাকলে নিরাপদ ওয়েবসাইট ফাঁসের অনুমতি দেয় its আপনি কি থামাতে চান না? এজেএক্স বা ওয়েবসকেট সহ একটি এইচটিটিপিএস সাইটটি নিজেই কোনও জাভাস্ক্রিপ্ট টাইমারের মাধ্যমে পটভূমিতে পুনরায় সংযোগ করতে পারে।
অর্ধেক

0

আমি সমস্ত বিদায়ী ট্র্যাফিক ব্লক করতে ইউএফডাব্লু সেট আপ করে এবং তারপরে সমস্ত ভিপিএন নোডকে তাদের পৃথক আইপি ঠিকানাগুলি উল্লেখ করে হোয়াইট লিস্ট করে এই সমস্যার সমাধান করেছি। এটি যতটা শোনাচ্ছে ততটা নিখরচায় নয়: আমার অভিজ্ঞতার ভিপিএনগুলি তাদের বিভিন্ন আইপি ঠিকানাগুলি পেতে ডিএনএস লুকআপের ব্যবহারের অনুমতি দেয়।

আমি এটি করার জন্য একটি পিএইচপি প্রোগ্রাম লিখেছি, ufw-vpn নামে পরিচিত । আমি এটি কয়েক বছর ধরে ব্যবহার করেছি, সময়ের সাথে সাথে বিভিন্ন ছোট ছোট বর্ধিত কাজ রয়েছে। আপনার অবশ্যই পিএইচপি ইনস্টল করা প্রয়োজন, এবং গিট যদি আপনি এটি ডাউনলোড না করে এটি ক্লোন করতে চান তবে।

আপনি এটি উইজেট ব্যবহার করে দখল করতে পারেন:

cd /path/to/a/folder
wget https://github.com/halfer/ufw-vpn/archive/master.zip
unzip master.zip
cd ufw-vpn-master

তারপরে এটি ঠিক আছে কিনা তা পরীক্ষা করতে কমান্ডটি চালান (প্যারামিটার ছাড়াই কেবল একটি সিনট্যাক্স বার্তা দেয়):

php ufw-vpn.php

এখন ধরে নেওয়া, আপনার ভিপিএন এটি সমর্থন করে, আপনি কোনও অঞ্চলের সার্ভারের তালিকা পেতে একটি পুরোপুরি যোগ্য ডোমেন ব্যবহার করতে পারেন (আপনার সরবরাহকারীর ডকুমেন্টেশনে এটি সম্ভবত খুঁজে পেতে হবে বা তাদের সমর্থন বিভাগ থেকে):

php ufw-vpn.php earth.all.vpn.example.org add

এটি আপনাকে যোগ করার জন্য ফায়ারওয়াল নিয়মের একটি বড় তালিকা দেওয়া উচিত। এগুলি সহজে ইনস্টল করতে, আপনি কেবল এটি করতে পারেন:

php ufw-vpn.php earth.all.vpn.example.org add > add-rules.sh
chmod u+x add-rules.sh && sudo add-rules.sh

সময়ে সময়ে ভিপিএন সরবরাহকারীরা তাদের আইপি অ্যাড্রেস আপডেট করবে, সুতরাং আপনাকে ম্যাচ করার জন্য নিজের আপডেট করতে হবে। আপনি এটি একটি ভিন্ন মাধ্যমে করতে পারেন:

php ufw-vpn.php earth.all.vpn.example.org diff > diff-rules.sh
chmod u+x diff-rules.sh && sudo diff-rules.sh

ভিন্নতার জন্য, এটি কার্যকর করার আগে নিয়মগুলি পরীক্ষা করা মূল্যবান, কারণ এটি ভিপিএন-এর কোনও কিছুই মুছে ফেলবে না। সুতরাং, আপনার যদি কিছু কাস্টম বিধি থাকে, তবে এগুলি চালানোর আগে তাদের বাইরে নিয়ে যাওয়া দরকার।

রেপোতে আরও ডক্স পাওয়া যায় এবং এটি সমস্ত ওপেন সোর্স, তাই আপনি সুরক্ষা সমস্যার জন্য কোডটি পরীক্ষা করতে পারেন। বাগ রিপোর্ট এবং বৈশিষ্ট্য পরামর্শ খুব স্বাগত।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.