• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Network hardening with Mullvad VPN on a Debian-based VPS

Нетспайдер

ripper
КИДАЛА
Регистрация
28.08.2024
Сообщения
32
Реакции
5
Пожалуйста, обратите внимание, что пользователь заблокирован
The first thing I did was consider the possibility of hiding and securing the IP of my work VPS for reconnaissance on targets, so I paid for a Kali Linux VPS (based on Debian). They gave me the public IP of my VPS and port 22 to connect to it via SSH.
Investigating a little about how to run mullvad vpn on my vps without affecting the already configured connections (so that it doesn't disconnect me from ssh, rdp and other services to manage my vps), I found the following issue on the official mullvad site on github: https://github.com/mullvad/mullvadvpn-app/issues/6758 and this post: https://xel.sh/blog/mullvad-ssh
Based on these, I set to work to achieve the network workflow I wanted.

  • I bought two mullvad accounts using Tor browser, paid with XMR and saved my access keys.
  • I configured SSH and RDP on non-common ports, other than 22, 2222 for ssh or 3389 or 3390 for RDP and i added them to the rules to exclude SSH and RDP traffic from the VPN tunnel and made it persistent so as not to lose remote access.
  • I installed nftables and made a complete script to only configure the routes and nftables persistently, which would be executed at system startup (in case the VPS is turned off or restarted, access is not lost if mullvad does not start automatically) these configurations remain persistent, make sure to change the ports to the ones you use in the rules.

You must manage Mullvad manually by typing: mullvad connect, mullvad login "key" from your console or by RDP from the app-gui by RDP.
When connecting Mullvad to one of the servers, the public IP of your VPS will be inaccessible, if you ping it you will not get a response, if you enter it in the Shodan search engine it will not appear, only the Mullvad IP will mask the public IP of your VPS, you can check it by doing: curl ifconfig.me, but you will be able to connect to your VPS through the ports previously configured for SSH and RDP using your public VPS IP, ex: ssh -p 47320 user@<ipvps>, the same for RDP

apt update
sudo apt install -y nftables
Routes and nftables configurations will be persistent and automatic at system startup to not kill remote connections (always active). Connecting and disconnecting Mullvad within the VPS is handled manually.
The script It automatically creates all the necessary configurations for this, detects the gateway and interface, adds the sshroute table to rt_tables if it doesn't exist, adds ip rule and ip route rules, adjusts nftables to mark ports 47320 (SSH) and 47650 (RDP) -The ones I configured, change them to yours.

Save the following script in /usr/local/bin/ with:
nano /usr/local/bin/mullvad_routing_setup.sh

#!/usr/bin/env bash
set -e

GATEWAY=$(ip route show default | awk '/default/ {print $3}')
INTERFACE=$(ip route show default | awk '/default/ {print $5}')

RT_TABLES="/etc/iproute2/rt_tables"
TABLE_NAME="sshroute"
TABLE_ID=100
if ! grep -q "$TABLE_NAME" "$RT_TABLES" 2>/dev/null; then
echo "$TABLE_ID $TABLE_NAME" | tee -a "$RT_TABLES" >/dev/null
fi

ip rule add fwmark 0x6d6f6c65 table sshroute || true
ip route add default via $GATEWAY dev $INTERFACE table sshroute || true

NFT_CONF="/etc/nftables.conf"
if [ ! -f "$NFT_CONF.bak" ]; then
cp "$NFT_CONF" "$NFT_CONF.bak"
fi

cat > "$NFT_CONF" <<EOF
table inet excludeTraffic {
chain allowIncoming {
type filter hook input priority -100; policy accept;
tcp dport {47320, 47650} ct mark set 0x00000f41 meta mark set 0x6d6f6c65;
}
chain allowOutgoing {
type route hook output priority -100; policy accept;
tcp sport {47320, 47650} meta mark set 0x6d6f6c65;
}
}
EOF

systemctl restart nftables.service

Make it executable:
sudo chmod +x /usr/local/bin/mullvad_routing_setup.sh

Run:
./mullvad_routing_setup.sh

Create a systemd service to run at startup, edit and save:
nano /etc/systemd/system/mullvad-routing.service

Paste this:
[Unit]
Description=Configure routes and nftables for SSH and RDP ports
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mullvad_routing_setup.sh
[Install]
WantedBy=multi-user.target

Activate it with:
sudo systemctl daemon-reload

sudo systemctl enable mullvad-routing.service

sudo systemctl start mullvad-routing.service

Connect Mullvad VPN manually with the command or enter via RDP and from the mullvad app:
command in console:

mullvad connect [options]

Disconnect it with:

mullvad disconnect
The system will always have routing and nftables configured so that your SSH (47320) and RDP (47650) ports go out through the special table. Mullvad connect and disconnect manually whenever you want. Routes and nftables will be ready and persistent by the time Mullvad is active.

This first step is ready, you can now work from the VPS making all traffic go through the mullvad VPN, you can check it by doing curl ifconfig.me (You will see a different IP than your VPS, you will be able to connect to the servers you want by location or country in mullvad and the IP of your VPS will only be accessible to you.

After some more thought, the idea of manually connecting the VPN to another location to continue my reconnaissance every time I get restricted from that IP (if a firewall or whatever blocks the current IP I’m using for that purpose) seemed quite annoying, so I looked into using another VPN, since my VPS is already secure through the first Mulllvad connection, but I want the traffic to go out through other IPs, not the first VPN that masks my VPS IP, so I made another script for that

I called this other script subnet, since it creates virtual hosts and isolated namespaces so as not to affect the connection of the main VPN and to perform the reconnaissance on the second VPN.

First I entered the account of the second mullvad vpn that I paid for, I tried with the openvpn confs, but for some reason I couldn't connect, so I modified it to use the mullvad wireguard configurations, I downloaded them, unzipped them and saved them in the working directory to use the script, in my case: /opt/Mvad_relay-listwire, in the script you must change this directory to yours and change the host and nameserver ip to yours

Edit and save the script in /usr/local/bin/ to use it globally:
nano /usr/local/bin/subnet

Give it permissions:
chmod +x /usr/local/bin/subnet

#!/bin/bash
# ------------------------------------------------------------------
# subnet-recon - Professional reconnaissance tool with rotating VPN
# ------------------------------------------------------------------

# Configuration
NAMESPACE="mproxy"
VETH_HOST="veth-host"
VETH_NS="veth-ns"
IP_HOST="10.20.20.1"
IP_NS="10.20.20.2"
WG_CONF_DIR="/opt/Mvad_relay-listwire"
MAX_ATTEMPTS=3
LOG_DIR="/var/log/subnet-recon"
CURRENT_CONF=""
TIMEOUT=20 # Seconds for VPN attempt

# Network initialization
init_network() {
# Limpieza previa
ip netns del $NAMESPACE 2>/dev/null
ip link del $VETH_HOST 2>/dev/null

# Crear namespace
ip netns add $NAMESPACE || { echo "[-] Error when create namespace"; exit 1; }


# Configure interfaces
ip link add $VETH_HOST type veth peer name $VETH_NS
ip link set $VETH_NS netns $NAMESPACE

# Configure IPs
ip addr add $IP_HOST/24 dev $VETH_HOST
ip link set $VETH_HOST up
ip netns exec $NAMESPACE ip addr add $IP_NS/24 dev $VETH_NS
ip netns exec $NAMESPACE ip link set veth-ns up
ip netns exec $NAMESPACE ip link set lo up
ip netns exec $NAMESPACE ip route add default via $IP_HOST

# NAT & DNS
sysctl -w net.ipv4.ip_forward=1 >/dev/null
iptables -t nat -A POSTROUTING -s $IP_NS/24 -o $(ip route | grep default | awk '{print $5}') -j MASQUERADE
mkdir -p /etc/netns/$NAMESPACE
echo -e "nameserver 93.38.2.74\nnameserver 1.1.1.1" > /etc/netns/$NAMESPACE/resolv.conf
}

# Intelligent VPNS rotation
rotate_vpn() {
local attempts=0
local vpn_list=($(ls $WG_CONF_DIR/*.conf | shuf))

for CONF in "${vpn_list[@]}"; do
echo "[+] Probando: $(basename "$CONF")" | tee -a $LOG_FILE

# Stop previous VPN
[ -n "$CURRENT_CONF" ] && ip netns exec $NAMESPACE wg-quick down "$CURRENT_CONF" 2>/dev/null

# Try to connection with Timeout
if timeout $TIMEOUT ip netns exec $NAMESPACE wg-quick up "$CONF" &>> $LOG_FILE; then
if ip netns exec $NAMESPACE curl -4s --max-time 5 https://am.i.mullvad.net/connected &>> $LOG_FILE; then
CURRENT_CONF="$CONF"
CURRENT_IP=$(ip netns exec $NAMESPACE curl -4s ifconfig.me)
echo "[✓] VPN activa: $(basename "$CONF") (IP: $CURRENT_IP)" | tee -a $LOG_FILE
return 0
fi
fi

ip netns exec $NAMESPACE wg-quick down "$CONF" 2>/dev/null
((attempts++))
[ $attempts -ge $MAX_ATTEMPTS ] && break
done

return 1
}

# Encapsulated execution
run_command() {
local cmd="$@"
local timestamp=$(date +"%Y%m%d_%H%M%S")
local output_file="$LOG_DIR/output_${timestamp}.log"

echo "[→] Ejecutando: $cmd" | tee -a $LOG_FILE
ip netns exec $NAMESPACE $cmd | tee -a "$output_file"
return ${PIPESTATUS[0]}
}

# Professional cleaning
cleanup() {
echo "[+] Limpiando recursos..." | tee -a $LOG_FILE
[ -n "$CURRENT_CONF" ] && ip netns exec $NAMESPACE wg-quick down "$CURRENT_CONF" 2>/dev/null
ip netns del $NAMESPACE 2>/dev/null
rm -rf "/etc/netns/$NAMESPACE"
}
trap cleanup EXIT INT TERM

# ------------------------------------------------------------------
# Main execution
# ------------------------------------------------------------------

# Log settings
mkdir -p "$LOG_DIR"
LOG_FILE="$LOG_DIR/subnet-recon_$(date +"%Y%m%d").log"

# Validation of arguments
if [ $# -eq 0 ]; then
echo "Uso: $0 <comando> [opciones]"
echo "Examples:"
echo " $0 nmap -sV -Pn example.com"
echo " $0 curl ifconfig.me"
echo " $0 auto-recon (Automatic mode with periodic rotation)"
exit 1
fi

# Operation mode
init_network

if [ "$1" == "auto-recon" ]; then

# Automatic mode with continuous rotation
while true; do
if rotate_vpn; then
run_command "${@:2}"
sleep $(( RANDOM % 600 + 900 )) # Wait 15-25 minutes (900-1500 seconds)
else
echo "[-]Critical failure in VPN rotation" | tee -a $LOG_FILE
exit 1
fi
done
else

# Unique command mode
if rotate_vpn; then
run_command "$@"
else
echo "[-]Connection could not be established VPN" | tee -a $LOG_FILE
exit 1
fi
fi

If everything is configured correctly you can test it in the following way: subnet curl ifconfig.me, it will show you a different IP than the one that the first mullvad VPN has, it is the second mask, also if you use the auto-recon command in the script, it will rotate every 15-20 minutes to other servers automatically connecting to other locations to continue with the recon in case it blacklistens that IP due to the amount of requests made by tools like nmap, etc.

The commands: subnet nmap ----- subnet nikto ------ subnet auto-recon nmap can be run in each terminal individually, the script will automatically select the servers to which it will connect to run the requested command and once it finishes running the requested command it is automatically cleaned.
Example: In shell 1 command subnet nmap with output to Portugal

Example: In shell 2, subnet nmap command with output to Japan

Example shell 1:

subnet curl https://am.i.mullvad.net/connected

[+] Testing: gb-mnc-wg-003.conf

[✓] VPN activa: gb-mnc-wg-003.conf (IP: 16.70.12.10)

[→] Running: curl https://am.i.mullvad.net/connected

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 87 100 87 0 0 164 0 --:--:-- --:--:-- --:--:-- 164

You are connected to Mullvad (server gb-mnc-wg-003). Your IP address is 16.70.12.10

[+] Cleaning up resources...


Example shell 2:

#subnet curl https://am.i.mullvad.net/connected

[+] Testing: fi-hel-wg-003.conf

[✓] VPN activa: fi-hel-wg-003.conf (IP: 15.24.1.221)

[→] Running: curl https://am.i.mullvad.net/connected

% Total % Received % Xferd Average Speed Time Time Time Current

Dload Upload Total Spent Left Speed

100 86 100 86 0 0 140 0 --:--:-- --:--:-- --:--:-- 140

You are connected to Mullvad (server fi-hel-wg-003). Your IP address is 15.24.1.221

[+] Cleaning up resources...

FLOWCHART:



┌────────────────────┐

│ Public VPS │

│ 16.21.66.X │

└────────┬───────────┘




┌────────────────────┐

│ VPN1: WireGuard │

│ wg0: 16.70.14.X │

└────────┬───────────┘





┌───────────────────────────┐

│ Using command: subnet <command>

└────────┬──────────────────┘




┌────────────────────┐

│ VPN2 (namespace) │

│ 13.136.17.X │

└────────────────────┘

Hardening SSH and RDP or configure an firewall is easy, I won't do writeups on that for now. I hope it helps you.

Thanks for reading
 
Последнее редактирование модератором:
нормально оформи?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
читать невозможно, оформи адекватно, а так тема важная
Готово, проверьте это
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пишите пожалуйста на русском есть для этого ИИ. Многим тяжело читать английский и просто скипнут
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Пишите пожалуйста на русском есть для этого ИИ. Многим тяжело читать английский и просто скипнут
Первым делом я рассмотрел возможность скрытия и защиты IP-адреса моего рабочего VPS для разведки целей, поэтому я оплатил Kali Linux VPS (на базе Debian). Мне предоставили публичный IP-адрес моего VPS и порт 22 для подключения к нему через SSH.

Немного изучив, как запустить mullvad vpn на моем vps, не затрагивая уже настроенные соединения (чтобы не отключить меня от ssh, rdp и других сервисов для управления моим vps), я нашел следующую проблему на официальном сайте mullvad на github: https://github.com/mullvad/mullvadvpn-app/issues/6758 и этот пост: https://xel.sh/blog/mullvad-ssh

Основываясь на этом, я приступил к работе, чтобы добиться желаемого сетевого рабочего процесса.


Я купил две учетные записи Mullvad с помощью браузера Tor, оплатил их XMR и сохранил свои ключи доступа.

Я настроил SSH и RDP на нестандартных портах, отличных от 22, 2222 для ssh или 3389 или 3390 для RDP, добавил их в правила, чтобы исключить трафик SSH и RDP из VPN-туннеля, и сделал его постоянным, чтобы не потерять удаленный доступ.

Я установил nftables и создал полный скрипт, чтобы только настроить маршруты и nftables постоянно, который будет выполняться при запуске системы (в случае, если VPS выключен или перезапущен, доступ не теряется, если mullvad не запускается автоматически) эти настройки остаются постоянными, убедитесь, что вы изменили порты на те, которые вы используете в правилах.

Вы должны управлять Mullvad вручную, набрав: mullvad connect, mullvad login «key» из консоли или через RDP из app-gui.

При подключении Mullvad к одному из серверов публичный IP-адрес вашего VPS будет недоступен, если вы выполните ping, вы не получите ответа, если вы введете его в поисковую систему Shodan, он не появится, только IP-адрес Mullvad будет маскировать публичный IP-адрес вашего VPS, вы можете проверить это, выполнив: curl ifconfig.me, но вы сможете подключиться к вашему VPS через порты, ранее настроенные для SSH и RDP, используя ваш публичный IP VPS, например: ssh -p 47320 user@<ipvps>, то же самое для RDP



apt update

sudo apt install -y nftables



Конфигурации маршрутов и nftables будут постоянными и автоматическими при запуске системы, чтобы не прерывать удаленные соединения (всегда активные). Подключение и отключение Mullvad в VPS осуществляется вручную.

Скрипт Он автоматически создает все необходимые для этого конфигурации, обнаруживает шлюз и интерфейс, добавляет таблицу sshroute в rt_tables, если она не существует, добавляет правила ip rule и ip route, настраивает nftables для маркировки портов 47320 (SSH) и 47650 (RDP) - те, которые я настроил, замените их на свои.



Сохраните следующий скрипт в /usr/local/bin/ с помощью:
nano /usr/local/bin/mullvad_routing_setup.sh

#!/usr/bin/env bash
set -e

GATEWAY=$(ip route show default | awk „/default/ {print $3}“)
INTERFACE=$(ip route show default | awk „/default/ {print $5}“)

RT_TABLES=«/etc/iproute2/rt_tables»
TABLE_NAME="sshroute"
TABLE_ID=100
if ! grep -q «$TABLE_NAME» «$RT_TABLES» 2>/dev/null; then
echo «$TABLE_ID $TABLE_NAME» | tee -a «$RT_TABLES» >/dev/null
fi

ip rule add fwmark 0x6d6f6c65 table sshroute || true
ip route add default via $GATEWAY dev $INTERFACE table sshroute || true

NFT_CONF=«/etc/nftables.conf»
if [ ! -f «$NFT_CONF.bak» ]; then
cp «$NFT_CONF» «$NFT_CONF.bak»
fi

cat > «$NFT_CONF» <<EOF
table inet excludeTraffic {
chain allowIncoming {
type filter hook input priority -100; policy accept;
tcp dport {47320, 47650} ct mark set 0x00000f41 meta mark set 0x6d6f6c65;
}
chain allowOutgoing {
type route hook output priority -100; policy accept;
tcp sport {47320, 47650} meta mark set 0x6d6f6c65;
}
}
EOF

systemctl restart nftables.service


Сделайте его исполняемым:
sudo chmod +x /usr/local/bin/mullvad_routing_setup.sh

Запустите:
./mullvad_routing_setup.sh

Создайте службу systemd для запуска при старте системы, отредактируйте и сохраните:
nano /etc/systemd/system/mullvad-routing.service

Вставьте следующее:
[Unit]
Description=Configure routes and nftables for SSH and RDP ports
After=network.target
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mullvad_routing_setup.sh
[Install]
WantedBy=multi-user.target


Активируйте его с помощью:

sudo systemctl daemon-reload
sudo systemctl enable mullvad-routing.service
sudo systemctl start mullvad-routing.service


Подключите Mullvad VPN вручную с помощью команды или войдите через RDP и из приложения mullvad:

команда в консоли:
mullvad connect [опции]

Отключите его с помощью:
mullvad disconnect


Система всегда будет иметь настроенные маршрутизацию и nftables, чтобы ваши порты SSH (47320) и RDP (47650) выходили через специальную таблицу. Mullvad подключается и отключается вручную, когда вы хотите. Маршруты и nftables будут готовы и сохранятся к моменту активации Mullvad.


Первый шаг готов, теперь вы можете работать с VPS, направляя весь трафик через VPN Mullvad. Вы можете проверить это, выполнив curl ifconfig.me (вы увидите IP-адрес, отличный от вашего VPS, вы сможете подключаться к нужным серверам по местоположению или стране в Mullvad, а IP-адрес вашего VPS будет доступен только вам.


После некоторого раздумья идея вручную подключать VPN к другому местоположению, чтобы продолжить разведку каждый раз, когда я получаю ограничение от этого IP (если брандмауэр или что-то еще блокирует текущий IP, который я использую для этой цели), показалась мне довольно раздражающей, поэтому я решил использовать другой VPN, поскольку мой VPS уже защищен первым соединением Mulllvad, но я хочу, чтобы трафик проходил через другие IP-адреса, а не через первый VPN, который маскирует IP-адрес моего VPS, поэтому я создал для этого другой скрипт.


Я назвал этот другой скрипт subnet, поскольку он создает виртуальные хосты и изолированные пространства имен, чтобы не влиять на соединение основного VPN и выполнять разведку на втором VPN.


Сначала я ввел учетную запись второго mullvad vpn, за который я заплатил, я попробовал с openvpn confs, но по какой-то причине не смог подключиться, поэтому я изменил его, чтобы использовать конфигурации mullvad wireguard, я скачал их, распаковал и сохранил в рабочем каталоге, чтобы использовать скрипт, в моем случае: /opt/Mvad_relay-listwire, в скрипте вы должны изменить этот каталог на свой и изменить IP-адрес хоста и сервера имен на свой



Отредактируйте и сохраните скрипт в /usr/local/bin/, чтобы использовать его глобально:
nano /usr/local/bin/subnet


Предоставьте ему права:
chmod +x /usr/local/bin/subnet


#!/bin/bash
# ------------------------------------------------------------------
# subnet-recon - Профессиональный инструмент разведки с ротацией VPN
# ------------------------------------------------------------------

# Конфигурация
NAMESPACE="mproxy"
VETH_HOST="veth-host"
VETH_NS="veth-ns"
IP_HOST="10.20.20.1"
IP_NS="10.20.20.2"
WG_CONF_DIR=«/opt/Mvad_relay-listwire»
MAX_ATTEMPTS=3
LOG_DIR="/var/log/subnet-recon"
CURRENT_CONF=""
TIMEOUT=20 # Секунды для попытки VPN

# Инициализация сети
init_network() {
# Предварительная очистка
ip netns del $NAMESPACE 2>/dev/null
ip link del $VETH_HOST 2>/dev/null

# Создание пространства имен
ip netns add $NAMESPACE || { echo «[-] Ошибка при создании пространства имен»; exit 1; }

# Настройка интерфейсов
ip link add $VETH_HOST type veth peer name $VETH_NS
ip link set $VETH_NS netns $NAMESPACE

# Настройка IP-адресов
ip addr add $IP_HOST/24 dev $VETH_HOST
ip link set $VETH_HOST up
ip netns exec $NAMESPACE ip addr add $IP_NS/24 dev $VETH_NS
ip netns exec $NAMESPACE ip link set veth-ns up
ip netns exec $NAMESPACE ip link set lo up
ip netns exec $NAMESPACE ip route add default via $IP_HOST

# NAT и DNS
sysctl -w net.ipv4.ip_forward=1 >/dev/null
iptables -t nat -A POSTROUTING -s $IP_NS/24 -o $(ip route | grep default | awk „{print $5}“) -j MASQUERADE
mkdir -p /etc/netns/$NAMESPACE
echo -e «nameserver 93.38.2.74\nnameserver 1.1.1.1» > /etc/netns/$NAMESPACE/resolv.conf
}

# Интеллектуальная ротация VPN
rotate_vpn() {
local attempts=0
local vpn_list=($(ls $WG_CONF_DIR/*.conf | shuf))

for CONF in «${vpn_list[@]}»; do
echo «[+] Probing: $(basename »$CONF«)» | tee -a $LOG_FILE

# Остановить предыдущий VPN
[ -n «$CURRENT_CONF» ] && ip netns exec $NAMESPACE wg-quick down «$CURRENT_CONF» 2>/dev/null

# Попытаться подключиться с тайм-аутом
if timeout $TIMEOUT ip netns exec $NAMESPACE wg-quick up «$CONF» &>> $LOG_FILE; then
if ip netns exec $NAMESPACE curl -4s --max-time 5 https://am.i.mullvad.net/connected &>> $LOG_FILE; then
CURRENT_CONF=«$CONF»
CURRENT_IP=$(ip netns exec $NAMESPACE curl -4s ifconfig.me)
echo «[✓] VPN active: $(basename »$CONF«) (IP: $CURRENT_IP)» | tee -a $LOG_FILE
return 0
fi
fi

ip netns exec $NAMESPACE wg-quick down «$CONF» 2>/dev/null
((attempts++))
[ $attempts -ge $MAX_ATTEMPTS ] && break
done

return 1
}

# Инкапсулированное выполнение
run_command() {
local cmd="$@"
local timestamp=$(date +«%Y%m%d_%H%M%S»)
local output_file="$LOG_DIR/output_${timestamp}.log"

echo «[→] Выполнение: $cmd» | tee -a $LOG_FILE
ip netns exec $NAMESPACE $cmd | tee -a «$output_file»
return ${PIPESTATUS[0]}
}

# Профессиональная очистка
cleanup() {
echo «[+] Очистка ресурсов...» | tee -a $LOG_FILE
[ -n «$CURRENT_CONF» ] && ip netns exec $NAMESPACE wg-quick down «$CURRENT_CONF» 2>/dev/null
ip netns del $NAMESPACE 2>/dev/null
rm -rf «/etc/netns/$NAMESPACE»
}
trap cleanup EXIT INT TERM

# --------------------------------- ---------------------------------
# Основное выполнение
# ------------------------------------------------------------------

# Настройки журнала
mkdir -p «$LOG_DIR»
LOG_FILE="$LOG_DIR/subnet-recon_$(date +"%Y%m%d«).log»

# Проверка аргументов
if [ $# -eq 0 ]; then
echo «Использование: $0 <команда> [опции]»
echo «Примеры:»
echo « $0 nmap -sV -Pn example.com»
echo « $0 curl ifconfig.me»
echo « $0 auto-recon (Автоматический режим с периодической ротацией)»
exit 1
fi

# Режим работы
init_network
if [ «$1» == «auto-recon» ]; then

# Автоматический режим с непрерывной ротацией
while true; do
if rotate_vpn; then
run_command «${@:2}»
sleep $(( RANDOM % 600 + 900 )) # Подождите 15-25 минут (900-1500 секунд)
else
echo «[-]Критическая ошибка в ротации VPN» | tee -a $LOG_FILE
exit 1
fi
done
else

# Уникальный режим команды
if rotate_vpn; then
run_command «$@»
else
echo «[-]Не удалось установить соединение VPN» | tee -a $LOG_FILE
exit 1
fi
fi


Если все настроено правильно, вы можете проверить это следующим образом: subnet curl ifconfig.me, он покажет вам IP-адрес, отличный от того, который имеет первый VPN Mullvad, это вторая маска, также, если вы используете команду auto-recon в скрипте, он будет автоматически переключаться каждые 15-20 минут на другие серверы, подключаясь к другим местоположениям, чтобы продолжить рекон, в случае, если этот IP-адрес будет занесен в черный список из-за количества запросов, сделанных такими инструментами, как nmap и т. д.

Команды: subnet nmap ----- subnet nikto ------ subnet auto-recon nmap могут запускаться в каждом терминале по отдельности, скрипт автоматически выберет серверы, к которым он подключится для запуска запрошенной команды, и после завершения выполнения запрошенной команды он автоматически очищается.

Пример: В оболочке 1 команда subnet nmap с выводом в Португалию

Пример: В оболочке 2, команда subnet nmap с выводом в Японию

Пример оболочки 1:

subnet curl https://am.i.mullvad.net/connected

[+] Тестирование: gb-mnc-wg-003.conf

[✓] VPN активна: gb-mnc-wg-003.conf (IP: 16.70.12.10)

[→] Выполнение: curl https://am.i.mullvad.net/connected

% Всего % Получено % Передано Средняя скорость Время Время Время Текущее

Загрузка Выгрузка Всего Использовано Осталось Скорость

100 87 100 87 0 0 164 0 --:- -:-- --:--:-- --:--:-- 164

Вы подключены к Mullvad (сервер gb-mnc-wg-003). Ваш IP-адрес: 16.70.12.10

[+] Очистка ресурсов...

Пример оболочки 2:

#subnet curl https://am.i.mullvad.net/connected

[+] Тестирование: fi-hel-wg-003.conf

[✓] VPN активен: fi-hel-wg-003.conf (IP: 15.24.1.221)

[→] Выполнение: curl https://am.i.mullvad.net/connected

% Всего % Получено % Передано Средняя скорость Время Время Время Текущее

Загрузка Выгрузка Всего Использовано Осталось Скорость

100 86 100 86 0 0 140 0 --:--:-- --:--:-- --:--:-- 140

Вы подключены к Mullvad (сервер fi-hel-wg-003). Ваш IP-адрес: 15.24.1.221

[+] Очистка ресурсов...


БЛОК-СХЕМА:

┌────────────────────┐

│ Публичный VPS │

│ 16.21.66.X │

└────────┬───────────┘


┌────────────────────┐

│ VPN1: WireGuard │
│ wg0: 16.70.14.X │

└────────┬───────────┘


┌───────────────────────────┐

│ Использование команды: subnet <команда>

└────────┬──────────────────┘


┌────────────────────┐

│ VPN2 (пространство имен)│

│ 13.136.17.X │

└────────────────────┘


Усиление безопасности SSH и RDP или настройка брандмауэра — это легко, я пока не буду писать об этом. Надеюсь, это вам поможет.

Спасибо за чтение.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх