LAN2WAN

.: LAN2WAN :.

Aucun commentaire

Le tocage à la porte, ou port-knocking, est une méthode permettant de modifier le comportement d'un pare-feu (firewall) en temps réel en provoquant l'ouverture de ports permettant la communication, grâce au lancement préalable d'une suite de connexions sur des ports distincts dans le bon ordre, à l'instar d'un code frappé à une porte.

Nous allons donc mettre en place celle-ci sur un Mikrotik RB750GL afin de protéger l'accès à notre VPN en itinérance.
Nous n'aborderons pas la partie mise en place du VPN.

Pour résumer, votre terminal (smartphone, tablette, PC Portable ...) distant va envoyer une séquence (via l'envoi d'un paquet TCP ou UDP sur certains ports) sur votre Firewall, et celui-ci va autoriser les connexions depuis notre adresse IP.
Pour ce faire, notre Firewall va donc devoir stocker les adresses IP qui vont arriver, et ce pour une durée que nous allons lui préciser.
Nous devons mettre une durée car il se peut qu'une personne scanne les 65535 ports de votre Firewall et donc déclenche l'autorisation, ce qui ne serait pas souhaitable.

Création des listes d'adresses (stockage des adresses IP)

Dans un premier temps, nous allons ajouter 3 phases.
Nous pouvons en rajouter plus sans aucun soucis.
Nous lançons WinBox, puis dans le menu de gauche "IP", "Firewall" et pour finir l'onglet "Address Lists".
Nous ajoutons donc une première liste d'adresses, la "Phase1" comme indiqué ci-dessous :
PK001

Comme on peut le voir sur la capture, il n'est pas possible de créer une liste d'adresses vide.
Nous avons donc ajouté une adresse IP qui ne risque normalement pas de nous pirater, le DNS de Google.

Ajout de la "Phase2" :
PK002

Idem que précédemment concernant l'IP de Google.
Puis ajout de la "Phase finale" :
PK003

Nous retrouvons donc nos différentes phases comme ci-dessous :
PK004

Ajout des règles du Firewall

Toujours dans la partie "Firewall", nous allons sur l'onglet "Filter Rules", puis ajoutons nos 3 différentes règles qui serviront de séquences.

Première séquence

Onglet "General" nous utiliserons le Protocol TCP et le port 12345 :
PK005

Puis onglet "Action", nous la rattacherons à notre "Phase1" pour 10 secondes :
PK006

Cela nous laisse donc 10 secondes pour jouer la seconde séquence. En cas de lenteur sur le réseau, c'est suffisant.

Seconde séquence

Onglet "General" nous utiliserons le Protocol UDP et le port 23456 :
PK007

Dans l'onglet "Advanced", nous vérifions que l'adresse IP en question est déjà présente dans notre liste d'adresses de la "Phase1" :
PK008

Puis onglet "Action", nous la rattacherons à notre "Phase2" pour 10 secondes :
PK009

Cela nous laisse donc 10 secondes pour jouer la dernière séquence.

Dernière séquence

Onglet "General" nous utiliserons le Protocol TCP et le port 45678 :
PK010

Dans l'onglet "Advanced", nous vérifions que l'adresse IP en question est déjà présente dans notre liste d'adresses de la "Phase2" :
PK011

Puis onglet "Action", nous la rattacherons à notre "Phase Finale" pour 1 minute :
PK012

Nous avons donc 1 minute pour lancer notre connexion finale, dans mon cas mon client VPN.

Ouverture du Firewall pour notre adresse IP

Dans l'onglet "General", nous autorisons les connexions sur notre interface WAN :
PK013

Dans l'onglet "Advanced", nous limitons uniquement aux adresses IP présentes dans la liste d'adresses "PK_Secure" :
PK014

Puis dans l'onglet "Action" nous acceptons que le flux passe :
PK015

Toutes ces règles sont bien entendu à remonter avant la règle de "DROP".

Résumé des modifications

Nous pouvons constater que notre séquence est bien présente, ainsi que l'ordre dans laquelle nous devons l'effectuer :
PK016

Configuration de la séquence sur Android

Il suffit de configurer les ports et protocoles dans le même ordre que ce que vous avez fait sur votre Firewall, soit :
PK017

Test de connexion

Nous voici à la fin de cette mise en place, le saint Graal est au bout, nous allons nous connecter !
Une fois la séquence lancée depuis notre téléphone Android, nous pouvons voir dans la partie "Firewall" onglet "Filter Rules" que les 3 paquets sont bien arrivés :
PK018

