duminică, 8 martie 2015

Crearea unei rețele VPN folosind router Cisco RV042 și aplicația Cisco QuickVPN








Pentru început trebuie descărcată aplicația Cisco QuickVPN. Versiunea curentă este 1. 4.2.1 și poate fi obținută de la adresa Quick Virtual Private Network (QVPN) Utility - Cisco Systems.
Configurarea ruterului Cisco RV042VPN pentru conexiuni VPN implică mai mulți pași:
-a)activare Remote Management, HTTPS, Multicast Passthrough și dezactivare Block WAN Request din Firewall -> General.
-b) din VPN -> VPN Passthrough se vor activa  IPSec Passthrough, PPTP Passthrough și  L2TP Passthrough.
-c) din VPN -> Client to Gateway se vor crea mai multe tunele VPN și un grup VPN. Se recomandă selectarea opțiunilor NetBIOS Broadcast și NAT Traversal din secțiunea Advanced.
-d) din VPN -> VPN Client Access se vor adăuga aceeași utilizatori din tunelurile definite anterior. (Cisco insistă pe cerința un tunel un utilizator). Folosind opțiunea Generate New Certificate se va genera un nou certificat pentru ruter necesar în caz de reset hardware.  Folosind opțiunea Export Certificate for Administrator se va salva certificatul generat. Folosind opțiunea Export Certificate for client se vor genera certificate pentru utilizatori VPN (cu extensia .pem) care vor fi copiate în folderul în care este instalată aplicația Cisco QuickVPN uzual C:\Program Files\Cisco Small Business\QuickVPN Client.
-e)din VPN -> PPTP Server se va activa  PPTP Server și se vor adăuga maxim 5 utilizatori din utilizatorii definiți anterior.
-f)În secțiunea Firewall -> Acces rule se vor defini reguli de permitere acces pentru serviciile Https, L2TP, PPTP și IPSEC
Pentru ca aplicația Cisco QuickVPN să ruleze pe calculatoarele client este necesar ca serviciul IPSEC să fie activ și să ruleze. (Pentru Windows 7/8 aceasta implică firewall activ). Dar pentru rularea corectă din Windows Firewall -> Advanced Settings  pe Inbound Rules și pe Outbound Rules trebuiesc create 2 reguli pe fiecare. Prima regula va fi de tip program și va adăuga programul Cisco Quick VPN la excepții. A doua regulă va fi de tip Custom (succesiunea de comenzi astfel New rule -> Custom -> All Programs –> Protocol type ICMPv4  -> Any IP –> Allow –> Enable Domain, Private și Public ->  Nume regulă –> Finish.
Nu recomand deschiderea porturilor 443, 450, 500, 4500, 1701, 1723, 60443 pe calculatoarele client. Aplicația funcționează folosind doar cele 2 excepții de firewall enumerate. Dar este posibil să fie necesară instalarea unui Virtual adaptor VPN. Recomand aplicația SoftEther VPN Client. 
În schimb pentru W8/10 sunt probleme de compatibilitate. 
Pentru Windows  8.1 am încercat următoarele :
I.Dezinstalare CheckPoint.VPN şi f5 VPN (dacă este cazul)
Folder instalare: C:\Program Files\CheckPoint\Endpoint Connect\
Uninstaller: MsiExec.exe /I{573E8CDB-A20B-4C18-A790-E5DBB6B83F42}
( Windows Installer este folosit pentru instalare, mentenanţă şi dezinstalare.)
Respectiv
Folder instalare: C:\Program Files\f5 vpn\f5_tmp
Uninstaller: MsiExec.exe /X{6D4839CB-28B4-4070-8CA7-612CA92CA3D0}


II Instalare Determinist Network Enhancer (înainte de instalare dezinstalaţi clientul Cisco VPN şi orice alt program Cisco, LEAP etc şi restartaţi calculatorul.)
sau

III.Modificare registri astfel(dacă folosiţi Cisco VPN)
1. Lansare în execuţie  Registry editor cu comanda regedit in Command Prompt Admin
2. Localizarea următoarei chei din regiştri  HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CVirtA
3. Modificare cheie astfel
pentru x86 ,
din "@oem8.inf,%CVirtA_Desc%;Cisco Systems VPN Adapter” în "Cisco Systems VPN Adapter”
pentru x64,
din "@oem8.inf,%CVirtA_Desc%;Cisco Systems VPN Adapter for 64-bit Windows” în "Cisco Systems VPN Adapter for 64-bit Windows”

IV. Aplicare setările de securitate în Full Control la fişierele (doar pentru Cisco VPN):
c:\Windows\System32\drivers\CVirtA64.sys (64 bit edition)
c:\Windows\System32\drivers\CVPNDRVA.sys
pentru System,All Application Packages, System şi orice alt groups şi/sau user  full control.

V .Deschidere porturi TCP 443,1701,1723,60443 şi UDP 500,4500 atât pentru conexiunile de intrare cât şi pentru conexiunile de ieşire.

Rezultat final Remote Gateway not responding. Do you wish to wait ?
  Bineînţeles că utilizatorul este on-line şi tunelul VPN este stabilit dar nu se poate accesa nimic.



duminică, 18 ianuarie 2015

Tutorial utilizare iptables


 


Toate încep cu un prim pas….

1. Ștergere reguli existente
Înainte de a construe un nou set de reguli trebuie resetate toate regulile existente.
Comanda este iptables –F   sau iptables –flush

2. Stabilire reguli implicite
Regula implicit este ACCEPT. Motivul pentru care se folosește iptables este simplu- nu se dorește ca aceasta să rămână  regula  implicită. Se va schimba cu DROP (respingere pachete fără atenționare) pentru   INPUT, FORWARD, and OUTPUT astfel
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
Dacă pentru INPUT și OUTPUT regula implicit este DROP pentru fiecare excepție firewall trebuiesc definite 2 reguli, una pentru pachetele de intrare și alta pentru pachetele de ieșire
Dacă aveți încredere în utilizatorii rețelei interne  nu rulați comanda iptables -P OUTPUT DROP.  În acest caz trebuiesc definite reguli numai pentru conexiunile de intrare (INPUT din exteriorul rețelei interne către calculatoarele din rețeaua internă). Aceasta este de fapt setarea implicită la rețelele Windows.

3. Blocarea unei adrese IP
Blocarea unei adrese IP se realizează direct cu comanda
iptables -A INPUT -i eth0 -s x.x.x.x -j DROP  
sau
iptables -A INPUT -i eth0 -p tcp -s x.x.x.x  -j DROP  unde x.x.x.x este adresa IP
Tag-ul –A înseamnă adăugarea unei noi reguli. Tagul –p tcp arată că vor fi blocate pachetele transmise prin protocolul TCP. Tagul –j specifică ce se va întâmpla cu pachetele de date astfel ACCEPT –accept, DROP –refuz, QUEQUE- trimiterea în coada de așteptare și RETURN retransmiterea la expeditor.
Tagul -s arată sursa pachetelor de date. Dacă dorim stergerea acestei reguli se folosește tag-ul –D de exemplu
iptables -D INPUT -i eth0 -s x.x.x.x -j DROP  
iptables -D INPUT -i eth0 -p tcp -s x.x.x.x  -j DROP 
Regulile sunt numerotate  de aceea se poate folosi pentru stergere comanda
iptables -D INPUT 1
Pentru a vizualiza regulile din iptables comanda este
iptables -L
O altă modalitatea este folosirea unui fisier script (fișier text făcut executabil cu comanda chmod 700 file.txt și rulat cu comanda  ./file.txt din folderul fișierului
În acest caz putem defini o variabila căreia îi atribuim valoarea adresei IP astfel
BLOCK_THIS_IP="x.x.x.x"
iptables -A INPUT -s "$BLOCK_THIS_IP" -j DROP
Acest mod de lucru în aparență mai complicat este foarte util pentru a vizualiza mai rapid în log-uri adresa IP care generează „trafic suplimentar”.
Se poate bloca traficul de pe o adresă IP pe o anumită interfață de rețea de exemplu
iptables -A INPUT -i eth0 -s "$BLOCK_THIS_IP" -j DROP
iptables -A INPUT -i eth0 -p tcp -s "$BLOCK_THIS_IP" -j DROP

4. Permiterea conexiunilor SSH
Următoarea regulă permite efectuarea de conexiuni SSH pe interfața de rețea  eth0 .
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Tagul port permite specificarea unui port anume (în cazul ssh portul 22) iar prefixul -d arată destinația către portul 22 . Similar –sport indică ca sursă a traficului portul 22
Setul de două instrucţiuni este necesar pentru INPUT/OUTPUT. Este recomandat ca în loc de prima instrucțiune pentru ssh să se folosească următoarele
iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW, ESTABLISHED  -m recent --set --name SSH -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --rttl --name SSH -j DROP.
Și, bineînțeles, ar trebui ca portul implicit pentru SSH să fie modificat.


5.Permiterea conexiunilor SSH numai dintr-o anumită reţea
Dacă dorim să fie premise conexiunile SSH numai din reţeaua 192.168.33.0 comanda este
iptables -A INPUT -i eth0 -p tcp -s 192.168.33.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
În loc de masca restrânsă de reţea se poate folosi masaca extinsă de reţea astfel în loc de
 192.168.33.0/24  folosim 192.168.33.0/255.255.255.0.

6. Permiterea conexiunilor HTTP şi HTTPS
Regulile următoare permit traffic web nesecurizat (Protocolul http port 80)
iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
Regulile următoare permit traffic web securizat (Protocolul https port 443)
iptables -A INPUT -i eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

7. Crearea de reguli de acces multiple.
Dacă se doreşte permiterea de conexiuni de intrare de tipuri diferite este suficient să se insereze lista porturilor pe care se efectuează accesul fără a se creea reguli individuale pe fiecare port în parte..
De exemplu pentru a permite conexiuni de intrare SSH, HTTP și HTTPS.
iptables -A INPUT -i eth0 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT
Apare tagul –m multiport care precizează o listă de porturi.

8. Permiterea conexiunilor  SSH în rețele externe
Dacă dorim să ne conectăm la un server extern prin  SSH trebuiesc create regulie următoare
iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
Se observă diferența față de conexiunile de intrare tag-urile NEW și ESTABLISHED se aplică pe OUTPUT iar pe INPUT numai ESTABLISHED, invers față de conexiunile de intrare

9. Permiterea conexiunilor  SSH într-o anumită rețea externă.
Regula următoare permite efectuarea conexiunilor SSH numai pentru o rețea specifică (de exemplu 192.168.33.0 ).
iptables -A OUTPUT -o eth0 -p tcp -d 192.168.33.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
10. Permiterea conexiunilor  HTTP și HTTPS externe
Pentru a permite traficul HTTPS se folosesc următoarele reguli.
iptables -A OUTPUT -o eth0 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT
Această regulă permite și conexiuni wget.
Pentru a permite conexiuni HTTP se inserează următoarele reguli
iptables -A OUTPUT -o eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

11. Efectuare Load Balancing pentru traffic web de intrare
Se poate efectua loadbalance cu iptables. Se folosește taguș nth. In exemplu următor efectuăm load balance pe 2 adrese IP pentru HTTPS. Un pachet va fi transmis la o adresă IP iar următorul pachet la altă adresă IP.
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 2 --packet 0 -j DNAT --to-destination 192.168.1.33:443
iptables -A PREROUTING -i eth0 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 2 --packet 1 -j DNAT --to-destination 192.168.1.34:443

12. Permitere ping din exterior în interior
Regulile următoare permit efectuarea de ping-uri către serverele din rețeaua locală.
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

13. Permitere ping din interior în exterior
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

14. Permitere Loopback Access
Majoritatea serverelor necesită acces Loopback (localhost -127.0.0.1). Se folosește tagul lo
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

15. Permitere trafic din rețeaua internă în rețeaua externă
În mod normal un server firewall are o placă de rețea conectată la rețeaua internă și o pălacă de rețea conectată la internet (rețeaua externă).Pentru a permite traficul din rețeaua externă în rețeaua internă se folosesc următoarele reguli (rețeaua internă este 192.168.1.x și este conectată la server prin interfața eth1.
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Tagul –o reprezintă output destination și tagul –i input destination.
Pentru a efectua corect MASQUERADE regulile sunt :
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j REJECT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

16. Permiterea cererilor către DNS externe
The following rules allow outgoing DNS connections.
iptables -A OUTPUT -p udp -o eth1 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth1 --sport 53 -j ACCEPT



17. Permiterea conexiunilor NIS
Dacă se folosește NIS pentru management conturi utilizator trebuiesc premise conexiuni NIS. Chiar dacă sunt permise conexiunile SSH dacă nu sunt premise conexiunile NIS utilizatorii nu se pot loga.
Porturile NIS sunt alocate dynamic de ypbind la lansarea în execuție.
Folosind comanda rpcinfo –p vedem că sunt folosie porturile 851 și 852 de exemplu. Pentru a identifica port ypbind folosim comanda rpcinfo -p | grep ypbind. Observăm că ypbind utilizează portul 114 e.g.
Permitem conexiuni de intrare tcp and udp pe porturile menționate.
iptables -A INPUT -p tcp --dport 114 -j ACCEPT
iptables -A INPUT -p udp --dport 114 -j ACCEPT
iptables -A INPUT -p tcp --dport 851 -j ACCEPT
iptables -A INPUT -p udp --dport 851 -j ACCEPT
iptables -A INPUT -p tcp --dport 852 -j ACCEPT
iptables -A INPUT -p udp --dport 852 -j ACCEPT
NB.  Dacă se restartează ypbind porturile vor fi altele.
Sunt două soluții:
1) Folosire adresă static pentru serverul NIS
2)Folosirea de scripturi automate care prelucreaza output-ul lui rpcinfo -p .

18. Permiterea cererilor DHCP
Pentru a permite cereri DHCP
iptables -A OUTPUT -o eth0  -p udp --dport 68 -j ACCEPT
iptables -A INPUT -i eth1 -p udp --dport 67 -j ACCEPT

19.Permiterea traficului SAMBA 3 numai în rețeaua curentă
Asumăm că rețeaua locala este 192.168.1.0/24
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 137 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp -m udp --dport 138 -j ACCEPT
iptables -A INPUT  -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 139 -j ACCEPT
iptables -A INPUT  -m state --state NEW -m tcp -p tcp -s 192.168.1.0/24 --dport 445 -j ACCEPT

20. Permiterea Rsync dintr-o rețea specificată
iptables -A INPUT -i eth0 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT



21. Permiterea MySQL din rețeaua internă
În mod normal nu se permit conexiuni SQL directe dar este util ca rețeaua locală să se poată conecta la serverul SQL.
iptables -A INPUT -i eth0 -p tcp -s 192.168.33.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

22. Permiterea traffic Mail
The following rules allow mail traffic. It may be sendmail or postfix.
iptables -A INPUT -i eth0 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

23. Permiterea IMAP și IMAPS
iptables -A INPUT -i eth0 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT
Și pentru IMAPS.
iptables -A INPUT -i eth0 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

24. Permiterea POP3 și POP3S
iptables -A INPUT -i eth0 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT
Și pentru POP3S.
iptables -A INPUT -i eth0 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT
25. Prevenirea DoS Attack
Următoarea regulă ajută la reducerea efectelor atacurilor Denial of Service (DoS) attack pe webserverul dumneavoastră.
iptables -A INPUT -p tcp --dport 80 -m limit --limit 60/minute --limit-burst 10 -j ACCEPT
În acest exemplu
·       -m limit: Tagul – limit definește limită de conexiuni
·       –limit 60/minute: Există o limitare de maximum 60 conexiuni pe minut. Această valoare poate fi modificată
·       –limit-burst 5: Această valoare indică că limitarea conexiunilor va fi aplicată numai după  lce numărul conexiunilor va depăși 60 conexiuni în ultimile 5 minute.
·        
26. Port Forwarding
Următorul exemplu arată modul în care traficul extern pe portul 6022 va fi transferat pe portul 22.

iptables -t nat -A PREROUTING -p tcp -d 192.168.101.37 --dport 6022 -j DNAT --to 192.168.101.37:22

De asemena trebuiesc premise conexiunile pe portul 6022
iptables -A INPUT -i eth0 -p tcp --dport 6022 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 6022 -m state --state ESTABLISHED -j ACCEPT
27. Blocarea traficului de la adresă fizică MAC
iptables -A INPUT -m mac --mac-source x:x:x:x:x:x -j DROP
iptables -A FORWARD -m mac --mac-source x:x:x:x:x:x -j DROP
Dacă dorim permiterea traficului doar de la o adresă MAC regulile sunt
iptables -A INPUT -m mac! --mac-source x:x:x:x:x:x -j DROP
iptables -A FORWARD -m mac! --mac-source x:x:x:x:x:x -j DROP
Se observă apariția tag-ului ! care reprezintă cunoscutul not (sensul mac! este nu această adresă)
28. Log pachete drop
Este foarte util să se efectueze log cu toate pachetele drop. Aceasta este întotdeauna ultima regulă în iptables.
Prima data se creează un nou chain numit LOGGING.
iptables -N LOGGING
După aceea toate conexiunile de intrare sunt rulate prin LOGGING cu comanda
iptables -A INPUT -j LOGGING
Vom loga pachetele sub o denumire particularizată.
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "Packet Drops: " --log-level 7
În final se dă DROP la aceste pachete.
iptables -A LOGGING -j DROP



Descărcați acest tutorial în format PDF