From bfc996e50ece50c247b10ab9e22323c629d2ecd4 Mon Sep 17 00:00:00 2001 From: Admin MPCZ Date: Wed, 15 Apr 2026 10:57:46 +0200 Subject: [PATCH] Add SANEF Qualys Tags V3 ref (docx + xlsx) dans deploy/docs/ - tools/gen_tags_v3_xlsx.py: generateur Excel (3 sheets: DYN / STAT / Prefixes) - deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.docx: reference Word - deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.xlsx: reference Excel --- .../docs/SANEF_Qualys_Tags_V3_RuleTypes.docx | Bin 0 -> 38622 bytes .../docs/SANEF_Qualys_Tags_V3_RuleTypes.xlsx | Bin 0 -> 8298 bytes tools/gen_tags_v3_xlsx.py | 144 ++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.docx create mode 100644 deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.xlsx create mode 100644 tools/gen_tags_v3_xlsx.py diff --git a/deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.docx b/deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.docx new file mode 100644 index 0000000000000000000000000000000000000000..68c387d18b72c7937c0860465df1235151580475 GIT binary patch literal 38622 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 literal 0 HcmV?d00001 diff --git a/deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.xlsx b/deploy/docs/SANEF_Qualys_Tags_V3_RuleTypes.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..eb485862f260acf89c16d941394acc434b4329d5 GIT binary patch literal 8298 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 vf54&ye}VspS$fIyQoaA-dH37{_!niDmw|ciF#q Rule Type + QQL/Regex + couleur. + +Usage: + python tools/gen_tags_v3_xlsx.py [chemin_sortie.xlsx] +""" +import sys +from pathlib import Path + +try: + from openpyxl import Workbook + from openpyxl.styles import Font, PatternFill, Alignment, Border, Side + from openpyxl.utils import get_column_letter +except ImportError: + print("[ERR] pip install openpyxl") + sys.exit(1) + + +TAGS = [ + ("OS-LIN", "Operating System", "Linux", "4CAF50"), + ("OS-WIN", "Operating System", "Windows", "2196F3"), + ("OS-WIN-SRV", "Operating System", "Windows Server", "1976D2"), + ("OS-ESX", "Operating System", "ESXi", "9C27B0"), + ("ENV-PRD", "Asset Search", "name: vp* or name: sp* or name: lp* or name: ls-*", "F44336"), + ("ENV-REC", "Asset Search", "name: vr* or name: sr* or name: lr*", "FF9800"), + ("ENV-PPR", "Asset Search", "name: vi* or name: si* or name: vo*", "FFC107"), + ("ENV-TST", "Asset Search", "name: vv* or name: vt*", "CDDC39"), + ("ENV-DEV", "Asset Search", "name: vd* or name: sd*", "8BC34A"), + ("EQT-VIR", "Asset Search", "name: v*", "00BCD4"), + ("EQT-SRV", "Asset Search", "name: l* or name: s*", "03A9F4"), + ("EQT-SWI", "Asset Search", "name: n*", "4DD0E1"), + ("POS-FL", "Asset Search", 'name: "*bot*" or name: "*boo*" or name: "*boc*" or name: "*afl*" or name: "*sup*"', "009688"), + ("POS-INF", "Asset Search", 'name: "*dsi*" or name: "*cyb*" or name: "*iad*" or name: "*bur*" or name: "*ecm*" or name: "*log*" or name: "*vid*" or name: "*ges*" or name: "*mon*"', "3F51B5"), + ("POS-PEA", "Asset Search", 'name: "*pea*" or name: "*osa*" or name: "*svp*" or name: "*adv*" or name: "*rpa*" or name: "*rpn*" or name: "ls-*"', "673AB7"), + ("POS-TRA", "Asset Search", 'name: "*ame*" or name: "*tra*" or name: "*dai*" or name: "*pat*" or name: "*rau*" or name: "*dep*" or name: "*exp*" or name: "*sig*" or name: "*air*"', "E91E63"), + ("POS-BI", "Asset Search", 'name: "*dec*" or name: "*sas*" or name: "*bip*" or name: "*apt*" or name: "*pbi*" or name: "*rep*"', "FF5722"), + ("POS-GES", "Asset Search", 'name: "*int*" or name: "*agt*" or name: "*pin*" or name: "*ech*"', "795548"), + ("POS-DMZ", "Asset Search", 'name: "*ssi*"', "607D8B"), + ("TAG-OBS", "Operating System", r"Windows Server 2008|Windows Server 2012|CentOS release 6|Red Hat Enterprise Linux Server release 6", "B71C1C"), + ("TAG-EMV", "Asset Search", 'name: "*emv*" or name: "*pci*"', "D500F9"), +] + +STATIC_MANUAL = [ + ("TAG-SED", "Securite Exposition Directe — IP publique / NAT direct", "C62828"), + ("TAG-SEI", "Securite Exposition Indirecte — derriere frontal", "EF6C00"), + ("TAG-DEC", "Decommissionnement en cours", "6D4C41"), + ("TAG-INT", "Integration / Implementation en cours", "FDD835"), + ("TAG-SIC", "Zone SIC — Systeme Information Classifie", "1A237E"), + ("TAG-SIA", "Zone SIA — Systeme Information Administration", "283593"), +] + +PREFIXES = [ + ("APP-xxx", "Application hebergee — APP-SAT, APP-JIRA, APP-GLPI..."), + ("BDD-xxx", "Type de base de donnees — BDD-ORA, BDD-PG, BDD-SQL..."), + ("VRF-xxx", "VRF reseau — VRF-TRAFIC, VRF-EMV..."), + ("MID-xxx", "Middleware — MID-TOMCAT, MID-HAPROXY..."), +] + + +def main(): + out = Path(sys.argv[1]) if len(sys.argv) > 1 else Path("SANEF_Qualys_Tags_V3_RuleTypes.xlsx") + + wb = Workbook() + + thin = Side(border_style="thin", color="CCCCCC") + border = Border(left=thin, right=thin, top=thin, bottom=thin) + header_font = Font(bold=True, color="FFFFFF", size=11) + header_fill = PatternFill(start_color="1F4E79", end_color="1F4E79", fill_type="solid") + mono_font = Font(name="Consolas", size=10) + mono_bold = Font(name="Consolas", size=10, bold=True) + + # Feuille 1 : Dynamiques + ws = wb.active + ws.title = "Tags Dynamiques (DYN)" + headers = ["Tag", "Couleur (hex)", "Rule Type", "Valeur à saisir"] + for i, h in enumerate(headers, 1): + c = ws.cell(row=1, column=i, value=h) + c.font = header_font + c.fill = header_fill + c.alignment = Alignment(horizontal="center", vertical="center") + c.border = border + + for idx, (tag, rule, value, color) in enumerate(TAGS, start=2): + ws.cell(row=idx, column=1, value=tag).font = mono_bold + col_cell = ws.cell(row=idx, column=2, value=f"#{color}") + col_cell.font = Font(color="FFFFFF", size=10) + col_cell.fill = PatternFill(start_color=color, end_color=color, fill_type="solid") + col_cell.alignment = Alignment(horizontal="center") + ws.cell(row=idx, column=3, value=rule) + val_cell = ws.cell(row=idx, column=4, value=value) + val_cell.font = mono_font + val_cell.alignment = Alignment(wrap_text=True, vertical="top") + for col in range(1, 5): + ws.cell(row=idx, column=col).border = border + + widths = [14, 14, 22, 90] + for i, w in enumerate(widths, 1): + ws.column_dimensions[get_column_letter(i)].width = w + ws.row_dimensions[1].height = 22 + ws.freeze_panes = "A2" + + # Feuille 2 : Statiques manuels + ws2 = wb.create_sheet("Tags Statiques (STAT)") + headers2 = ["Tag", "Couleur (hex)", "Signification / Action"] + for i, h in enumerate(headers2, 1): + c = ws2.cell(row=1, column=i, value=h) + c.font = header_font + c.fill = header_fill + c.alignment = Alignment(horizontal="center", vertical="center") + c.border = border + + for idx, (tag, desc, color) in enumerate(STATIC_MANUAL, start=2): + ws2.cell(row=idx, column=1, value=tag).font = mono_bold + col_cell = ws2.cell(row=idx, column=2, value=f"#{color}") + col_cell.font = Font(color="FFFFFF", size=10) + col_cell.fill = PatternFill(start_color=color, end_color=color, fill_type="solid") + col_cell.alignment = Alignment(horizontal="center") + ws2.cell(row=idx, column=3, value=desc) + for col in range(1, 4): + ws2.cell(row=idx, column=col).border = border + + for i, w in enumerate([14, 14, 80], 1): + ws2.column_dimensions[get_column_letter(i)].width = w + ws2.freeze_panes = "A2" + + # Feuille 3 : Prefixes + ws3 = wb.create_sheet("Prefixes manuels") + for i, h in enumerate(["Prefixe", "Description"], 1): + c = ws3.cell(row=1, column=i, value=h) + c.font = header_font + c.fill = header_fill + c.alignment = Alignment(horizontal="center") + c.border = border + for idx, (p, d) in enumerate(PREFIXES, start=2): + ws3.cell(row=idx, column=1, value=p).font = mono_bold + ws3.cell(row=idx, column=2, value=d) + ws3.column_dimensions["A"].width = 14 + ws3.column_dimensions["B"].width = 70 + + wb.save(out) + print(f"[OK] Genere: {out.resolve()}") + + +if __name__ == "__main__": + main()