1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
|
AF - Active Port Forwarder 0.6 - README
Copyright (C) 2003,2004,2005 jeremian - <jeremian [at] poczta.fm>
=================================================================
================================================================================
GRAY-WORLD.NET / Active Port Forwarder
======================================
Le programme Active Port Forwarder est partie intégrante des projets
Gray-World.net.
Notre équipe présente sur le site http://gray-world.net les projets et
publications sur lesquels nous travaillons. Ces projets et publications sont
relatifs au contournement des systèmes de contrôle d'accès réseau (NACS
bypassing) ainsi qu'à la sécurité des systèmes et réseaux.
================================================================================
========
SOMMAIRE
========
INTRO
1. INSTALLATION
1.1 Instructions
1.2 Librairies requises
1.3 Plate-formes testées
2. USAGE
2.1 afserver
2.2 afclient
3. ADMINISTRATION DISTANTE
4. MODULES
5. EXEMPLES
5.1 tcp mode
5.2 reverse udp mode
6. BUGS/PROBLEMES
NOTES
THANKS
================================================================================
=====
INTRO
=====
Active port forwarder est un programme permettant de réaliser du forwarding de
port sécurisé. Il utilise le protocole SSL pour augmenter le niveau de sécurité
des communications entre serveur et client. Son développement initial comme
outil de communication point à point a été influencé de façon à permettre le
contournement de firewalls et les communications à destination d'équipements
localisés sur le réseau interne.
Af est destiné aux personnes sans adresse IP publique externe qui désirent
offrir des services accessibles depuis le net.
La librairie Zlib est de plus employée pour compresser les données transférées.
L'utilisation d'un canal contrôle/données permanent avec une gestion de flux et
une mise en cache des paquets fournit de bonnes performances et un temps de
latence raisonnablement court.
L'emploi de clients multiples permet la création de schémas de tunneling plus
sophistiqués.
================================================================================
===============
1. INSTALLATION
===============
1.1 Instructions
----------------
1. Télécharger les sources compressées depuis www.gray-world.net/pr_af.shtml
2. Décompresser avec tar zxvf
3. Entrer "./configure"
4. Entrer "make"
5. Entrer "make install" sous l'identité root
6. Si un problème survient - envoyez un mail à l'auteur ou postez un message
sur http://gray-world.net/board/
1.2 Librairies requises
-----------------------
1. openssl - http://www.openssl.org/
2. zlib - http://www.gzip.org/zlib/
1.3 Plate-formes testées
------------------------
1. Linux:
Gentoo, Slackware, Mandrake - Compilation sans problème
2. Windows:
win32 - Version cygwin disponible sur la page du projet
================================================================================
========
2. USAGE
========
2.1 afserver
------------
Basic options:
-n, --hostname - it's used when creating listening sockets
(default: '')
-l, --listenport - listening port number - users connect
to it (default: 50127)
-m, --manageport - manage port number - second part of the active
port forwarder connects to it (default: 50126)
-h, --help - prints this help
Authorization:
--pass - set the password used for client identification
(default: no password)
Configuration:
-c, --cerfile - the name of the file with certificate
(default: cacert.pem)
-k, --keyfile - the name of the file with RSA key (default: server.rsa)
-f, --cfgfile - the name of the file with the configuration for the
active forwarder (server)
-D, --dateformat - format of the date printed in logs (see 'man strftime'
for details) (default: %d.%m.%Y %H:%M:%S)
-t, --timeout - the timeout value for the client's connection
(default: 5)
-u, --users - the amount of users allowed to use this server
(default: 5)
-C, --clients - the number of allowed clients to use this server
(default: 1)
-r, --realm - set the realm name (default: none)
-R, --raclients - the number of allowed clients in remote administration
mode to use this server (default: 1)
-U, --usrpcli - the number of allowed users per client (default: $users)
-M, --climode - strategy used for connecting users with clients
(default: 1)
Available strategies:
1. fill first client before go to next
-p, --proto - type of server (tcp|udp) - for which protocol it will
be operating (default: tcp)
-b, --baseport - listenports are temporary and differ for each client
--nossl - ssl is not used for transferring data (but it's still
used to establish a connection) (default: ssl is used)
--nozlib - zlib is not used for compressing data (default:
zlib is used)
--dnslookups - try to obtain dns names of the computers rather than
their numeric IP
Logging:
-O, --heavylog - logging everything to a logfile
-o, --lightlog - logging some data to a logfile
-S, --heavysocklog - logging everything to a localport
-s, --lightsocklog - logging some data to a localport
-v, --verbose - to be verbose - program won't enter the daemon mode
(use several times for greater effect)
IP family:
-4, --ipv4 - use ipv4 only
-6, --ipv6 - use ipv6 only
2.2 afclient
------------
Basic options:
-n, --servername - where the second part of the active
port forwarder is running (required)
-m, --manageport - manage port number - server must be
listening on it (default: 50126)
-d, --hostname - the name of this host/remote host - the final
destination of the packets (default: the name
returned by hostname function)
-p, --portnum - the port we are forwarding connection to (required)
-h, --help - prints this help
Authorization:
-i, --id - send the id string to afserver
--pass - set the password used for client identification
(default: no password)
Configuration:
-k, --keyfile - the name of the file with RSA key (default: client.rsa)
-D, --dateformat - format of the date printed in logs (see 'man strftime'
for details) (default: %d.%m.%Y %H:%M:%S)
Modes:
-u, --udpmode - udp mode - client will use udp protocol to
communicate with the hostname
-U, --reverseudp - reverse udp forwarding. Udp packets will be forwarded
from hostname:portnum (-p) to the server name:portnum
(-m)
-r, --remoteadmin - remote administration mode. (using '-p #port' will
force afclient to use port rather then stdin-stdout)
Logging:
-O, --heavylog - logging everything to a logfile
-o, --lightlog - logging some data to a logfile
-S, --heavysocklog - logging everything to a localport
-s, --lightsocklog - logging some data to a localport
-v, --verbose - to be verbose - program won't enter the daemon mode
(use several times for greater effect)
IP family:
-4, --ipv4 - use ipv4 only
-6, --ipv6 - use ipv6 only
Modules:
-l, --load - load a module for user's packets filtering
-L, --Load - load a module for service's packets filtering
================================================================================
==========================
3. ADMINISTRATION DISTANTE
==========================
Afclient peut être démarré en mode d'administration distante avec l'option '-r,
--remoteadmin'. L'option requise est: '-n, --servername NAME'.
Après autorisation, les flux stdin/stdout sont utilisés pour communiquer avec
l'utilisateur. La prise en compte des commandes est effectuée par afserver.
Les commandes disponibles sont:
help
display help
lcmd
lists available commands
info
prints info about server
rshow
display realms
cshow X
display clients in X realm
ushow X
display users in X realm
quit
quit connection
Afclient se positionne en écoute sur NAME:PORT avec '-p, --portnum PORT'. NAME
est positionné avec l'option '-d, --hostname' ou par la fonction hostname() si
l'argument n'est pas fourni.
Quand l'utilisateur quitte (termine la connexion ou envoie la commande 'quit'),
afclient se termine.
================================================================================
==========
4. MODULES
==========
Afclient peut utiliser des modules externes pour le filtrage des paquets ('-l,
--load') utilisateurs et pour le filtrage des paquets service ('-L, --Load').
Le fichier contenant les modules doit déclarer trois fonctions :
char* info(void);
info() return values:
- info about module
Example:
char*
info(void)
{
return "Module tester v0.1";
}
int allow(char* host, char* port);
allow() return values:
0 - allow to connect
!0 - drop the connection
Example:
int
allow(char* host, char* port)
{
return 0; /* allow to connect */
}
int filter(char* host, unsigned char* message, int* length);
filter() return values:
0 - allow to transfer
1 - drop the packet
2 - drop the connection
3 - release the module
4 - drop the packet and release the module
5 - drop the connection and release the module
Example:
int
filter(char* host, unsigned char* message, int* length)
{
int i;
for (i = 1; i < *length; ++i) {
if (message[i-1] == 'M') {
if (message[i] == '1') {
return 1; /* ignored */
}
if (message[i] == '2') {
return 2; /* dropped */
}
if (message[i] == '3') {
return 3; /* release */
}
if (message[i] == '4') {
return 4; /* ignored + release */
}
if (message[i] == '5') {
return 5; /* dropped + release */
}
}
}
return 0; /* allow to transfer */
}
Les modules doivent être compilés avec les options '-fPIC -shared'.
================================================================================
===========
5. EXEMPLES
===========
5.1 tcp mode
------------
local network |FireWall| Internet
||
|| User 1
|| /(tcp)
AF Client <---Encrypted/Compressed channel---> AF Server
/ || | \(tcp)
/(tcp) || (tcp)| User 2
/ || \
Http server || User 3
||
L'utilisation de Af est extrèmement simple. Supposons que nous voulons mettre en
place un serveur http sur notre station et que nous sommes masqueradés ou placé
derrière un firewall:
1) Nous devons tout d'abord trouver une station sur internet avec une IP
publique et un shell.
2) Utilisez ensuite make pour compiler Af sur cette machine. (Vous pouvez par la
suite supprimer les fichiers afclient et client.rsa)
3) Editez le fichier de configuration ou entrez sur la console: (pour utiliser
la configuration, entrez type -f <cfgfile>)
$ ./afserver
Si vous voulez utiliser les valeurs par défaut:
- Le nom d'hôte sera pris en compte par la fonction hostname (Il serait idéal
qu'il soit référencé dans le fichier /etc/hosts)
- Le serveur sera en écoute pour les utilisateurs sur le port 50127
- Le serveur sera en écoute pour le client sur le port 50126
- Le serveur sera limité à 5 utilisateurs
- Le serveur retransmettra les paquets tcp
- Aucun log ou message verbeux ne sera activé
4) Nous utilisons make sur notre propre station (Nous pouvons ensuite supprimer
tous les fichiers sauf afclient et client.rsa)
5) Nous entrons sur la console:
$ ./afclient -n <name of the server> -p 80
Où <name of the server> est une chaîne du type : 'bastion.univ.gda.pl' ou
'153.19.7.200'
6) Nous pouvons ensuite utiliser notre navigateur web avec :
<name of the server>:50127 et nous atteindrons notre propre station.
5.2 reverse udp mode
--------------------
local network |FireWall| Internet
|| (udp)
|| User 1-------AF Client
|| /(tcp)
AF Client <---Encrypted/Compressed channel---> AF Server
/ || |
/(udp) || (tcp)|
/ || /
Game server || AF Client-------User 2
|| (udp)
Regardons comment nous pouvons utiliser af pour forwarder des paquets udp.
Supposez que nous voulons mettre en place un serveur de jeu sur notre station
(port udp 27960 sur notre station):
1) - 4) sont les mêmes que pour l'exemple 1.
5) Nous entrons sur la console:
$ ./afclient -u -n <name of the server> -p 27960
Où <name of the server> est un nom (ou une ip) d'un hôte sur lequel notre
serveur tourne.
6) Nous connecter à notre jeu est un peu plus compliqué. L'utilisateur doit se
servir de afclient pour cela.
Il doit spécifier le serveur auquel il veut se connecter et le port sur
lequel son programme sera en écoute:
$ ./afclient -U -d <hostname> -p <portnum> -n <name of the server> -m\
<server port>
Où <hostname> est le nom de la station utilisateur (qui veut se connecter à
notre jeu). <portnum> est le port auquel il se connectera. <name of the
server> est le nom de l'hôte sur lequel notre serveur tourne. <server port>
est le port sur lequel notre serveur est en écoute pour les utilisateurs.
Pour se connecter à notre jeu, l'utilisateur doit se connecter à <hostname>:
<portnum>.
================================================================================
================
6. BUGS/PROBLEMS
================
Aucun bug n'est connu ou en cours de résolution à ce moment.
================================================================================
=====
NOTES
=====
Active port forwarder est toujours en phase en développement, alors envoyez moi
vos commentaires, les bugs que vous rencontrez et vos suggestions à
<jeremian [at] poczta.fm>
Si vous rencontrez des problèmes ou voulez partager vos opinions , vous pouvez
poster un message sur le forum http://gray-world.net/board/.
================================================================================
======
THANKS
======
Remerciements à l'équipe GW:
à Alex <alex [at] gray-world.net>
et Simon <scastro [at] entreelibre.com> pour les tests de AF et de nombreux
conseils.
Merci à Ilia Perevezentsev <iliaper [at] mail.ru> qui a lu et corrigé le
fichier README.
Merci à Marco Solari <marco.solari [at] koinesistemi.it> pour de nombreuses
requêtes, suggestions et idées.
Et merci à vous pour l'utilisation de cet outil.
LICENCE
-------
Active Port Forwarder est distribué sous les termes de la licence GNU -
General Public Licence version 2.0 et est copyright (c)2003,2004,2005 jeremian
<jeremian [at] poczta.fm>.
Consultez le fichier COPYING pour plus de details.
|