# Mail & DNS Audit — mellon.hr

**Datum:** 15. April 2026  
**Server:** server.mellon-dev.eu (157.90.18.28)  
**CWP Pro korisnici:** `mellon`, `mellonwe`  
**NS autoritativni:** ns1.mellon-dev.eu, ns2.mellon-dev.eu  
**BIND zone fajl:** `/var/named/mellon.hr.db`  

---

## DNS Zapisi — mellon.hr

### A Zapis

```
mellon.hr.    A    157.90.18.28
```

✅ OK — isti server kao lusar.hr

---

### MX Zapis

```
mellon.hr.    MX   0 mellon.hr.
```

⚠️ **Self-pointing MX** — MX ukazuje direktno na `mellon.hr` A zapis. Radi, ali nije best practice. Preporučuje se dedicirani `mail.mellon.hr` subdomain. `mail.mellon.hr` trenutno postoji kao CNAME/A na `mellon.hr` (157.90.18.28).

---

### NS Zapisi

```
mellon.hr.    NS    ns1.mellon-dev.eu.
mellon.hr.    NS    ns2.mellon-dev.eu.
```

✅ OK — autoritativni nameserveri na istom serveru

---

### PTR / rDNS

```
dig -x 157.90.18.28 → (prazno)
```

❌ **KRITIČNO — Nema PTR zapisa za 157.90.18.28**  
Vrijedi za sve domene na ovom serveru (lusar.hr, mellon.hr, mellon-dev.eu).  
**Treba postaviti kod Hetzner:** `157.90.18.28` → `server.mellon-dev.eu`

---

### SPF Zapisi — PROBLEM (dva SPF zapisa!)

```
" v=spf1 a mx ip4:157.90.18.28 include:_spf.google.com -all "   ← stari (s razmacima!)
"v=spf1 +a +mx +ip4:157.90.18.28 include:_spf.google.com ~all"  ← novi
```

❌ **KRITIČNO — RFC 7208 zabranjuje više od jednog SPF TXT zapisa**  
Mail serveri koji naiđu na dva SPF zapisa mogu:
- Baciti `PermError` → automatski SPF fail
- Uzeti nasumičan zapis → nedeterministično ponašanje

**Što treba napraviti:**
1. Izbrisati stari zapis: `" v=spf1 a mx ip4:157.90.18.28 include:_spf.google.com -all "` (s razmacima)
2. Ostaviti samo: `v=spf1 a mx ip4:157.90.18.28 -all`
3. Ukloniti `include:_spf.google.com` ako se Google ne koristi za slanje s `@mellon.hr`
4. Promijeniti `~all` (softfail) u `-all` (hardfail) za bolju zaštitu

**Preporučeni SPF:**
```
v=spf1 a mx ip4:157.90.18.28 -all
```

---

### DKIM

**Selector:** `default`  
**Zapis:** `default._domainkey.mellon.hr`

```
v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdFtEix/d+69X/H7XMdK+/
C1WPtc/E/M4bAl32Q4B9bfb+Yvu4Y3NfaEe08rvf6SnwJSI6lgdmJk8PFtiqs+Qe/YKksIMG+S0a
C0NG10Llr+Bniuyp7wXaSsr2AHwQjHqKzuo+dI4UhWME9EPr+oMHIg/i9TbzS5+E8nkZv4DFlQIDAQAB
```

✅ DKIM DNS zapis postoji i ispravan je  
✅ Algoritam: RSA  

---

### DMARC

```
v=DMARC1; p=none; rua=mailto:mkopcic@gmail.com; ruf=mailto:mkopcic@gmail.com; adkim=r; aspf=r;
```

⚠️ `p=none` — samo monitoring, ne blokira ništa  
✅ Izvještaji se šalju na `mkopcic@gmail.com`

---

## TLS Certifikat (SMTP)

| Parametar | Vrijednost |
|---|---|
| **CN** | `server.mellon-dev.eu` |
| **Issuer** | Let's Encrypt (R12) |
| **Valjanost od** | 14.03.2026 |
| **Valjanost do** | **12.06.2026** |
| **Status** | ✅ Valjan |

⚠️ Certifikat istječe za ~58 dana. Certbot autorenew provjeri.

---

## Blacklist Status (15.04.2026)

IP: `157.90.18.28`