Nous allons voir toujours dans la partie "Firewall", mais onglet "Address Lists", et nous pouvons constater que notre adresse IP est présentes dans les différentes "Phases" :
PK019

Ping des machines sur le réseau

Dans mon cas, je monte donc mon VPN avec mon téléphone Android, mais il se trouve que je ne pouvais pas me connecter sur les machines de mon réseau local.
Je surfais par contre bien via le VPN, et me trouvais avec l'adresse IP du serveur VPN.
Pour corriger le soucis, il suffit d'aller sur l'interface du réseau local et dans l'onglet "General" de passer l'ARP en "proxy-arp", comme ci-dessous :
PK020

Optimisation possible

Nous pouvons noter qu'il est également possible d'aller plus loin sur les vérifications, et d'envoyer depuis votre appareil mobile et de récupérer sur le Firewall un "code secret" via une "regexp" (onglet "Layer7 Protocols").

Aucun commentaire

Configuration matérielle

Il s'agit ici d'un Soekris Net4801 avec une carte additionnelle Lan1621 qui rajoute 2 ports réseaux 10/100, soit un total de 5 ports RJ-45. Le matériel en lui même n'est pas un foudre de guerre (CPU 233MHz, RAM 128Mo SDRAM, 3Ports Ethernet 10/100), mais il est suffisant pour une utilisation à domicile avec une connexion Internet de 50M maximum. Il faut également prendre en compte que tous les ports Ethernet n'étant pas des ports Gigabit, les transferts entre les différentes pattes du Firewall seront limités.

Préparation logicielle et Installation

Nous allons commencer par récupérer tout ce qui est nécessaire afin de pouvoir installer pfSense sur ce boitier. Pour se faire, nous allons télécharger la dernière version stable de pfSense sur le site. Etant donné qu'il s'agit d'un processeur avec une architecture 586, nous allons donc télécharger une version “i386”, et étant donné que nous allons installer ça sur une carte CompactFlash de 2Go, nous allons prendre le fichier “pfSense-2.1-RELEASE-2g-i386-nanobsd.img.gz”. Une fois avec ce fichier, il va nous falloir l'installer (après décompression) sur la carte mémoire. Pour se faire, nous allons nous servir de physdiskwrite. Connectons un lecteur de carte mémoire sur notre poste sous Windows, et copions le logiciel “physdiskwrite” dans le même répertoire que notre fichier “pfSense-2.1-RELEASE-2g-i386-nanobsd-20130911-1816.img”. Il faut ensuite lancer “cmd” en administrateur directement depuis le répertoire. A partir de maintenant, nous pouvons donc lancer la commande :

physdiskwrite pfSense-2.1-RELEASE-2g-i386-nanobsd-20130911-1816.img

Il va nous demander ou nous voulons copier le fichier image :

physdiskwrite v0.5.2 by Manuel Kasper

Searching for physical drives...

Information for \\.\PhysicalDrive0:
   Windows:       cyl: 60801
                  tpc: 255
                  spt: 63
Information for \\.\PhysicalDrive1:
DeviceIoControl() failed on \\.\PhysicalDrive1.

Information for \\.\PhysicalDrive2:
   Windows:       cyl: 249
                  tpc: 255
                  spt: 63

Information for \\.\PhysicalDrive3:
DeviceIoControl() failed on \\.\PhysicalDrive3.

Information for \\.\PhysicalDrive4:
DeviceIoControl() failed on \\.\PhysicalDrive4.

Which disk do you want to write? (0..2) 2
About to overwrite the contents of disk 2 with new data. Proceed? (y/n) y
1989969408/1989969408 bytes written in total

"Bien sélectionner la carte mémoire, sinon c'est l'effacement intégral de votre disque Windows" Une fois que c'est terminé, nous pouvons remettre la carte mémoire dans le boitier, et refermer celui-ci.

Démarrage du boitier

