Nowe posty

Autor Wątek: OpenVPN - ograniczanie ruchu  (Przeczytany 7084 razy)

ziemson

  • Gość
OpenVPN - ograniczanie ruchu
« dnia: 2011-12-11, 21:26:18 »
Witam, mam działający serwer OpenVPN. Utworzyłem kilka podsieci:
Kod:

client-to-client
push "route 10.8.1.0 255.255.255.0"             ;administarorzy
push "route 10.8.101.0 255.255.255.0"          ;serwis
push "route 10.6.0.0 255.255.255.0"             ;klienci
push "route 10.9.0.0 255.255.255.0"              ;podsieć klientów
Chciałbym teraz nieco ograniczyć możliwości poszczególnych klientów. Chciałbym aby administratorzy mieli dostęp do wszystkich klientów. Natomiast klienci z podsieci 10.6.0.0 nie powinni mieć dostępu miedzy sobą ani do innych podsieci. Przez dostęp rozumiem np. zdalny pulpit, VNC, ICMP itp.

moja konfiguracja iptables:
Kod:
#!/bin/sh
iptables -F
iptables -X
iptables -t nat -X
iptables -t nat -F
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
iptables -A FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED
# ICMP
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
# OPENVPN
iptables -A INPUT -m state --state NEW -m udp -p udp --dport 1194 -j ACCEPT
# SSH
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
# FTP
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 12000:12003 -j ACCEPT
Próbowałem z regułami typu:
Kod:
iptables -A FORWARD -i tun0 -s 10.6.0.0/24 -d 10.9.0.0/24 -j DROP
iptables -A FORWARD -i tun0 -s 10.6.0.0/24 -d 10.6.0.0/24 -j DROP
ale to chyba nie tędy droga.

Z góry dzięki za pomoc i każdą wskazówkę.

mikodoom

  • Gość
OpenVPN - ograniczanie ruchu
« Odpowiedź #1 dnia: 2011-12-13, 12:32:14 »
Witaj,

Jak się wydaje, rozwiązaniem powinna być konfiguracja 'ccd', tzn. zdefiniowanie w pliku tekstowym, które pule adresowe są przypisane do jakiego klienta ( wiem, że to uciążliwe, jak masz powyżej 20 klientów, gdyż dla każdego certyfikatu musisz wygenerować osobny plik w katalogu 'ccd'. No chyba, że używasz opcji 'duplicate-cn', czyli współdzielisz certyfikat wśród klientów ).

Przykładowy plik w katalogu 'ccd' wygląda tak :

ifconfig-push 192.168.80.5 192.168.80.6
push "route network mask"
push "route network mask"
push "dhcp-option DNS ip address"

gdzie network : 10.8.1.0
oraz mask : 255.255.255.0

'192.168.80.5 192.168.80.6' - to jest adres, jaki dostaje klient w połączeniu VPN, to jest podział dla sieci 192.168.80.0/24 - OpenVPN dzieli to na sieci z maską /30 ( czyli 4 adresy w sieci, 2 użyteczne ).

U mnie jest tak ( zrzut z 'ip a s' ) :

inet 192.168.80.1 peer 192.168.80.2/32 scope global tun0

więc następna sieć to 192.168.80.3/30.

Dostępne adresy dla OpenVPN można sprawdzić ( przynajmniej w Windows ) za pomocą polecenia :

openvpn --show-valid-subnets
Nie wiem, czy mniej więcej o to chodzi. Ew. będziemy myśleć dalej.

Pozdrawiam,

MikoDoom

ziemson

  • Gość
OpenVPN - ograniczanie ruchu
« Odpowiedź #2 dnia: 2011-12-13, 16:27:48 »
Dzięki!:) Wieczorem sprawdzę Twoją podpowiedź.

Z tworzeniem ccd dla każdego klienta nie ma problemu, bo i tak to robię. Każdemu klientowi przydzielam w ten sposób stały adres IP. Dodatkowo każdy klient z puli 10.6.0.0 ma indywidualnie przydzielaną podsieć z zakresu 10.9.0.0. Dzięki temu oprócz kontroli samego klienta, mam dostęp do jego podsieci (klientem w podsieci jest Linksys WRT54GL z Tomato a do niego podłączone pozostałe urządzenia). Przykładowy plik ccd wygląda u mnie tak:

ifconfig-push 10.6.0.9 10.6.0.10
iroute 10.9.0.8 255.255.255.248
Zastanawiam się jeszcze, czy opcja "client-to-client" nie jest sprawcą całego zamieszania. Tak jak pisałem w pierwszym poście, w tej chwili każdy klient widzi każdego klienta, a wolałbym kontrolować kto kogo widzi:) Pełna konfiguracja mojego serwera wygląda tak:

port 1194
proto udp
dev tun
ca ca.crt
cert Server.crt
key Server.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
client-config-dir ccd
route 10.8.1.0 255.255.255.0  #administarorzy
route 10.8.101.0 255.255.255.0  #serwis
route 10.6.0.0 255.255.255.0  #klienci
push "route-delay 2 600"
client-to-client
push "route 10.8.1.0 255.255.255.0" #administarorzy
push "route 10.8.101.0 255.255.255.0" #serwis
push "route 10.6.0.0 255.255.255.0" #klienci
push "route 10.9.0.0 255.255.255.0" #podsieć klientów
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
persist-key
persist-tun
status openvpn-status.log
verb 3
Czy mogę np wyłączyć funkcje "client-to-klient" i wzajemną widzialność klientów zrobić innym narzędziem? Może tak jak to proponujesz plikami ccd albo może się da za pomocą iptables na serwerze?

Pozdrawiam
ziemson

mikodoom

  • Gość
OpenVPN - ograniczanie ruchu
« Odpowiedź #3 dnia: 2011-12-14, 10:42:02 »
Na podstawie oryginalnego configu OpenVPN :
# Uncomment this directive to allow different
# clients to be able to "see" each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server's TUN/TAP interface.
;client-to-client
Wtedy rzeczywiście będzie możliwa 'widzialność' innych hostów ( chyba, że reguły iptables stanowią inaczej ).
Konfiguracja serwera wydaje się OK - sam mam podobną.

Co do samych reguł iptables - wpisałeś coś takiego :
1. iptables -A FORWARD -i tun0 -s 10.6.0.0/24 -d 10.9.0.0/24 -j DROP
2. iptables -A FORWARD -i tun0 -s 10.6.0.0/24 -d 10.6.0.0/24 -j DROP
reguła nr 2 jest, jakby to ująć, dziwna :). Próbujesz zablokować ruch przychodzący, co prawda z interfejsu tun0, ale z tej samej sieci. Wydaje mi się, że iptables po prostu 'nie chwyci' tej reguły - możesz sprawdzić za pomocą
iptables -L -n -v | grep 10.6.0.0
jeśli w kolumnie 'packets' ( tej najbardziej zewnętrznej ) zobaczysz '0', tzn. że prawdopodobnie reguła nie zadziałała ( bo nie znalazł się ruch spełniający tę regułę, lub został już przepuszczony/zablokowany wcześniej ).

Możesz przetestować,czy reguły działają za pomocą tcpdump`a, np. tak
tcpdump -i tun0 -n -vv -X src net 10.6.0.0
gdzie :
-X - jak chcesz decoding protokołu
Pozdrawiam,

MikoDoom

ziemson

  • Gość
OpenVPN - ograniczanie ruchu
« Odpowiedź #4 dnia: 2011-12-15, 00:42:42 »
Cytat: mikodoom
Na podstawie oryginalnego configu OpenVPN :
# Uncomment this directive to allow different
# clients to be able to "see" each other.
# By default, clients will only see the server.
# To force clients to only see the server, you
# will also need to appropriately firewall the
# server's TUN/TAP interface.
;client-to-client
Wtedy rzeczywiście będzie możliwa 'widzialność' innych hostów ( chyba, że reguły iptables stanowią inaczej ).
Konfiguracja serwera wydaje się OK - sam mam podobną.
No właśnie, ale co jest nadrzędne? Bo jeśli ustawie włączone client-to-client, nie potrafię napisać reguły w iptables blokującej jakikolwiek ruch. Albo odwrotnie, czy bez włączonej funkcji "client-to-client" mogę za pomocą iptables umożliwić "widzialność" podsieci?

Niestety próby z modyfikacja plików w ccd nie powiodły się w pełni. Mogę wprawdzie decydować które podsieci się widzą, ale brakuje mi uszczegółowienia, który konkretnie klient widzi konkretnego klienta. Ciągle liczę, że uda mi się zrobić za pomocą iptables.

Dzięki za podpowiedzi, ale proszę o jeszcze:)

pozdrawiam
ziemson

ziemson

  • Gość
OpenVPN - ograniczanie ruchu
« Odpowiedź #5 dnia: 2011-12-21, 14:29:08 »
Problem rozwiązany!

Tak jak przypuszczałem musi być wyłączna funkcja "client-to-client" w pliku konfiguracyjnym serwera VPN. Dodatkowo, to czego nie byłem świadomy to brak "net.ipv4.ip_forward = 1". Dopiero wtedy zaczęły działać reguły FORWARD w iptables.

mikodom, dzięki za wszystkie podpowiedzi!

pozdrawiam
ziemson

mikodoom

  • Gość
OpenVPN - ograniczanie ruchu
« Odpowiedź #6 dnia: 2011-12-21, 18:17:09 »
Hej,

Fakt, net.ipv4.ip_forward = 1 powoduje, że robisz z danego hosta swoisty router. Bez niej łańcuch FORWARD nie ma w zasadzie racji bytu. Zapomniałem się o to zapytać :).

Cieszę się, że działa :)

Wesołych Świąt poza tym,

MikoDoom