Compare commits

..

60 Commits

Author SHA1 Message Date
040723cb62 aufgabe 2026-01-22 10:41:46 +01:00
d3ca9ec5ab . 2026-01-22 08:13:41 +01:00
5ae531e693 . 2026-01-22 08:13:22 +01:00
b69792bba3 . 2026-01-21 15:59:05 +01:00
c92c11c2d9 neue Config 2026-01-21 15:02:47 +01:00
d6b5dc9d84 Merge branch 'main' of https://gitea.home.meszely.eu/wpanda/WPanda 2026-01-21 08:45:51 +01:00
8daa5c88b8 Update Doc/Default-01.md 2026-01-20 10:53:08 +00:00
cfe5a04493 . 2026-01-19 10:38:30 +01:00
b8dbd072e2 token 2026-01-13 12:54:58 +01:00
c29038b12b home metwerk 2026-01-09 09:39:14 +01:00
2ed985d1fd . 2026-01-09 09:30:41 +01:00
0d6c20977d . 2026-01-08 16:19:47 +01:00
81482d242f . 2026-01-08 16:19:35 +01:00
052760c16a . 2026-01-08 12:05:58 +01:00
122fefc8fb platz 2026-01-05 16:27:23 +01:00
f744218d13 . 2026-01-05 15:38:45 +01:00
1264669091 telefonnummer 2026-01-05 10:20:23 +01:00
c4b0d84098 update 2025-12-31 12:20:58 +01:00
d434a76112 aufgabe aktuallisieren 2025-12-30 15:37:37 +01:00
8f97789f8c aufgabe_arbeit 2025-12-30 14:26:42 +01:00
ffb2a3990f config bild 2025-12-30 09:44:17 +01:00
be3c1f3c2b smtp_onprem_relay 2025-12-30 09:36:10 +01:00
873ea868b5 . 2025-12-30 07:40:05 +01:00
b2896f3ec2 korrigieren mysql and n8n image 2025-12-29 15:20:31 +01:00
649bc1d7ed toolbox start. 2025-12-29 12:41:55 +01:00
1ba829b916 Merge branch 'main' of https://gitea.home.meszely.eu/wpanda/WPanda 2025-12-29 09:52:50 +01:00
c0f0a3a006 . 2025-12-29 09:52:39 +01:00
5f6b018e24 config updates 2025-12-29 09:51:23 +01:00
4f9d2cbe45 Token 2025-12-28 12:20:06 +01:00
dec72e160b . 2025-12-24 12:29:28 +01:00
0f36436c77 . 2025-12-24 12:25:44 +01:00
f3c52ffb6f uj fedora n8n 2025-12-24 12:25:30 +01:00
9ec0266942 . 2025-12-24 11:40:43 +01:00
3a939bd601 . 2025-12-24 11:40:18 +01:00
14ba01f51b n8n execute_command 2025-12-24 11:33:44 +01:00
63e404a2f2 n8n update 2025-12-24 08:30:00 +01:00
38c21cf5c2 . 2025-12-23 14:43:16 +01:00
0f35e8a69c putzen 2025-12-23 12:59:36 +01:00
a931f3b3b9 . 2025-12-23 12:16:26 +01:00
a798cfc7a3 environment . 2025-12-23 09:40:33 +01:00
8c38397073 plusz files 2025-12-22 15:43:31 +01:00
e0e34aa006 . 2025-12-22 15:41:53 +01:00
ca2b58d465 . 2025-12-22 14:53:29 +01:00
7edb177425 . 2025-12-22 12:35:31 +01:00
2c23be7f56 pär modositäs 2025-12-22 12:28:41 +01:00
d9f5baa9d3 mysql_n8n image 2025-12-22 12:06:07 +01:00
cbc3947df0 neu n8n 2025-12-22 11:38:37 +01:00
7b5f382503 . 2025-12-22 11:34:32 +01:00
54bfe7bdc4 n8n update 2025-12-22 10:46:24 +01:00
0fc4011e9a Backup 2025-12-22 08:46:03 +01:00
87d9592e7d N8n konténer véglegesitése 2025-12-19 17:56:56 +01:00
8017dbdbad docker image kibövitése n8n -el 2025-12-19 17:15:50 +01:00
f366b9f0a0 . 2025-12-19 17:06:13 +01:00
b178fe4c58 environment beällitäsa 2025-12-19 17:04:39 +01:00
dbb53ba9fe . 2025-12-19 16:55:25 +01:00
7b16c4e3ae . 2025-12-19 16:42:18 +01:00
db6579b98e uj dockerfile 2025-12-19 16:12:59 +01:00
71af9274ac alap panda n8n image 2025-12-19 16:07:45 +01:00
907876a01f N8n image modositäsa 2025-12-19 15:55:11 +01:00
08313ceb11 uj project 2025-12-19 15:00:50 +01:00
70 changed files with 856 additions and 360 deletions

5
.gitignore vendored Normal file
View File

@@ -0,0 +1,5 @@
/Dev/mysql_n8n_db/data
/Dev/mysql_n8n_db/mysql-data
Backup/Sophos/APS_HH.scx
*.log
*.log

View File

@@ -0,0 +1,7 @@
# gemini-cli-docker - Api Key
AIzaSyD8wPpdT1UQboFvzYwxeI9zEcqoPU0-SVo
# Get your key from Google Cloud Console
export GOOGLE_API_KEY="YOUR_API_KEY"
export GOOGLE_GENAI_USE_VERTEXAI=true
gemini

View File

@@ -0,0 +1,6 @@
[INFO] Installation ready.
[INFO] Your ISPConfig admin password is: QHkrBqD46fMqWtr neue : nqhHDGE5mDAmMpN
[INFO] Your MySQL root password is: mp5dyLAzhyvbQyndweXd
[INFO] Warning: Please delete the log files in /root/ispconfig-install-log/setup-* once you don't need them anymore because they contain your passwords!

96
Backup/Sophos/APS_HH.tgb Normal file
View File

@@ -0,0 +1,96 @@
# Do not edit this file. It is overwritten by VpnConf.
# SIGNATURE MD5 = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Creation Date : 2025-12-22 at 13:34:35
# Written by CyberoamServer XGS3300_RL01_SFOS 21.5.0 GA-Build171
# Client Version :
# CyberoamVPNClient :3.11.008
# IKE Service :3.10.08,02.13
[General]
Shared-SADB = Defined
Retransmits = 5
Exchange-max-time = 10
Default-phase-1-lifetime = 46800,360:86400
Bitblocking = 0
Xauth-interval = 20
DPD-interval = 30
DPD_retrans = 7
DPD_wait = 30
[Default-phase-2-lifetime]
LIFE_TYPE = SECONDS
LIFE_DURATION = 43200,360:86400
# ==================== PHASES 1 ====================
[Phase 1]
185.164.230.171 = APS_HH-P1
[APS_HH-main-mode]
DOI = IPSEC
EXCHANGE_TYPE = ID_PROT
Transforms = AES256-SHA2_256-GRP21
[AES256-SHA2_256-GRP21]
ENCRYPTION_ALGORITHM = AES_CBC
KEY_LENGTH = 256,128:256
HASH_ALGORITHM = SHA2_256
GROUP_DESCRIPTION = ECP521
AUTHENTICATION_METHOD = PRE_SHARED
Life = LIFE_MAIN_MODE
[APS_HH-P1]
Phase = 1
Family = IPV4
Address = 185.164.230.171
Transport = udp
Configuration = APS_HH-main-mode
Rconf = 1
Authentication = "tZfNkccrTq49wyvsxLak86jF"
Xauth = 0
Xpopup = 1
NATT_ENABLED = 1
# ==================== PHASES 2 ====================
[Phase 2]
Manual-connections = APS_HH-APS_HH1-P2
[APS_HH-APS_HH1-P2]
Phase = 2
ISAKMP-peer = APS_HH-P1
Remote-ID = APS_HH1-remote-addr
Configuration = APS_HH1-quick-mode
AutoStart = 0
USBStart = 0
# ==================== Ipsec ID ====================
[APS_HH1-remote-addr]
ID-type = IPV4_ADDR_SUBNET
Network = 0.0.0.0
Netmask = 0.0.0.0
# ==================== TRANSFORMS ====================
[APS_HH1-quick-mode]
DOI = IPSEC
EXCHANGE_TYPE = QUICK_MODE
Suites = APS_HH1-quick-mode-suite
[APS_HH1-quick-mode-suite]
Protocols = TGBQM-ESP-AES256-SHA2_256-PFSGRP21-TUN
[TGBQM-ESP-AES256-SHA2_256-PFSGRP21-TUN]
PROTOCOL_ID = IPSEC_ESP
Transforms = TGBQM-ESP-AES256-SHA2_256-PFSGRP21-TUN-XF
[TGBQM-ESP-AES256-SHA2_256-PFSGRP21-TUN-XF]
TRANSFORM_ID = AES
KEY_LENGTH = 256,128:256
AUTHENTICATION_ALGORITHM = HMAC_SHA2_256
GROUP_DESCRIPTION = ECP521
ENCAPSULATION_MODE = TUNNEL
Life = Default-phase-2-lifetime

15
Backup/Sophos/README Normal file
View File

@@ -0,0 +1,15 @@
The archive file contains IPsec remote access configuration files in .scx and .tgb formats.
.scx: Contains the advanced settings of Sophos Connect client in addition
to the other settings in the configuration. We recommend that
you use this format.
The advanced settings provide extra protection, such as running
AD logon scripts after the tunnel is established and offering
multi-factor authentication. They also allow you to split the
tunnel and connect the tunnel automatically.
These settings are available if your administrator has configured them. 
.tgb: Use this for other IPsec remote access clients. If you use this
format for Sophos  Connect clients, you wont get the advanced settings.

View File

@@ -0,0 +1,11 @@
[
{
"gateway": "vpn.aps-hh.de",
"user_portal_port": 7443,
"otp": false,
"auto_connect_host": "<Enter internal hostname or IP address>",
"can_save_credentials": false,
"check_remote_availability": false,
"run_logon_script": true
}
]

View File

@@ -0,0 +1,13 @@
## APS-PI001 - Linux Install
#
# IP
10.102.1.201/24
# GW
10.102.1.1
# DNS
10.102.1.30
10.102.1.31
# Default User
apslinux

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@@ -0,0 +1,3 @@
10.11.0.254 PandaNas wpanda - pan...#
10.11.3.101
10.11.0.252 PandaNasBackup wpanda - pan...#

View File

@@ -0,0 +1,2 @@
n8n Token :
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJkZDllNTkxOTI4YmM0Yjg0OTgzNjVlYWQ3Njk2MDdjMCIsImlhdCI6MTc2NjkxNzg3MSwiZXhwIjoyMDgyMjc3ODcxfQ.eCwpJQZzsCFwHL7FD6e13kZT6m8uFuVQhMGfmNA5fD8

View File

@@ -0,0 +1,7 @@
<<<<<<< HEAD
# Matrix - n8n-bot - Accesstoken
syt_Ym90LW44bg_RMzxOFQllPjSPsRWAHvb_0FeoGL
=======
# bot-n8n access token
syt_Ym90LW44bg_AbviDZpPwRhLydqppDvv_2OfdD8
>>>>>>> 2e10f37 (token)

View File

@@ -0,0 +1,9 @@
docker run -d \
--name pihole.home.meszely.eu \
--network pihole \
--ip 10.11.3.1 \
--cap-add=NET_ADMIN \
-e TZ=Europe/Berlin \
-v /Docker/PIHOLE:/etc/pihole \
--restart unless-stopped \
pihole/pihole:latest

1
Dev/fedora_toolbox/.env Normal file
View File

@@ -0,0 +1 @@
SSH_PASSWORD=virgI6774

View File

@@ -0,0 +1,47 @@
# Fedora alapimage használata
FROM fedora:latest
# Metaadatok az image-hez
LABEL maintainer="Your Name"
LABEL description="Fedora-based toolbox with SSH, nmap, and other utilities."
# Build-time argumentum a jelszóhoz
ARG SSH_PASSWORD
# Szükséges csomagok telepítése
RUN dnf -y update && \
dnf -y install \
openssh-server \
sudo \
nmap \
iputils \
procps-ng \
net-tools && \
dnf clean all
# SSH host kulcsok generálása
RUN ssh-keygen -A
# 'wpanda' felhasználó létrehozása és jelszó beállítása
# A jelszót a build-time argumentumból kapja
RUN useradd -m -s /bin/bash wpanda && \
echo "wpanda:${SSH_PASSWORD}" | chpasswd
# Jelszavas SSH bejelentkezés engedélyezése
RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config && \
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/' /etc/ssh/sshd_config
# 'wpanda' felhasználó hozzáadása a sudo csoporthoz jelszó bekérése nélkül
RUN echo 'wpanda ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
# Váltás a 'wpanda' felhasználóra
USER wpanda
# Munkakönyvtár beállítása a felhasználó home könyvtárára
WORKDIR /home/wpanda
# Az SSH port (22) megnyitása
EXPOSE 22
# Az SSH szerver indítása előtérben
CMD ["/usr/sbin/sshd", "-D"]

View File

@@ -0,0 +1,22 @@
version: '3.8'
services:
toolbox:
# Az image a jelenlegi könyvtárban lévő Dockerfile-ból épül
build:
context: .
args:
# Átadja az .env fájlból beolvasott SSH_PASSWORD változót a Dockerfile-nak
- SSH_PASSWORD=${SSH_PASSWORD}
# Konténer neve a könnyebb azonosíthatóságért
container_name: fedora-toolbox
# Hoszt port 2222 átirányítása a konténer 22-es portjára
# Azért nem a 22-t használjuk a hoszton, hogy ne ütközzön a gép saját SSH szolgáltatásával
ports:
- "2222:22"
# A külső 'data' könyvtár felcsatolása a konténeren belüli /home/wpanda helyre
# A 'data' könyvtár a Dev/fedora_toolbox/data útvonalon található
volumes:
- ./data:/home/wpanda
# A konténer automatikusan újraindul, hacsak nem állítod le kézzel
restart: unless-stopped

12
Dev/mysql/mysql_all/.env Normal file
View File

@@ -0,0 +1,12 @@
# Docker-Compose Environment Variables for MySQL
# Path for MySQL data storage on the host machine
# Az adatbázis adatai a 'Dev/mysql/data' mappába kerülnek mentésre.
# Ezt az elérési utat tetszés szerint módosíthatod.
MYSQL_DATA_PATH=/home/wpanda/mysql_data/sw_all_db
# MySQL Credentials
MYSQL_ROOT_PASSWORD=virgI6774
#MYSQL_DATABASE=switch_ip
#MYSQL_USER=switchip
#MYSQL_PASSWORD=virgI6774

View File

@@ -0,0 +1,20 @@
services:
mysql_ip:
image: mysql:latest
container_name: mysql_all_db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
# MYSQL_DATABASE: ${MYSQL_DATABASE}
# MYSQL_USER: ${MYSQL_USER}
# MYSQL_PASSWORD: ${MYSQL_PASSWORD}
ports:
- '3306:3306'
volumes:
- ${MYSQL_DATA_PATH}:/var/lib/mysql
networks:
- shared-network
networks:
shared-network:
external: true

View File

@@ -0,0 +1,12 @@
# Docker-Compose Environment Variables for MySQL
# Path for MySQL data storage on the host machine
# Az adatbázis adatai a '/home/wpanda/mysql_data/n8n_db' mappába kerülnek mentésre.
# Ezt az elérési utat tetszés szerint módosíthatod.
MYSQL_DATA_PATH=/home/wpanda/mysql_data/n8n_db
# MySQL Credentials
MYSQL_ROOT_PASSWORD=virgI6774
MYSQL_DATABASE=n8ndb
MYSQL_USER=n8n
MYSQL_PASSWORD=virgI6774

View File

@@ -0,0 +1,20 @@
services:
mysql_ip:
image: mysql:latest
container_name: mysql_n8n_db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
ports:
- '3336:3306'
volumes:
- ${MYSQL_DATA_PATH}:/var/lib/mysql
networks:
- shared-network
networks:
shared-network:
external: true

View File

@@ -3,7 +3,7 @@
# Path for MySQL data storage on the host machine
# Az adatbázis adatai a 'Dev/mysql/data' mappába kerülnek mentésre.
# Ezt az elérési utat tetszés szerint módosíthatod.
MYSQL_DATA_PATH=/data/mysql_sw_fw
MYSQL_DATA_PATH=/home/wpanda/mysql_data/sw_fw_db
# MySQL Credentials
MYSQL_ROOT_PASSWORD=virgI6774

View File

@@ -0,0 +1,25 @@
# MySQL Docker Container
This directory contains the configuration for running MySQL in a Docker container.
## Configuration
The configuration is managed through the `.env` file. You can change the following variables:
- `MYSQL_DATA_PATH`: The local directory where the database data will be stored. By default, it's set to `./data` within this directory.
- `MYSQL_ROOT_PASSWORD`: The root password for the MySQL instance.
- `MYSQL_DATABASE`: The name of the database to be created on startup.
- `MYSQL_USER`: The username for a non-root user.
- `MYSQL_PASSWORD`: The password for the non-root user.
## Usage
To start the container, navigate to this directory (`Dev/mysql`) and run the following command:
```bash
docker-compose up -d
```
To stop the container:
```bash
docker-compose down
```

View File

@@ -3,7 +3,7 @@
# Path for MySQL data storage on the host machine
# Az adatbázis adatai a 'Dev/mysql/data' mappába kerülnek mentésre.
# Ezt az elérési utat tetszés szerint módosíthatod.
MYSQL_DATA_PATH=/data/mysql_sw_ip
MYSQL_DATA_PATH=/home/wpanda/mysql_data/sw_ip_db
# MySQL Credentials
MYSQL_ROOT_PASSWORD=virgI6774

View File

@@ -0,0 +1,20 @@
CREATE TABLE clients (
id INT AUTO_INCREMENT PRIMARY KEY,
switch_name VARCHAR(255) NOT NULL COMMENT 'A switch hosztneve, amelyhez a kliens csatlakozik',
mac_address VARCHAR(17) NOT NULL UNIQUE COMMENT 'A kliens MAC címe (egyedi azonosító)',
interface VARCHAR(50) NOT NULL COMMENT 'A switch interfésze, amelyhez a kliens csatlakozik (pl. 1/1/3)',
vlan VARCHAR(10) NOT NULL COMMENT 'A kliens VLAN azonosítója',
ip_address VARCHAR(45) NOT NULL COMMENT 'A kliens IP címe (IPv4 vagy IPv6)',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT 'A rekord létrehozásának időpontja',
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'A rekord utolsó frissítésének időpontja'
) COMMENT='Hálózati kliensek adatainak tárolása switchenként';
**Magyarázat:**
* `id INT AUTO_INCREMENT PRIMARY KEY`: Egy automatikusan növekvő egyedi azonosító minden bejegyzéshez.
* `switch_name VARCHAR(255) NOT NULL`: A switch neve, amihez a kliens csatlakozik.
* `mac_address VARCHAR(17) NOT NULL UNIQUE`: A kliens MAC címe. `VARCHAR(17)` elég a `XX:XX:XX:XX:XX:XX` formátumhoz, és `UNIQUE` constraint-et is kapott, mivel ez az elsődleges egyedi azonosítója egy hálózati kliensnek.
* `interface VARCHAR(50) NOT NULL`: Az interfész, amelyhez a kliens csatlakozik.
* `vlan VARCHAR(10) NOT NULL`: A VLAN, amihez a kliens tartozik. `VARCHAR`-ként kezeltem, hogy rugalmasabb legyen, ha esetleg nem csak számok lennének.
* `ip_address VARCHAR(45) NOT NULL`: A kliens IP címe.
* `created_at` és `updated_at`: Automatikus időbélyegek a bejegyzés létrehozására és utolsó módosítására.

View File

@@ -0,0 +1,25 @@
# MySQL Docker Container
This directory contains the configuration for running MySQL in a Docker container.
## Configuration
The configuration is managed through the `.env` file. You can change the following variables:
- `MYSQL_DATA_PATH`: The local directory where the database data will be stored. By default, it's set to `./data` within this directory.
- `MYSQL_ROOT_PASSWORD`: The root password for the MySQL instance.
- `MYSQL_DATABASE`: The name of the database to be created on startup.
- `MYSQL_USER`: The username for a non-root user.
- `MYSQL_PASSWORD`: The password for the non-root user.
## Usage
To start the container, navigate to this directory (`Dev/mysql`) and run the following command:
```bash
docker-compose up -d
```
To stop the container:
```bash
docker-compose down
```

View File

@@ -1,2 +0,0 @@
# Docker run ID
getent group docker | cut -d: -f3

View File

@@ -1,17 +0,0 @@
# Use the official n8n image as a base
FROM n8nio/n8n:latest
# Switch to the root user to install packages
USER root
# Install docker-cli using the apk package manager
RUN apk add --no-cache docker-cli
# Install Python, pip, and required build dependencies
RUN apk add --no-cache python3 py3-pip build-base
# Install required Python packages
RUN pip install netmiko --break-system-packages
# Switch back to the non-privileged node user
USER node

View File

@@ -1,82 +0,0 @@
import json
# A bejövő adatok az n8n-től. A $items() függvénnyel hivatkozunk
# a korábbi node-okra a nevük alapján.
# Cseréld le a 'MySQL_Node_Neve' és 'Élő_Adat_Node_Neve' neveket
# a te munkafolyamatodban lévő node-ok tényleges nevére!
# Például:
# db_clients_items = $items("MySQL Client Fetch")
# live_clients_items = $items("Code (IP Scan Script)")
# Fontos: Ha az n8n Code node-jában futtatod, a $items funkciót közvetlenül használhatod.
# Ha külső szkriptként futtatod az "Execute Command" node-ból, akkor a bemenetet
# másképp kell kezelni (pl. parancssori argumentumként JSON stringet).
# Ez a kód az n8n Code node Python módjához készült.
db_clients_items = $items("MySQL_Node_Neve") # Ezt cseréld a MySQL node-od nevére
live_clients_items = $items("Élő_Adat_Node_Neve") # Ezt cseréld az élő adatokat adó Code node-od nevére
# Hozzuk létre a MAC cím alapján kereshető adathalmazokat
# Ellenőrizzük, hogy a bemeneti lista nem üres-e
db_clients = {}
if db_clients_items:
db_clients = {item.json['mac_address']: item.json for item in db_clients_items}
live_clients = {}
if live_clients_items:
live_clients = {item.json['mac_address']: item.json for item in live_clients_items}
differences = []
# 1. Új kliensek keresése (amik az élő adatokban vannak, de a DB-ben nem)
for mac, client_data in live_clients.items():
if mac not in db_clients:
differences.append({
"change_type": "ÚJ KLIENS",
"client": client_data
})
# 2. Eltávolított kliensek keresése (amik a DB-ben vannak, de az élő adatokban már nem)
for mac, client_data in db_clients.items():
if mac not in live_clients:
differences.append({
"change_type": "ELTÁVOLÍTOTT KLIENS",
"client": client_data
})
# 3. Változások keresése (pl. megváltozott az IP címe)
# Ez egy egyszerűbb példa, ami csak az IP-t figyeli.
# Ha több mezőt is figyelni akarsz, bővítsd ezt a részt.
for mac, live_data in live_clients.items():
if mac in db_clients:
db_data = db_clients[mac]
# Összehasonlítjuk az IP címet és a switch nevét
if live_data.get('ip_address') != db_data.get('ip_address') or \
live_data.get('switch_name') != db_data.get('switch_name') or \
live_data.get('interface') != db_data.get('interface') or \
live_data.get('vlan') != db_data.get('vlan'):
# Gyűjtsük össze a változásokat
changes = {}
if live_data.get('ip_address') != db_data.get('ip_address'):
changes['ip_address'] = {'from': db_data.get('ip_address'), 'to': live_data.get('ip_address')}
if live_data.get('switch_name') != db_data.get('switch_name'):
changes['switch_name'] = {'from': db_data.get('switch_name'), 'to': live_data.get('switch_name')}
if live_data.get('interface') != db_data.get('interface'):
changes['interface'] = {'from': db_data.get('interface'), 'to': live_data.get('interface')}
if live_data.get('vlan') != db_data.get('vlan'):
changes['vlan'] = {'from': db_data.get('vlan'), 'to': live_data.get('vlan')}
differences.append({
"change_type": "MEGVÁLTOZOTT KLIENS",
"client_mac": mac,
"changes": changes,
"current_data": live_data
})
# A 'return' paranccsal adjuk vissza a különbségeket.
# Ha a 'differences' lista üres, a workflow ezen az ágon megáll (ha nincsenek további node-ok,
# amik üres bemenettel is futnak).
return differences

View File

@@ -1,24 +0,0 @@
services:
n8n:
container_name: n8n
build: .
user: "node:1001"
restart: always
ports:
- "127.0.0.1:5678:5678"
environment:
- TZ=Europe/Hamburg
volumes:
- /mnt/c/Tools/docker/n8n:/home/node/.n8n
- /var/run/docker.sock:/var/run/docker.sock:Z
- /mnt/c/Users/i.meszely/Gitea/WPanda/Dev:/home/node/dev
networks:
- shared-network
volumes:
n8n_data:
driver: local
networks:
shared-network:
external: true

View File

@@ -1,11 +0,0 @@
docker run -d \
--name n8n \
--user "node:1001" \
--restart always \
-p 127.0.0.1:5678:5678 \
-e TZ=Europe/Hamburg \
-v /mnt/c/docker/n8n:/home/node/.n8n \
-v /var/run/docker.sock:/var/run/docker.sock \
--network n8n_n8n_network \
--ip 172.20.0.100 \
n8n

View File

@@ -1,105 +0,0 @@
import json
import os
import re
import csv
from datetime import datetime
from netmiko import ConnectHandler
from netmiko.exceptions import NetmikoTimeoutException, NetmikoAuthenticationException
def get_aruba_firmware(host, username, password):
"""
Connects to an Aruba switch, retrieves the hostname and firmware version.
Returns a dictionary with the collected data.
"""
device = {
'device_type': 'aruba_aoscx',
'host': host,
'username': username,
'password': password,
}
print(f"Csatlakozás a(z) {host} eszközhöz...")
try:
with ConnectHandler(**device) as net_connect:
print(f"Sikeres csatlakozás a(z) {host} eszközhöz. Firmware verzió lekérdezése...")
# Hostname lekérdezése a promptból
prompt = net_connect.find_prompt()
switch_hostname = prompt.strip('#> ')
# Firmware verzió lekérdezése
output = net_connect.send_command('show version')
firmware_version = "N/A"
# Reguláris kifejezés a firmware verzió megtalálásához
match = re.search(r"Version\s+:\s+(.*)", output)
if match:
firmware_version = match.group(1).strip()
return {
'switch_name': switch_hostname,
'ip_address': host,
'firmware_version': firmware_version
}
except NetmikoTimeoutException:
print(f"Hiba: Időtúllépés a(z) {host} eszközhöz való csatlakozáskor.")
return {'switch_name': 'N/A', 'ip_address': host, 'firmware_version': 'Timeout'}
except NetmikoAuthenticationException:
print(f"Hiba: Sikertelen hitelesítés a(z) {host} eszközön.")
return {'switch_name': 'N/A', 'ip_address': host, 'firmware_version': 'Auth Failed'}
except Exception as e:
print(f"Váratlan hiba történt a(z) {host} feldolgozása közben: {e}")
return {'switch_name': 'N/A', 'ip_address': host, 'firmware_version': f'Error: {e}'}
if __name__ == "__main__":
# Konfigurációs fájl beolvasása
try:
with open('config.json', 'r') as f:
config = json.load(f)
except FileNotFoundError:
print("Hiba: A 'config.json' fájl nem található.")
exit()
except json.JSONDecodeError:
print("Hiba: A 'config.json' fájl formátuma érvénytelen.")
exit()
SWITCH_IPS = config.get("switch_ips", [])
USERNAME = config.get("username")
PASSWORD = config.get("password")
if not all([SWITCH_IPS, USERNAME, PASSWORD]):
print("Hiba: A 'config.json' fájl hiányos. Tartalmaznia kell 'switch_ips', 'username', és 'password' kulcsokat.")
exit()
# Kimeneti mappa
OUTPUT_DIR = "results"
os.makedirs(OUTPUT_DIR, exist_ok=True)
timestamp = datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
CSV_FILENAME = os.path.join(OUTPUT_DIR, f"aruba_firmware_versions_{timestamp}.csv")
all_switches_firmware = []
for ip in SWITCH_IPS:
print(f"\n--- Feldolgozás: {ip} ---")
firmware_data = get_aruba_firmware(ip, USERNAME, PASSWORD)
if firmware_data:
all_switches_firmware.append(firmware_data)
print(f"Sikeresen lekérdezve: {firmware_data['switch_name']} ({firmware_data['ip_address']}) - Verzió: {firmware_data['firmware_version']}")
if all_switches_firmware:
print(f"\nÖsszesen {len(all_switches_firmware)} switch adat gyűjtve. Mentés a(z) {CSV_FILENAME} fájlba...")
fieldnames = ['switch_name', 'ip_address', 'firmware_version']
try:
with open(CSV_FILENAME, 'w', newline='', encoding='utf-8') as csvfile:
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(all_switches_firmware)
print(f"Sikeres mentés a(z) '{CSV_FILENAME}' fájlba.")
except IOError as e:
print(f"Hiba történt a CSV fájl írása közben: {e}")
else:
print("\nEgyetlen switch-ről sem sikerült adatot gyűjteni.")

View File

