Bezbednost — security headers, fail2ban logovanje, bruteforce zaštita, CSRF zaštita
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"time"
|
||||
)
|
||||
|
||||
var authLogger *log.Logger
|
||||
|
||||
// InitAuthLog otvara log fajl za auth događaje (pokušaji prijave, zaključavanja)
|
||||
func InitAuthLog() {
|
||||
putanje := []string{"/var/log/ntech/auth.log", "./logs/auth.log"}
|
||||
for _, p := range putanje {
|
||||
if err := os.MkdirAll(filepath.Dir(p), 0755); err != nil {
|
||||
continue
|
||||
}
|
||||
f, err := os.OpenFile(p, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
authLogger = log.New(f, "", 0)
|
||||
log.Printf("Auth log: %s", p)
|
||||
return
|
||||
}
|
||||
// fallback — logujemo u standardni izlaz
|
||||
authLogger = log.New(os.Stdout, "", 0)
|
||||
}
|
||||
|
||||
func zapisiAuth(nivo, ip, korisnik, razlog string) {
|
||||
if authLogger == nil {
|
||||
return
|
||||
}
|
||||
authLogger.Printf("%s %s user=%s ip=%s reason=%s",
|
||||
time.Now().Format("2006-01-02 15:04:05"), nivo, korisnik, ip, razlog)
|
||||
}
|
||||
|
||||
// LogNeuspehPrijave beleži neuspeli pokušaj prijave u fail2ban-kompatibilnom formatu
|
||||
func LogNeuspehPrijave(ip, korisnik, razlog string) {
|
||||
zapisiAuth("[FAILED]", ip, korisnik, razlog)
|
||||
}
|
||||
|
||||
// LogUspehPrijave beleži uspešnu prijavu
|
||||
func LogUspehPrijave(ip, korisnik string) {
|
||||
zapisiAuth("[SUCCESS]", ip, korisnik, "ok")
|
||||
}
|
||||
|
||||
// LogZaklucano beleži pokušaj prijave sa zaključanog IP-a
|
||||
func LogZaklucano(ip, korisnik string) {
|
||||
zapisiAuth("[LOCKED]", ip, korisnik, "too_many_attempts")
|
||||
}
|
||||
Reference in New Issue
Block a user