Branchons notre câble série (il est possible d'utiliser un câble USB-Serial avec un adaptateur Null-Modem) entre l'ordinateur et le boitier afin de voir ce qu'il se passe. Il est préférable de configurer Putty avant afin de pouvoir suivre correctement l'avancement du boot. Effectivement, il va falloir utiliser deux réglages différents pour avoir accès au BIOS et au Boot :

Accès au BIOS :

Vitesse : 19200
Data bits : 8
Stop bits : 1
Parité : Non
Flow control : XON/XOFF

Accès au Boot :

Vitesse : 9600
Data bits : 8
Stop bits : 1
Parité : Non
Flow control : XON/XOFF

Vérifications du Boot

Nous pouvons constater dans la phase de Boot qu'il détecte correctement nos différentes interfaces réseaux :

     ___
 ___/ f \
/ p \___/ Sense
\___/   \
    \___/

Welcome to pfSense 2.1-RELEASE  ...

Creating symlinks......done.
>>> Under 512 megabytes of ram detected.  Not enabling APC.
External config loader 1.0 is now starting... ad0s3
Launching the init system... done.
Initializing............................. done.
Starting device manager (devd)...done.
Loading configuration......done.

Default interfaces not found -- Running interface assignment option.
sis0: link state changed to DOWN
sis1: link state changed to DOWN
sis2: link state changed to DOWN
sis3: link state changed to DOWN
sis4: link state changed to DOWN

Valid interfaces are:

sis0  00:00:24:ca:8d:b8   (up) NatSemi DP8381[56] 10/100BaseTX
sis1  00:00:24:ca:8d:b9   (up) NatSemi DP8381[56] 10/100BaseTX
sis2  00:00:24:ca:8d:ba   (up) NatSemi DP8381[56] 10/100BaseTX
sis3  00:00:24:c9:de:e4   (up) NatSemi DP8381[56] 10/100BaseTX
sis4  00:00:24:c9:de:e5   (up) NatSemi DP8381[56] 10/100BaseTX

Configuration de base en console

Une fois passé la détection des interfaces, nous allons devoir répondre à certaines questions :

Do you want to set up VLANs first?
If you are not going to use VLANs, or only for optional interfaces, you should
say no here and use the webConfigurator to configure VLANs later, if required.
Do you want to set up VLANs now [y|n]?

Etant donné que nous effectuons uniquement une configuration de base, nous allons donc répondre “non” à cette question de VLANs. Nous pouvons maintenant attribuer les différentes interfaces réseaux. La norme Soekris indique que le port LAN est celui près du port console (sis0), et le WAN celui du milieu (sis1). Afin que cela soit plus simple pour nous, nous allons changer ceci afin que le premier port soit celui du WAN :

If you do not know the names of your interfaces, you may choose to use
auto-detection. In that case, disconnect all interfaces now before
hitting 'a' to initiate auto detection.

Enter the WAN interface name or 'a' for auto-detection: sis0

Enter the LAN interface name or 'a' for auto-detection
NOTE: this enables full Firewalling/NAT mode.
(or nothing if finished): sis1

Enter the Optional 1 interface name or 'a' for auto-detection
(or nothing if finished): sis2

Enter the Optional 2 interface name or 'a' for auto-detection
(or nothing if finished): sis3

Enter the Optional 3 interface name or 'a' for auto-detection
(or nothing if finished): sis4

Enter the Optional 4 interface name or 'a' for auto-detection
(or nothing if finished):

The interfaces will be assigned as follows:

WAN  -> sis0
LAN  -> sis1
OPT1 -> sis2
OPT2 -> sis3
OPT3 -> sis4

Do you want to proceed [y|n]?y

Une fois le Boot terminé, nous pouvons connecter le boitier sur le réseau via la prise “Eth1” (sis1).

Configuration de base via webConfigurator

Nous pouvons nous connecter directement sur l'interface web par défaut. Les informations d’authentification sont les suivantes :

Login : admin
Password : pfsense
v4: 192.168.1.1/24

Informations complémentaires sur la partie Hardware.

Configuration BIOS

POST: 012345689bcefghipsajklnopqr,,,tvwxy








comBIOS ver. 1.33  20080103  Copyright (C) 2000-2007 Soekris Engineering.

net4801

0128 Mbyte Memory                        CPU Geode SC1100 233 Mhz

Pri Mas  SanDisk SDCFH2-002G             LBA Xlt 992-64-63  2001 Mbyte

Slot   Vend Dev  ClassRev Cmd  Stat CL LT HT  Base1    Base2   Int
-------------------------------------------------------------------
0:00:0 1078 0001 06000000 0107 0280 00 00 00 00000000 00000000
0:06:0 100B 0020 02000000 0107 0290 00 3F 00 0000E101 A0000000 10
0:07:0 100B 0020 02000000 0107 0290 00 3F 00 0000E201 A0001000 10
0:08:0 100B 0020 02000000 0107 0290 00 3F 00 0000E301 A0002000 10
0:10:0 104C AC23 06040002 0107 0210 08 3F 01 00000000 00000000
0:18:2 100B 0502 01018001 0005 0280 00 00 00 00000000 00000000
0:19:0 0E11 A0F8 0C031008 0117 0280 08 38 00 A0003000 00000000 11
1:00:0 100B 0020 02000000 0107 0290 00 3F 00 0000D001 A4000000 05
1:01:0 100B 0020 02000000 0107 0290 00 3F 00 0000D101 A4001000 11

 3 Seconds to automatic boot.   Press Ctrl-P for entering Monitor.

Commandes BIOS

comBIOS Monitor.   Press ? for help.

> ?
comBIOS Monitor Commands

boot [drive][:partition] INT19 Boot
reboot                   cold boot
download                 download a file using XMODEM/CRC
flashupdate              update flash BIOS with downloaded file
time [HH:MM:SS]          show or set time
date [YYYY/MM/DD]        show or set date
d[b|w|d] [adr]           dump memory bytes/words/dwords
e[b|w|d] adr value [...] enter bytes/words/dwords
i[b|w|d] port            input from 8/16/32-bit port
o[b|w|d] port value      output to 8/16/32-bit port
run adr                  execute code at adr
cmosread [adr]           read CMOS RAM data
cmoswrite adr byte [...] write CMOS RAM data
cmoschecksum             update CMOS RAM Checksum
set parameter=value      set system parameter to value
show [parameter]         show one or all system parameters
?/help                   show this help

Configuration vue par FreeBSD (pfSense)

Consoles: serial port
BIOS drive C: is disk0
BIOS 639kB/130048kB available memory

FreeBSD/x86 bootstrap loader, Revision 1.1
(root@snapshots-8_3-i386.builders.pfsense.org, Wed Sep 11 18:59:49 EDT 2013)
Loading /boot/defaults/loader.conf
/boot/kernel/kernel data=0x9162bc data=0x51d734+0x9e0c4 syms=[0x4+0x9aa90+0x4+0xd51ab]
-
Hit [Enter] to boot immediately, or any other key for command prompt.
Booting [/boot/kernel/kernel]...
Copyright (c) 1992-2012 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 8.3-RELEASE-p11 #0: Wed Sep 11 19:13:36 EDT 2013
    root@snapshots-8_3-i386.builders.pfsense.org:/usr/obj.pfSense/usr/pfSensesrc/src/sys/pfSense_wrap.8.i386 i386
Timecounter "i8254" frequency 1193182 Hz quality 0
CPU: Geode(TM) Integrated Processor by National Semi (233.34-MHz 586-class CPU)
  Origin = "Geode by NSC"  Id = 0x540  Family = 5  Model = 4  Stepping = 0
  Features=0x808131<FPU,TSC,MSR,CX8,CMOV,MMX>
real memory  = 134217728 (128 MB)
avail memory = 108036096 (103 MB)
ipw_bss: You need to read the LICENSE file in /usr/share/doc/legal/intel_ipw/.
ipw_bss: If you agree with the license, set legal.intel_ipw.license_ack=1 in /boot/loader.conf.
module_register_init: MOD_LOAD (ipw_bss_fw, 0xc07330f0, 0) error 1
ipw_ibss: You need to read the LICENSE file in /usr/share/doc/legal/intel_ipw/.
ipw_ibss: If you agree with the license, set legal.intel_ipw.license_ack=1 in /boot/loader.conf.
module_register_init: MOD_LOAD (ipw_ibss_fw, 0xc0733190, 0) error 1
ipw_monitor: You need to read the LICENSE file in /usr/share/doc/legal/intel_ipw/.
ipw_monitor: If you agree with the license, set legal.intel_ipw.license_ack=1 in /boot/loader.conf.
module_register_init: MOD_LOAD (ipw_monitor_fw, 0xc0733230, 0) error 1
wlan: mac acl policy registered
ACPI Error: A valid RSDP was not found (20101013/tbxfroot-309)
ACPI: Table initialisation failed: AE_NOT_FOUND
ACPI: Try disabling either ACPI or apic support.
cryptosoft0: <software crypto> on motherboard
padlock0: No ACE support.
pcib0: <Host to PCI bridge> pcibus 0 on motherboard
pci0: <PCI bus> on pcib0
sis0: <NatSemi DP8381[56] 10/100BaseTX> port 0xe100-0xe1ff mem 0xa0000000-0xa0000fff irq 10 at device 6.0 on pci0
sis0: Silicon Revision: DP83816A
miibus0: <MII bus> on sis0
nsphyter0: <DP83815 10/100 media interface> PHY 0 on miibus0
nsphyter0:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
sis0: [ITHREAD]
sis1: <NatSemi DP8381[56] 10/100BaseTX> port 0xe200-0xe2ff mem 0xa0001000-0xa0001fff irq 10 at device 7.0 on pci0
sis1: Silicon Revision: DP83816A
miibus1: <MII bus> on sis1
nsphyter1: <DP83815 10/100 media interface> PHY 0 on miibus1
nsphyter1:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
sis1: [ITHREAD]
sis2: <NatSemi DP8381[56] 10/100BaseTX> port 0xe300-0xe3ff mem 0xa0002000-0xa0002fff irq 10 at device 8.0 on pci0
sis2: Silicon Revision: DP83816A
miibus2: <MII bus> on sis2
nsphyter2: <DP83815 10/100 media interface> PHY 0 on miibus2
nsphyter2:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
sis2: [ITHREAD]
pcib1: <PCI-PCI bridge> at device 10.0 on pci0
pci1: <PCI bus> on pcib1
sis3: <NatSemi DP8381[56] 10/100BaseTX> port 0xd000-0xd0ff mem 0xa4000000-0xa4000fff irq 5 at device 0.0 on pci1
sis3: Silicon Revision: DP83816A
miibus3: <MII bus> on sis3
nsphyter3: <DP83815 10/100 media interface> PHY 0 on miibus3
nsphyter3:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
sis3: [ITHREAD]
sis4: <NatSemi DP8381[56] 10/100BaseTX> port 0xd100-0xd1ff mem 0xa4001000-0xa4001fff irq 11 at device 1.0 on pci1
sis4: Silicon Revision: DP83816A
miibus4: <MII bus> on sis4
nsphyter4: <DP83815 10/100 media interface> PHY 0 on miibus4
nsphyter4:  none, 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
sis4: [ITHREAD]
Geode Soekris net4801 comBIOS ver. 1.33 20080103 Copyright (C) 2000-2007
isab0: <PCI-ISA bridge> port 0x6100-0x613f,0x6200-0x623f at device 18.0 on pci0
isa0: <ISA bus> on isab0
pci0: <bridge> at device 18.1 (no driver attached)
atapci0: <National Geode SC1100 ATA33 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0xe000-0xe00f at device 18.2 on pci0
ata0: <ATA channel> at channel 0 on atapci0
ata0: [ITHREAD]
ata1: <ATA channel> at channel 1 on atapci0
ata1: [ITHREAD]
Timecounter "Geode" frequency 27000000 Hz quality 1000
pci0: <bridge> at device 18.5 (no driver attached)
ohci0: <OHCI (generic) USB controller> mem 0xa0003000-0xa0003fff irq 11 at device 19.0 on pci0
ohci0: [ITHREAD]
usbus0: <OHCI (generic) USB controller> on ohci0
cpu0 on motherboard
orm0: <ISA Option ROM> at iomem 0xc8000-0xd0fff pnpid ORM0000 on isa0
atrtc0: <AT Real Time Clock> at port 0x70 irq 8 on isa0
ppc0: parallel port not found.
uart0: <16550 or compatible> at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
uart0: [FILTER]
uart0: console (9600,n,8,1)
uart1: <16550 or compatible> at port 0x2f8-0x2ff irq 3 on isa0
uart1: [FILTER]
Timecounters tick every 10.000 msec
IPsec: Initialized Security Association Processing.
usbus0: 12Mbps Full Speed USB v1.0
ad0: 1953MB <SanDisk SDCFH2-002G HDX 4.32> at ata0-master PIO4
ugen0.1: <0x0e11> at usbus0
uhub0: <0x0e11 OHCI root HUB, class 9/0, rev 1.00/1.00, addr 1> on usbus0
Root mount waiting for: usbus0
uhub0: 3 ports with 3 removable, self powered
Trying to mount root from ufs:/dev/ufs/pfsense0
Configuring crash dumps...
Mounting filesystems...
Setting up memory disks... done.