@@ -0,0 +1,29 @@
# Start from a standard Fedora base image
FROM fedora:latest
# Install necessary dependencies using dnf
# -y flag to auto-confirm.
# We need nodejs (which includes npm) and python3 with pip.
RUN dnf install -y nodejs python3 python3-pip && dnf clean all
# Now use npm to install n8n globally
RUN npm install -g n8n
# Create a non-root user 'node' for security
RUN groupadd -r node && useradd -r -g node -d /home/node -m -s /bin/bash node
# Create the directory for n8n's data and set permissions
RUN mkdir /home/node/.n8n && \
chown -R node:node /home/node/.n8n
# Switch to the non-root 'node' user
USER node
# Set the working directory to the n8n data directory
WORKDIR /home/node/.n8n
# Expose the n8n port
EXPOSE 5678
# Set the default command to start n8n
CMD [ "n8n" ]

View File

@@ -0,0 +1,22 @@
services:
n8n:
# image: n8nio/n8n:latest
build: .
restart: always
ports:
- "5678:5678"
volumes:
- ./n8n-data:/home/node/.n8n
- ./n8n-scripts:/home/node/.n8n/scripts
environment:
- N8N_HOST=${N8N_HOST:-localhost}
- N8N_PORT=5678
- N8N_PROTOCOL=${N8N_PROTOCOL:-http}
- WEBHOOK_URL=${WEBHOOK_URL:-http://localhost:5678/}
- NODES_EXCLUDE="[]"
# Ha használsz SSL/TLS-t, akkor ezeket is be kell állítanod
# - N8N_BASIC_AUTH_ACTIVE=true
# - N8N_BASIC_AUTH_USER=user
# - N8N_BASIC_AUTH_PASSWORD=password
labels:
- com.centurylinklabs.watchtower.enable=true

View File

@@ -0,0 +1,3 @@
{
"encryptionKey": "gJNeJ70E+q4GQeVLEJKttR199XSA0mbg"
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,5 @@
{
"name": "installed-nodes",
"private": true,
"dependencies": {}
}

View File

@@ -1,9 +1,6 @@
import os
import re
from datetime import datetime
import json
import requests
import sys
from netmiko import ConnectHandler
from netmiko.exceptions import NetmikoTimeoutException, NetmikoAuthenticationException
@@ -20,10 +17,10 @@ def get_aruba_clients(host, username, password):
}
all_clients_data = []
print(f"Csatlakozás a(z) {host} eszközhöz...")
print(f"Csatlakozás a(z) {host} eszközhöz...", file=sys.stderr)
try:
with ConnectHandler(**device) as net_connect:
print("Sikeres csatlakozás. Adatok lekérdezése...")
print("Sikeres csatlakozás. Adatok lekérdezése...", file=sys.stderr)
prompt = net_connect.find_prompt()
switch_hostname = prompt.strip('#> ')
@@ -48,86 +45,53 @@ def get_aruba_clients(host, username, password):
all_clients_data.append(client_data)
return all_clients_data
print("Hiba: A parancs kimenete nem volt a várt formátumban.")
print("Hiba: A parancs kimenete nem volt a várt formátumban.", file=sys.stderr)
return None
except NetmikoTimeoutException:
print(f"Hiba: Időtúllépés a(z) {host} eszközhöz való csatlakozáskor.")
print(f"Hiba: Időtúllépés a(z) {host} eszközhöz való csatlakozáskor.", file=sys.stderr)
return None
except NetmikoAuthenticationException:
print(f"Hiba: Sikertelen hitelesítés a(z) {host} eszközön. Ellenőrizd a jelszót.")
print(f"Hiba: Sikertelen hitelesítés a(z) {host} eszközön. Ellenőrizd a jelszót.", file=sys.stderr)
return None
except Exception as e:
print(f"Váratlan hiba történt: {e}")
print(f"Váratlan hiba történt: {e}", file=sys.stderr)
return None
if __name__ == "__main__":
# Konfigurációs fájl beolvasása
try:
with open('config.json', 'r') as f:
config = json.load(f)
except FileNotFoundError:
print("Hiba: A 'config.json' fájl nem található.", file=sys.stderr)
exit(1)
except json.JSONDecodeError:
print("Hiba: A 'config.json' fájl formátuma érvénytelen.", file=sys.stderr)
exit(1)
# --- IDE DEFINIÁLD A SWITCH-EK IP CÍMEIT ---
SWITCH_IPS = config.get("switch_ips", [])
USERNAME = config.get("username")
PASSWORD = config.get("password")
SWITCH_IPS = [
"10.220.1.84", # NET-SW01
"10.220.1.85", # NET-SW02
"10.220.1.86", # NET-SW04
"10.220.1.87", # NET-SW05
"10.220.1.88", # NET-SW06
"10.220.1.90", # NET-SW07
"10.220.1.91", # NET-SW08
"10.220.1.92", # NET-SW09
"10.220.1.93", # NET-SW10
"10.220.1.94", # NET-SW11
"10.220.1.96", # NET-SW13
# "10.220.1.96", # NET-SW14
"10.220.1.99", # NET-SW17
]
USERNAME = os.getenv('ARUBA_USER', 'svc.operator') # Felhasználónév környezeti változóból, alapértelmezett értékkel
if not USERNAME:
print("Hiba: Az ARUBA_USER környezeti változó nincs beállítva.")
exit()
if not all([SWITCH_IPS, USERNAME, PASSWORD]):
print("Hiba: A 'config.json' fájl hiányos. Tartalmaznia kell 'switch_ips', 'username', és 'password' kulcsokat.", file=sys.stderr)
exit(1)
PASSWORD = os.getenv('ARUBA_PASSWORD')
if not PASSWORD:
print("Hiba: Az ARUBA_PASSWORD környezeti változó nincs beállítva.")
exit()
N8N_WEBHOOK_URL = os.getenv('N8N_WEBHOOK_URL')
if not N8N_WEBHOOK_URL:
print("Hiba: Az N8N_WEBHOOK_URL környezeti változó nincs beállítva.")
exit()
all_switches_clients = []
for ip in SWITCH_IPS:
print(f"\n--- Feldolgozás: {ip} ---")
print(f"\n--- Feldolgozás: {ip} ---", file=sys.stderr)
clients_from_one_switch = get_aruba_clients(ip, USERNAME, PASSWORD)
if clients_from_one_switch:
all_switches_clients.extend(clients_from_one_switch)
print(f"Sikeresen lekérdezve {len(clients_from_one_switch)} kliens a(z) {ip} switch-ről.")
print(f"Sikeresen lekérdezve {len(clients_from_one_switch)} kliens a(z) {ip} switch-ről.", file=sys.stderr)
else:
print(f"Nem sikerült adatot lekérdezni a(z) {ip} switch-ről.", file=sys.stderr)
print(f"Nem sikerült adatot lekérdezni a(z) {ip} switch-ről.")
# Ha nem sikerült adatot gyűjteni, jelezzük a stderr-en
if not all_switches_clients:
print("\nEgyetlen switch-ről sem sikerült adatot gyűjteni.", file=sys.stderr)
# --- Fő kimenet: JSON a stdout-ra ---
print(json.dumps(all_switches_clients, indent=2))
if all_switches_clients:
print(f"\nÖsszesen {len(all_switches_clients)} kliens adat gyűjtve. Küldés az n8n webhookra...")
try:
proxies = { 'http': None, 'https': None }
response = requests.post(N8N_WEBHOOK_URL, json=all_switches_clients, proxies=proxies)
response.raise_for_status() # Hibát dob, ha a státuszkód 4xx vagy 5xx
print(f"Sikeresen elküldve {len(all_switches_clients)} kliens adat az n8n webhookra. Státusz: {response.status_code}")
except requests.exceptions.RequestException as e:
print(f"Hiba történt az adatok n8n webhookra küldése közben: {e}")
else:
print("\nEgyetlen switch-ről sem sikerült adatot gyűjteni.")

View File

@@ -0,0 +1,28 @@
services:
n8n:
image: n8nio/n8n:latest
container_name: panda_n8n
restart: always
ports:
- "5678:5678"
volumes:
- ./n8n-data:/home/node/.n8n
- ./n8n-scripts:/home/node/scripts
environment:
- N8N_HOST=${N8N_HOST:-localhost}
- N8N_PORT=5678
- N8N_PROTOCOL=${N8N_PROTOCOL:-http}
- WEBHOOK_URL=${WEBHOOK_URL:-http://localhost:5678/}
- NODES_EXCLUDE="[]"
# Ha használsz SSL/TLS-t, akkor ezeket is be kell állítanod
# - N8N_BASIC_AUTH_ACTIVE=true
# - N8N_BASIC_AUTH_USER=user
# - N8N_BASIC_AUTH_PASSWORD=password
networks:
- shared-network
labels:
- com.centurylinklabs.watchtower.enable=true
networks:
shared-network:
external: true

View File

@@ -0,0 +1,3 @@
{
"encryptionKey": "gJNeJ70E+q4GQeVLEJKttR199XSA0mbg"
}

View File

@@ -0,0 +1,5 @@
{
"name": "installed-nodes",
"private": true,
"dependencies": {}
}

View File

@@ -1,16 +0,0 @@
import json
# Az n8n az 'items' listában adja át a bejövő adatokat.
# Nekünk az első elem kell, ami az Execute Command kimenete.
input_item = items[0]
# Kivesszük a 'stdout' mezőt, ami a JSON-t tartalmazza szövegként.
stdout_string = input_item.json['stdout']
# A `json.loads()` paranccsal a szöveget átalakítjuk egy Python listává,
# ami dictionary-ket tartalmaz.
switches_list = json.loads(stdout_string)
# Visszaadjuk a listát. Az n8n a Code node kimenetén ezt automatikusan
# szét fogja bontani különálló elemekre (item-ekre).
return switches_list

View File

@@ -1,5 +0,0 @@
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=OSXkE8I7YbXpOf8ao_Cw7M.d6g-.54Ok
TZ=Europe/Budapest

View File

@@ -1,16 +0,0 @@
version: '3.7'
services:
n8n:
image: n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "5678:5678"
env_file:
- .env
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:

View File

@@ -1,5 +1,36 @@
Aufgabe
1. Gegensprecanlage
https://mrathje.de/kontakt.htm/
https://www.tc-telefon.de/Kontakt/
-- https://www.behnke-online.de/de/partner-plz-20000-29999
4.
5.
6. Druckers Konfig to smtp_relay
+ Weser
+ Elbe
+ Aalbek
+ Hellbach
+ Lottbek
+ Zorge
+ Goldbach
+ Flottbek
+ Hamme
Alster ?
Ahr_Struensee-Haus
- Seseke
- Juemme
- Radegast
Steinbach
Nonne
- Eider
- Enz
- Orthbrookgraben
- Siede

View File

@@ -8,7 +8,7 @@ ep..Ep
Server:
t1.meszely
vi..Vi
warP#....#Maci
000
pandA#...#min
@@ -18,7 +18,6 @@ a494052388958b494052388958
Wifi:
ASR22Antares
KP:
MuVD9Zcc4HK0jDQ4HzMt
@@ -26,6 +25,8 @@ Web:
https://aps-hh.estargmbh.de/
virgI6774+
Onboarding :
file:///Z:/IT_Dokumentation/APS-IT-Dokumentation/onboarding.pdf
DHCP Servers:
APS-Infra01
@@ -56,6 +57,8 @@ MeszelyIstvan@682da8f717950.com
WinPass
MicrosoftAuth
Kapelou2025
000
pandA#...#min
@@ -63,6 +66,10 @@ M:\Steribase\FileSrv\SBInter\InBox
ANTARES PHARMA SERVICE
Sophos :
https://vpn.aps-hh.de:7443/
Mobil : 0171 / 62 29 88 6
E-Mail:D.Laumann@mavesoft.de
@@ -95,7 +102,6 @@ Status Lokal Remote Netzwerk
-------------------------------------------------------------------------------
M: \\aps.local\antares Microsoft Windows Network
OK U: \\aps-file02\User$\i.meszely
Microsoft Windows Network
Z: \\aps.local\Data Microsoft Windows Network
@@ -114,7 +120,6 @@ NuAaGTNPQWyeneQLI5qr
Unify TSP - uninstall,
virgI6774#Virgi
virgI6774#
@@ -128,13 +133,9 @@ Drucker Emmer
NET-SW02 - 1/1/25
Drucek Etsch
Windows Telefonische Aktivierung
slui.exe 4
gemini api key : AIzaSyBUvqSD7llReHbCQAosuDDy1Q5gIT6pKLw
gitea apy key : d5747e87cb2e1022904c4a60f801cb2758542abb
docker-compose up -d
docker-compose up -d --build
docker-compose up -d --force-recreate
@@ -144,10 +145,6 @@ getent group docker | cut -d: -f3
SOIB2026STD!
APS-FILE02
User$\l.wobig\_Scans
aps\svc.scan2home
KXBPK-6QNPK-93C3C-7KKVG-GMT44
# Ispconfig
@@ -156,4 +153,8 @@ KXBPK-6QNPK-93C3C-7KKVG-GMT44
[INFO] Warning: Please delete the log files in /root/ispconfig-install-log/setup-* once you don't need them anymore because they contain your passwords!
Herr Werther Rainer
0172 9428000
pandA#6774#Maci

BIN
Doc/Pdf/onboarding.pdf Normal file

Binary file not shown.

14
Doc/STD-RODC01.md Normal file
View File

@@ -0,0 +1,14 @@
STD-RODC01
STD-NSM01
rdp STD-Admin01
STD-Print01
STD-Profile01
rdp STD-File01
rdp STD-File02
STD-APO01
STD-SQL01
STD-AOTRACE01
STD-RDSCB01
STD-RDS01
STD-RDS02
STD-INFRA01

View File

@@ -0,0 +1,47 @@
import socket
import struct
def send_wol_packet(mac_address, ip_address='255.255.255.255', port=9):
"""
Elküld egy Wake-on-LAN "magic packet"-et.
:param mac_address: A felébresztendő eszköz MAC-címe (pl. "AA:BB:CC:DD:EE:FF" vagy "AABBCCDDEEFF").
:param ip_address: A cél IP-cím (általában broadcast cím a helyi hálózaton).
Alapértelmezett: '255.255.255.255'
:param port: A cél port (általában 7 vagy 9).
Alapértelmezett: 9
"""
if len(mac_address) == 12:
pass
elif len(mac_address) == 17:
mac_address = mac_address.replace(':', '').replace('-', '')
else:
raise ValueError("Érvénytelen MAC-cím formátum. Használj 'AABBCCDDEEFF' vagy 'AA:BB:CC:DD:EE:FF' formátumot.")
# A "magic packet" felépítése: 6 bájt FF, majd 16-szor a MAC-cím
data = b'FFFFFFFFFFFF' + (bytes.fromhex(mac_address) * 16)
# UDP socket létrehozása
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # Broadcast engedélyezése
try:
sock.sendto(data, (ip_address, port))
print(f"WOL csomag elküldve a {mac_address} MAC-címre a {ip_address}:{port} címre.")
except Exception as e:
print(f"Hiba történt a WOL csomag küldésekor: {e}")
finally:
sock.close()
# Példa használat:
if __name__ == "__main__":
import sys
if len(sys.argv) < 2:
print("Használat: python wakeonlan.py <MAC_CÍM> [IP_CÍM] [PORT]")
sys.exit(1)
mac_address = sys.argv[1]
ip_address = sys.argv[2] if len(sys.argv) > 2 else '255.255.255.255'
port = int(sys.argv[3]) if len(sys.argv) > 3 else 9
send_wol_packet(mac_address, ip_address, port)

16
Doc/Switches.dm.rb Normal file
View File

@@ -0,0 +1,16 @@
7c:5a:1c:e3:7d:ae # APX120 NET-AP11 Halle Antares
7c:5a:1c:f0:bc:84 # APX120 NET-AP15 Halle 2 Pfeile
7c:5a:1c:f0:bd:1d # APX120 NET-AP10 Halle 2 Wand
7c:5a:1c:f0:cd:40 # APX120 NET-AP14 H3 Ecke
7c:5a:1c:f1:0b:13 # APX120 NET-AP08 IT Büro
7c:5a:1c:f1:28:e4 # APX120 NET-AP09 Halle Antares
c8:4f:86:9e:e8:0a # APX120 NET-AP07 Halle Vivatis
c8:4f:86:9e:f0:13 # APX120 NET-AP05 Halle Vivatis
c8:4f:86:9a:a6:0c # APX120 NET-AP12 Perso
c8:4f:86:9a:a6:2e # APX120 NET-AP13 1.OG_2(OQS)
c8:4f:86:9a:a6:50 # APX120 NET-AP01 BTM Raum
c8:4f:86:9a:b3:43 # APX120 NET-AP04 Halle Vivatis
c8:4f:86:9a:b3:a9 # APX120 NET-AP03 Apotheke 02
c8:4f:86:9a:d8:1e # APX120 NET-AP02 Apotheke 01
c8:4f:86:9f:1e:d3 # APX120 NET-AP06 Halle Vivatis

0
Einkaufen/KaufenList.md Normal file
View File

70
GEMINI_o365_fertig.md Normal file
View File

@@ -0,0 +1,70 @@
# Microsoft 365 SMTP Relay Beállítása Helyi Eszközökhöz
Ez az útmutató leírja a "best practice" módszert arra, hogyan lehet helyi hálózati eszközök (nyomtatók, scannerek, IoT eszközök) számára lehetővé tenni az e-mail küldést egy Microsoft 365 (korábban Office 365) fiókon keresztül.
## A probléma: Helyi eszközök és a Microsoft 365
Sok hálózati eszköz nem támogatja a modern, biztonságos e-mail küldési protokollokat (pl. STARTTLS, OAuth2), amelyeket a Microsoft 365 megkövetel. Emiatt közvetlenül nem tudnak e-mailt küldeni. A megoldás egy helyi SMTP Relay (smarthost) szerver beállítása, ami fogadja az eszközök egyszerű kéréseit és biztonságos módon továbbítja azokat a Microsoft 365 felé.
## Feladó Címe: Valódi Domain Használata
**Mindig a valódi, publikus domain nevet használja** a feladó címében (pl. `szkenner@ceged.hu`). Ne használjon `.local` vagy más nem létező domaineket, mert azokat a spam szűrők azonnal elutasítják, és nem teszik lehetővé a kézbesítéshez szükséges SPF/DKIM rekordok használatát.
---
## Best Practice: SMTP Relay Megvalósítása
A folyamat három fő lépésből áll: a Microsoft 365 fogadó oldalának (Connector) beállítása, a helyi relay szerver konfigurálása, és végül az eszközök beállítása.
### Előfeltételek
* Egy folyamatosan működő helyi szerver (pl. egy Linux szerver Postfix-szel, mint egy ISPConfig gép).
* **Statikus (fix) publikus IP cím**, ahonnan a szerver az internet felé látszik.
* Adminisztrátori hozzáférés a Microsoft 365 tenant-hoz.
### 1. Lépés: Microsoft 365 Connector Létrehozása
Engedélyezni kell a Microsoft oldalon, hogy a fix IP címünkről érkező leveleket authentikáció nélkül elfogadja.
1. Jelentkezzen be a **Microsoft 365 Exchange admin centerbe**.
2. Navigáljon a **Mail flow > Connectors** menüpontra.
3. Kattintson az **"Add a connector"** gombra.
4. A beállítások a következők legyenek:
* Connection from: **Your organization's email server**
* Connection to: **Office 365**
5. Adjon a connectornak egy egyértelmű nevet (pl. "Helyi Irodai Eszközök Relay").
6. A következő lépésben adja meg a **statikus publikus IP címét**. A Microsoft ez alapján fogja azonosítani és megbízhatónak ítélni a szerverét.
7. Mentse a beállításokat.
### 2. Lépés: Helyi Relay Szerver (Postfix) Beállítása
A helyi szervernek tudnia kell, hogy minden levelet a Microsoft 365-nek kell továbbítania.
1. **Keresse meg az M365 MX rekordját:** Ezt a domainjéhez tartozó MX rekord határozza meg. Lekérdezheti pl. `nslookup -q=mx ceged.hu` paranccsal. Az eredmény valami hasonló lesz: `ceged-hu.mail.protection.outlook.com`.
2. **Konfigurálja a Postfix-et:** Szerkessze a `/etc/postfix/main.cf` fájlt, és adja hozzá vagy módosítsa a `relayhost` paramétert. A szögletes zárójel fontos!
```ini
# /etc/postfix/main.cf
relayhost = [ceged-hu.mail.protection.outlook.com]:25
```
3. **Engedélyezze a belső hálózatot:** Győződjön meg róla, hogy a `mynetworks` direktíva tartalmazza a belső hálózati tartományt (pl. `192.168.1.0/24`), hogy a helyi eszközök authentikáció nélkül tudják használni a szervert.
4. **Indítsa újra a Postfix szolgáltatást:**
```sh
sudo systemctl restart postfix
```
### 3. Lépés: Eszközök és Nyomtatók Beállítása
Az összes érintett eszközön az SMTP szervernek a helyi relay szervert kell beállítani.
* **SMTP Szerver:** A helyi Postfix szerver IP címe (pl. `192.168.1.10`).
* **Port:** `25`
* **Titkosítás / SSL / TLS:** Nincs (None)
* **Authentikáció / Hitelesítés:** Nincs (Username/Password üresen hagyva)
* **Feladó címe:** Egy valós domainnel rendelkező e-mail cím (pl. `nyomtato@ceged.hu`).
## Az E-mail Útvonala
Ezzel a konfigurációval a levelek útja a következő:
`Eszköz (pl. nyomtató)` → `Helyi Postfix Szerver (auth nélkül)` → `Microsoft 365 Connector (IP azonosítással)` → `Címzett (belső vagy külső)`

111
GEMINI_smtp_relay_opprem.md Normal file
View File

@@ -0,0 +1,111 @@
# Postfix SMTP Relay beállítása On-Premise Exchange szerverhez
Ez az útmutató leírja, hogyan lehet egy Postfix SMTP relay szervert beállítani egy Linux VM-en, amely a belső hálózati eszközökről (pl. nyomtatók, IoT eszközök) érkező e-maileket továbbítja egy helyi (on-premise) Microsoft Exchange szerver felé. A hitelesítés IP-cím alapú bizalmi kapcsolaton (Receive Connector) keresztül történik, nem igényel felhasználónevet és jelszót.
## Komponensek és IP-címek
* **Postfix Relay Szerver (Linux VM):** `10.101.0.251`
* **On-Premise Exchange Szerver:** `aps-exch01.aps.local`
* **Kliens Hálózat (Nyomtatók):** `10.102.9.0/24`
---
## 1. Lépések a Postfix Szerveren (`10.101.0.251`)
Ezeket a parancsokat a Linux VM-en kell futtatni.
### 1.1. Telepítés
Válassza ki a megfelelő parancsot a Linux disztribúciójának megfelelően.
**Fedora/CentOS/RHEL esetén:**
```bash
sudo dnf install postfix mailx cyrus-sasl-plain -y
```
**Debian/Ubuntu esetén:**
```bash
sudo apt update
sudo apt install postfix mailutils libsasl2-modules -y
```
*A telepítés során válassza az **'Internet Site'** opciót. A "System mail name" mezőbe írjon be egy tetszőleges, de beszédes nevet, pl. `postfix-relay.aps.local`.*
### 1.2. Konfiguráció
Nyissa meg a `/etc/postfix/main.cf` konfigurációs fájlt egy szövegszerkesztővel (`sudo nano /etc/postfix/main.cf`), törölje a teljes tartalmát, és illessze be az alábbiakat:
```ini
# A belső, on-premise Exchange szerver címe, ahova továbbítjuk a leveleket.
relayhost = aps-exch01.aps.local
# A belső hálózatok, ahonnan a Postfix fogadja a leveleket (nyomtatók, stb.)
# Itt szerepel a loopback, és az Ön által megadott nyomtató hálózat.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 10.102.9.0/24
# Nincs szükség kliens oldali hitelesítésre, mivel az Exchange-en beállítjuk az IP-alapú bizalmat.
smtp_sasl_auth_enable = no
# Ajánlott beállítás a TLS használatára, még belső hálózaton is
smtp_use_tls = yes
smtp_tls_security_level = may
```
### 1.3. Szolgáltatás újraindítása
A konfiguráció érvénybe léptetéséhez indítsa újra a Postfix szolgáltatást, és engedélyezze az automatikus indulást.
```bash
sudo systemctl restart postfix
sudo systemctl enable postfix
```
### 1.4. Tesztelés
Küldjön egy teszt e-mailt a parancssorból, hogy ellenőrizze a működést.
```bash
echo "Ez egy teszt üzenet a Postfix relay szerverről." | mail -s "Postfix Teszt" valaki@az_on_domain_e.hu
```
*Cserélje ki a `valaki@az_on_domain_e.hu` címet egy valós e-mail címre a szervezetén belül.*
A levélforgalom naplóját a `/var/log/mail.log` (Debian/Ubuntu) vagy `/var/log/maillog` (Fedora/RHEL) fájlban követheti.
---
## 2. Lépések az On-Premise Exchange Szerveren (`aps-exch01.aps.local`)
Ezeket a lépéseket az Exchange adminisztrátorának kell elvégeznie az Exchange szerveren.
### 2.1. Receive Connector Létrehozása (Grafikus felületen)
1. Nyissa meg az **Exchange Admin Center (EAC)** webes felületét.
2. Navigáljon a **Mail flow > Receive connectors** menüpontra.
3. Kattintson az `+` ikonra egy új Receive Connector létrehozásához.
4. Adjon neki egy beszédes nevet: `Postfix_Relay_10.101.0.251`.
5. Válassza a **Frontend Transport** szerepkört.
6. A "Remote network settings" (Távoli hálózati beállítások) alatt távolítsa el az alapértelmezett `0.0.0.0-255.255.255.255` tartományt, és adja hozzá **csak a Postfix szerver IP-címét**: `10.101.0.251`.
7. A biztonsági beállításoknál győződjön meg róla, hogy az **Anonymous users** opció be van jelölve.
8. Mentse el a beállításokat.
### 2.2. Külső Relay Engedélyezése (PowerShell)
**Ez a lépés kritikus ahhoz, hogy a relay szerver a szervezeten kívüli címzetteknek is tudjon levelet küldeni!**
1. Nyisson meg egy **Exchange Management Shell-t** rendszergazdaként az Exchange szerveren.
2. Futtassa az alábbi parancsot (a connector nevének egyeznie kell a 2.1. pontban megadottal):
```powershell
Get-ReceiveConnector "Postfix_Relay_10.101.0.251" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "Ms-Exch-SMTP-Accept-Any-Recipient"
```
A parancs lefutása után a beállítás élesedik.
---
## 3. Kliens Eszközök beállítása
A nyomtatókon, szkennereken, és egyéb IoT eszközökön a következő SMTP beállításokat kell használni:
* **SMTP Szerver:** `10.101.0.251`
* **SMTP Port:** `25`
* **Hitelesítés / Authentication:** Nincs / None
* **Titkosítás / Encryption:** Nincs / None (vagy STARTTLS, ha az eszköz támogatja)

View File

@@ -0,0 +1,47 @@
# Send-AuthlessTestMail.ps1
#
# E-mail küldése hitelesítés nélkül egy SMTP relay szerveren keresztül.
# Cél: Ellenőrizni a Postfix SMTP relay beállításait.
# --- Konfigurációs beállítások ---
# Az Ön Postfix SMTP relay szerverének IP-címe
$SmtpServer = "10.101.0.251"
# Az SMTP port, alapértelmezés szerint 25
$SmtpPort = 25
# A feladó e-mail címe. Fontos: Az Exchange-nek el kell fogadnia ezt a feladót a Postfix relay-ről.
# Cserélje le egy valós e-mail címre az Ön domainjéről!
$From = "noreply@aps-hh.de"
# A címzett e-mail címe. Ide fog megérkezni a teszt e-mail.
# Cserélje le egy valós címzett e-mail címre!
$To = "i.meszely@aps-hh.de"
# Az e-mail tárgya és törzse
$Subject = "Automatikus Teszt E-mail a Postfix Relay-en keresztül (Auth nélkül)"
$Body = "Tisztelt Címzett!" + "`n`n" +
"Ez egy automatikus teszt üzenet, amelyet egy PowerShell szkript küldött el a Postfix SMTP relay szerverén keresztül, hitelesítés nélkül." + "`n" +
"Ha ezt az e-mailt megkapta, az azt jelenti, hogy a Postfix relay szerver és az Exchange Receive Connector beállításai helyesek, és sikeresen továbbította az üzenetet." + "`n`n" +
"Üdvözlettel," + "`n" +
"Az Ön teszt szkriptje"
# --- E-mail küldése ---
try {
Write-Host "E-mail küldése a $($SmtpServer):$($SmtpPort) címre..." -ForegroundColor Cyan
# A -Credential paraméter elhagyása biztosítja, hogy ne történjen hitelesítési kísérlet.
Send-MailMessage -SmtpServer $SmtpServer -Port $SmtpPort -From $From -To $To -Subject $Subject -Body $Body -ErrorAction Stop
Write-Host "Sikeresen elküldött teszt e-mailt a $($SmtpServer)-re." -ForegroundColor Green
Write-Host "Kérem, ellenőrizze a $($To) postafiókját." -ForegroundColor Green
}
catch {
Write-Host "Hiba történt az e-mail küldésekor:" -ForegroundColor Red
Write-Host $_.Exception.Message -ForegroundColor Red
Write-Host "Kérjük, ellenőrizze a Postfix szerver logjait (/var/log/mail.log) a részletekért." -ForegroundColor Yellow
}
# --- Fontos Megjegyzés ---
# Győződjön meg róla, hogy a forrásgép IP-címe (ahonnan futtatja a szkriptet)
# benne van a Postfix szerver main.cf fájljának 'mynetworks' direktívájában!
# Pl. ha a szkriptet a 10.102.1.121-ről futtatja, akkor a 'mynetworks'-ben szerepelnie kell a 10.102.1.0/24-nek.