| Blacklist | Status |
|---|---|
| **Spamhaus ZEN** | ✅ Clean |
| **SpamCop** | ✅ Clean |
| **Barracuda** | ✅ Clean |

---

## DMARC Izvještaj — Google (13.–14. April 2026)

**File:** `google.com!mellon.hr!1775952000!1776038399.xml`

| Polje | Vrijednost | Status |
|---|---|---|
| `source_ip` | `157.90.18.28` | Naš server ✅ |
| `count` | `2` | 2 emaila |
| `dkim` | `pass` | ✅ |
| `spf` | `fail` | ❌ |
| `disposition` | `none` | Nije blokirano (p=none) |
| DKIM domain | `mellon.hr` | ✅ alignment |
| SPF domain | `server.mellon-dev.eu` | ❌ nije mellon.hr |

### Uzrok SPF Alignment Faila

Postfix šalje mail s **envelope domene** `server.mellon-dev.eu` (MAIL FROM), a `header_from` je `mellon.hr`.

DMARC SPF alignment (aspf=r, relaxed) provjerava je li envelope domena ista domena ili subdomena od `header_from`.  
`server.mellon-dev.eu` ≠ `mellon.hr` i nije subdomena → **SPF alignment fail**.

**Trenutno spašava DKIM pass** → mailovi prolaze jer DMARC treba samo jedno (SPF ili DKIM alignment).

### Rješenje SPF Alignment Problema

U CWP Pro konfiguraciji Postfixa za domenu `mellon.hr`, postaviti da envelope sender koristi `mellon.hr` kao domenu:

```bash
# /etc/postfix/main.cf — za mellonwe account
myorigin = mellon.hr
```

Ili u aplikaciji eksplicitno postaviti Return-Path na `@mellon.hr` adresu.

---

## mellon-dev.eu DNS (Pomocna domena / mail server hostname)

| Zapis | Vrijednost | Status |
|---|---|---|
| A | `157.90.18.28` | ✅ |
| MX | `0 mellon-dev.eu.` | ⚠️ Self-pointing |
| SPF | `v=spf1 +a +mx +ip4:157.90.18.28 ~all` | ⚠️ `~all` umjesto `-all` |
| DKIM `default` | RSA ključ postoji | ✅ |
| DMARC | `p=none` (minimalni zapis) | ⚠️ Nema rua/ruf |
| PTR | Nema | ❌ |

---

## Ukupni Status

| Stavka | Status |
|---|---|
| SMTP konekcija (port 465) | ✅ OK |
| TLS/SSL certifikat | ✅ Valjan (do 12.06.2026) |
| DKIM | ✅ OK |
| SPF DNS zapis | ❌ **Duplikat — dva SPF zapisa** |
| SPF DMARC alignment | ❌ Fail (ali DKIM spašava) |
| DMARC policy | ⚠️ p=none |
| PTR/rDNS | ❌ Nema |
| MX | ⚠️ Self-pointing |
| Blackliste | ✅ Clean |

---

## BIND DNS Server Nalazi (direktno iz zone fajlova)

### mellon.hr.db — Duplikat SPF (izvorni kod)

```bind
; Zapis 1 — potpuno kvalificiran, + prefiks, ~all, TTL 14400
mellon.hr. 14400 IN TXT "v=spf1 +a +mx +ip4:157.90.18.28 include:_spf.google.com ~all"

; Zapis 2 — @ sintaksa, razmaci, -all, TTL 1440 (10x kraći!)
@ 1440 IN TXT " v=spf1 a mx ip4:157.90.18.28 include:_spf.google.com -all "
```

❌ Oba zapisa se razlikuju u: TTL-u (14400 vs 1440), all politici (`~all` vs `-all`) i sintaksi (`+a +mx` vs `a mx`). RFC 7208 §3.2 — samo jedan SPF TXT zapis smije postojati.

---

### ns1/ns2.mellon-dev.eu.db — Stari default template

```bind
; SOA serial: 2013071600 — iz 2013! Nikad ažuriran
; Contact email: info.centos-webpanel.com — CWP default, nije promijenjen
ns1.mellon-dev.eu.  SOA  ns1.mellon-dev.eu.  info.centos-webpanel.com.  (2013071600 ...)
```

