|
1 | 1 | /**
|
2 | 2 | * Tempesta FW
|
3 | 3 | *
|
4 |
| - * Copyright (C) 2022-2024 Tempesta Technologies, Inc. |
| 4 | + * Copyright (C) 2022-2025 Tempesta Technologies, Inc. |
5 | 5 | *
|
6 | 6 | * This program is free software; you can redistribute it and/or modify it
|
7 | 7 | * under the terms of the GNU General Public License as published by
|
|
39 | 39 | ! code that fills its value !
|
40 | 40 | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
41 | 41 | */
|
42 |
| -#define ACCESS_LOG_LINE(FIXED, UNTRUNCATABLE, TRUNCATABLE) \ |
43 |
| - FIXED(__BNR) \ |
44 |
| - UNTRUNCATABLE(client_ip) \ |
45 |
| - FIXED(" \"") \ |
46 |
| - UNTRUNCATABLE(vhost) \ |
47 |
| - FIXED("\" \"") \ |
48 |
| - UNTRUNCATABLE(method) \ |
49 |
| - FIXED(" ") \ |
50 |
| - TRUNCATABLE(uri) \ |
51 |
| - FIXED(" ") \ |
52 |
| - UNTRUNCATABLE(version) \ |
53 |
| - FIXED("\" ") \ |
54 |
| - UNTRUNCATABLE(status) \ |
55 |
| - FIXED(" ") \ |
56 |
| - UNTRUNCATABLE(content_length) \ |
57 |
| - FIXED(" \"") \ |
58 |
| - TRUNCATABLE(referer) \ |
59 |
| - FIXED("\" \"") \ |
60 |
| - TRUNCATABLE(user_agent) \ |
| 42 | +#define ACCESS_LOG_LINE(FIXED, UNTRUNCATABLE, TRUNCATABLE) \ |
| 43 | + FIXED(__BNR) \ |
| 44 | + UNTRUNCATABLE(client_ip) \ |
| 45 | + FIXED(" \"") \ |
| 46 | + UNTRUNCATABLE(vhost) \ |
| 47 | + FIXED("\" \"") \ |
| 48 | + UNTRUNCATABLE(method) \ |
| 49 | + FIXED(" ") \ |
| 50 | + TRUNCATABLE(uri) \ |
| 51 | + FIXED(" ") \ |
| 52 | + UNTRUNCATABLE(version) \ |
| 53 | + FIXED("\" ") \ |
| 54 | + UNTRUNCATABLE(status) \ |
| 55 | + FIXED(" ") \ |
| 56 | + UNTRUNCATABLE(content_length) \ |
| 57 | + FIXED(" \"") \ |
| 58 | + TRUNCATABLE(referer) \ |
| 59 | + FIXED("\" \"") \ |
| 60 | + TRUNCATABLE(user_agent) \ |
| 61 | + FIXED("\" \"") \ |
| 62 | + UNTRUNCATABLE(ja5_tls) \ |
| 63 | + FIXED("\" \"") \ |
| 64 | + UNTRUNCATABLE(ja5_http) \ |
61 | 65 | FIXED("\"")
|
62 | 66 |
|
| 67 | + |
63 | 68 | #define ACCESS_LOG_OFF 0
|
64 | 69 | #define ACCESS_LOG_DMESG 1
|
65 | 70 | #define ACCESS_LOG_MMAP 2
|
@@ -289,6 +294,9 @@ do_access_log_req_mmap(TfwHttpReq *req, u16 resp_status,
|
289 | 294 | char *data, *p;
|
290 | 295 | struct timespec64 ts;
|
291 | 296 | u16 len;
|
| 297 | + TlsJa5t *tls_ja5t = TFW_CONN_TLS(req->conn) ? |
| 298 | + &tfw_tls_context(req->conn)->sess.ja5t : NULL; |
| 299 | + |
292 | 300 |
|
293 | 301 | room_size = tfw_mmap_buffer_get_room(mmap_buffer, &data);
|
294 | 302 | if (room_size < sizeof(TfwBinLogEvent))
|
@@ -363,6 +371,12 @@ do_access_log_req_mmap(TfwHttpReq *req, u16 resp_status,
|
363 | 371 | req->h_tbl->tbl + TFW_HTTP_HDR_USER_AGENT);
|
364 | 372 | WRITE_STR_FIELD(ua);
|
365 | 373 |
|
| 374 | + if (tls_ja5t) |
| 375 | + WRITE_FIELD(*tls_ja5t); |
| 376 | + else |
| 377 | + TFW_MMAP_LOG_FIELD_RESET(event, TFW_MMAP_LOG_JA5T); |
| 378 | + WRITE_FIELD(req->ja5h); |
| 379 | + |
366 | 380 | if (*dropped) {
|
367 | 381 | WRITE_FIELD(*dropped);
|
368 | 382 | *dropped = 0;
|
@@ -394,10 +408,12 @@ do_access_log_req_dmesg(TfwHttpReq *req, int resp_status, unsigned long resp_con
|
394 | 408 | BasicStr client_ip, vhost, method, version;
|
395 | 409 | /* These fields are only here to hold estimation of appropriate fields
|
396 | 410 | * length in characters */
|
397 |
| - BasicStr status, content_length; |
| 411 | + BasicStr status, content_length, ja5_tls, ja5_http; |
398 | 412 | BasicStr missing = { "-", 1 };
|
399 | 413 | TfwStr truncated_in[TRUNCATABLE_FIELDS_COUNT];
|
400 | 414 | BasicStr truncated_out[TRUNCATABLE_FIELDS_COUNT];
|
| 415 | + TlsJa5t *tls_ja5t = TFW_CONN_TLS(req->conn) ? |
| 416 | + &tfw_tls_context(req->conn)->sess.ja5t : NULL; |
401 | 417 |
|
402 | 418 | /* client_ip
|
403 | 419 | *
|
@@ -466,6 +482,15 @@ do_access_log_req_dmesg(TfwHttpReq *req, int resp_status, unsigned long resp_con
|
466 | 482 | ADD_HDR(idx_referer, TFW_HTTP_HDR_REFERER);
|
467 | 483 | ADD_HDR(idx_user_agent, TFW_HTTP_HDR_USER_AGENT);
|
468 | 484 |
|
| 485 | +#define FMT_ja5_tls "ja5t=%llx" |
| 486 | +#define ARG_ja5_tls , (tls_ja5t ? *(u64 *)tls_ja5t : 0) |
| 487 | + ja5_tls.data = ""; |
| 488 | + ja5_tls.len = 16; |
| 489 | +#define FMT_ja5_http "ja5h=%llx" |
| 490 | +#define ARG_ja5_http , (*(u64 *)&req->ja5h) |
| 491 | + ja5_http.data = ""; |
| 492 | + ja5_http.len = 16; |
| 493 | + |
469 | 494 | /* Now we calculate first estimation of
|
470 | 495 | * "maximum allowed truncated string length" */
|
471 | 496 | #define ESTIMATE_FIXED(str) + (sizeof(str) - 1)
|
@@ -519,6 +544,10 @@ do_access_log_req_dmesg(TfwHttpReq *req, int resp_status, unsigned long resp_con
|
519 | 544 | #undef FMT_vhost
|
520 | 545 | #undef ARG_client_ip
|
521 | 546 | #undef FMT_client_ip
|
| 547 | +#undef FMT_ja5_tls |
| 548 | +#undef ARG_ja5_tls |
| 549 | +#undef FMT_ja5_http |
| 550 | +#undef ARG_ja5_http |
522 | 551 | }
|
523 | 552 |
|
524 | 553 | void
|
|
0 commit comments