Jak zadbać o bezpieczeństwo aplikacji za VPN?

0

Cześć,
jako że w tematach VPN-a. nie jestem za bardzo zaawansowany, coś tam tylko liznąłem, mniej więcej wiem jak działa, ale chciałem Was podpytać jak najlepiej, a właściwie najbezpieczniej zrobić taki scenariusz:

  1. Istnienie monolitowa aplikacja back + front, do której chce mieć dostęp tylko poprzez VPN-a. Mam ją np. na jakimś VPS-ie. Chce aby każdy użytkownik który będzie miał jakiś wygenerowany np. plik certyfikatu, wrzuci sobie do apki (open vpn czy coś podobnego), połączy się i dopiero dostanie dostęp do aplikacji.
  2. Chce jak najbezpieczniej połączyć taką apkę z bazą danych, tak, żeby też nie było jej widać "ze świata"
  3. Chce mieć bezpieczne backupy bazy danych

Moje pytania są takie:

  1. Czy istnieją gotowe rozwiązania (płatne), na taką okazję i będą wymagać dla mnie minimalnego wysiłku do konfiguracji?
  2. Czy da się to zrobić po swojemu? Na dostęp do apki jako tako wyszperałem rozwiązanie, że pod VPN-owy serwer, najlepiej kupić VPS-a, tam skonfigurować, on będzie miał jakieś IP, a na VPS-ie z apką pozwolić na dostęp tylko poprzez IP VPS-a. W teorii spoko, ale co w takim wypadku z bazą danych?
  3. Czy zmienne środowiskowe są bezpiecznym miejscem do przechowywania pasów do bazki i nie tylko, jeśli np, nie używa, dockera, tylko po prostu sam ngnix/apache?
  4. Powiedzmy, że pkt.1 i 2 mam ze scenariusza, potrzebuje jakiegoś backupowania bazy danych - jak najbezpieczniej to zrobić?

Tak wiem, ze jestem nowy, ale piszę tutaj bo podejrzewam, że się znacie, liczę tylko, że nie dostanę odpowiedzi jak na elektrodzie :P Szukałem podobnych tematów, ale żaden mnie nie zadowolił pod względem odpowiedzi.

Pozdrawiam serdecznie

1

Ad 1: Poczytaj sobie o DMZ i jej konfiguracji jak i zastosowaniach. DMZ jest w pełni darmowa.
Ad 2. Da się. Dostęp do DB robisz dokładnie tak samo jak dostęp do apki; tj. via VPN.
Ad 3. To czy coś jest bezpieczne czy nie to decyduje stopień zabezpieczenia tego czegoś. Im więksy stopień tym coś bezpieczniejsze; aczkolwiek ja pasów nie wrzucałbym do zmiennych środowiskowych. Nawet (a może tym bardziej) w kontenerze.
Ad 4. Wykup sobie jakiś tani dedyk typowo pod backupy, skonfiguruj tam kopie po rsync i powinno styknąć.

nie dostanę odpowiedzi jak na elektrodzie

Nie dostaniesz; spokojnie 😀

0

Bardzo dziękuje za odpowiedź.
Mam pytanie w takim razie do Ad.3 , w jaki sposób polecasz trzymanie takich danych?

0

Jeśli to Linux, to możesz skorzystać z namespaceów linuxowych, które odseparują Ci zasoby. Do tego funkcjonalność virtualnych urządzeń ethernet (veth) i masz separacje sieciową.

https://blog.quarkslab.com/digging-into-linux-namespaces-part-1.html
https://blog.quarkslab.com/digging-into-linux-namespaces-part-2.html

Poglądowo:

# Utwórz namespacy  dla AppA i AppB 
sudo ip netns add AppA
sudo ip netns add AppB

# Utwórz parę veth 
sudo ip link add vethA type veth peer name vethB

# Dołącz parę veth do namespace: AppA i AppB 
sudo ip link set vethA netns AppA
sudo ip link set vethB netns AppB

# Skonfiguruj interfejsy wewnątrz namespaców 
sudo ip netns exec AppA ip addr add 192.168.1.1/24 dev vethA
sudo ip netns exec AppB ip addr add 192.168.1.2/24 dev vethB

# Podnieś interfejsy 
sudo ip netns exec AppA ip link set vethA up
sudo ip netns exec AppB ip link set vethB up

# Podnieś loopbacka w AppA/AppB namespace 
sudo ip netns exec AppA ip link set lo up
sudo ip netns exec AppB ip link set lo up

# Włącz forwardowanie portów i ustaw NAT 
sudo sysctl -w net.ipv4.ip_forward=1

# NAT dla ruchu wychodzącego z virtualnych interfejsów
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o <Publiczny interfejs> -j MASQUERADE

# Ruch przychodzący przekierowujemy do interfejsu vethA
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1:80
sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j DNAT --to-destination 192.168.1.1:443

# Akceptujemy ruch przychodzący 
sudo iptables -A FORWARD -p tcp -d 192.168.1.1 --dport 80 -j ACCEPT
sudo iptables -A FORWARD -p tcp -d 192.168.1.1 --dport 443 -j ACCEPT


# Uruchom aplikacja w odpowiednich namaspacach
# Aplikacja i baza powinny być skonfigurowane, tak by nasłuchiwały na interfejsach virtualnych.
sudo ip netns exec AppB <komenda podnosząca bazę>
sudo ip netns exec AppA <komenda opdnosząca apkę>

Namespace nie są persystentne, więc trzeba by to dorzucić do skryptów rozruchowych serwera.

Backup bazy możesz robić z crona i pchać do s3 bucket (albo jakiś inny dedykowany storage).

Jeśli chcesz dalej się bawić, to w powyższym zamiast <Publiczny interfejs>, robisz interfejs VPNa, no i konfigurujesz serwer VPN na swoim boxie.
W takim ustawieniu, ruch na interfejs VPNa będzie forwardowany do interfejsu w namespace aplikacji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1