⚠️ Serial `2013071600` znači da secondary NS serveri (ako ikad postoje) neće preuzeti zone.  
⚠️ Contact email je CWP defaultni — nije promijenjen od instalacije.

---

### server.mellon-dev.eu.db — Pogrešni NS zapisi

```bind
; SOA i NS ukazuju na centos-webpanel.com, ne na mellon-dev.eu!
SOA  ns1.centos-webpanel.com.  postmaster.server.mellon-dev.eu.
NS   ns1.centos-webpanel.com.
NS   ns2.centos-webpanel.com.
```

❌ Zone za `server.mellon-dev.eu` koristi **CWP defaultne** nameservere. Ova zona je u praksi neispravna.

---

### ns1 i ns2 — Isti IP (Single Point of Failure)

```
ns1.mellon-dev.eu.  A  157.90.18.28
ns2.mellon-dev.eu.  A  157.90.18.28
```

⚠️ Oba NS zapisa ukazuju na **isti server**. Ako 157.90.18.28 padne, cijela DNS infrastruktura pada s njim — sve domene (lusar.hr, mellon.hr, ...) postaju nedostupne.

---

### BIND named.conf upozorenja

```
/etc/named.conf:61: option 'dnssec-enable' is obsolete
/etc/named.conf:63: option 'dnssec-lookaside' is obsolete  
/etc/named.conf:34: both "recursion no;" and "allow-recursion" active
```

⚠️ Zastarjele DNSSEC opcije (bezopasne, ali treba počistiti).  
⚠️ Konfliktna konfiguracija rekurzije.

---

## Action Items

| Prioritet | Task | Status |
|---|---|---|
| 1 | **Obrisati duplikat SPF zapis** u `/var/named/mellon.hr.db` (linija s `@ 1440 IN TXT " v=spf1...`) | ❌ TODO |
| 2 | **PTR/rDNS za 157.90.18.28** — postaviti kod Hetzner | ❌ TODO |
| 3 | **SPF cleanup** — ukloniti `include:_spf.google.com`, `+` prefikse, koristiti `-all` | ❌ TODO |
| 4 | **server.mellon-dev.eu.db** — popraviti NS zapise na `ns1.mellon-dev.eu.` | ❌ TODO |
| 5 | **ns1/ns2.mellon-dev.eu.db** — ažurirati serial i contact email | ⏳ TODO |
| 6 | **Postfix envelope domain** — mellonwe šalje s `server.mellon-dev.eu` envelope, treba `mellon.hr` | ⏳ CWP Pro |
| 7 | **DMARC p=quarantine** — nakon rješavanja SPF alignmenta | ⏳ TODO |
| 8 | **Certbot autorenew provjera** — cert istječe 12.06.2026 | ⏳ Provjeri |
| 9 | **named.conf cleanup** — ukloniti zastarjele DNSSEC opcije | 💡 Opcija |

---

### Fix #1 — Brisanje duplikat SPF (direktno u zone fajlu)

```bash
# Pogledaj trenutno stanje
sudo grep -n "spf1" /var/named/mellon.hr.db

# Nakon editiranja zone fajla — povećaj serial i reload
sudo named-checkzone mellon.hr /var/named/mellon.hr.db
sudo rndc reload mellon.hr
```

**Ispravni jedini SPF za mellon.hr:**
```bind
@ 14400 IN TXT "v=spf1 a mx ip4:157.90.18.28 -all"
```

---

### Fix #2 — PTR/rDNS Postavljanje (Hetzner)

1. **Hetzner Cloud Console:** https://console.hetzner.cloud/  
   Server → Networking → IP `157.90.18.28` → Edit → PTR: `server.mellon-dev.eu`
2. **Hetzner Robot** (dedicated): https://robot.hetzner.com/  
   Servers → IP Addresses → rDNS Edit

```bash
# Verifikacija nakon postavljanja
dig +short -x 157.90.18.28
# Treba: server.mellon-dev.eu.
```

---

### Fix #3 — server.mellon-dev.eu.db NS zapisi

Promijeniti u zoni:
```bind
; Staro (pogrešno):
NS   ns1.centos-webpanel.com.

; Novo (ispravno):
@    86400   IN   NS   ns1.mellon-dev.eu.
@    86400   IN   NS   ns2.mellon-dev.eu.
```
