smtp.Dial bere helbidera konexio berria irekitzen du. HTTP CONNECT proxy baten bidez konexio bat lortu ondoren, pasa ezazu lehendik dagoen fluxu hori smtp.NewClient-i horren ordez.

Bidalketa-atakan STARTTLS eskatzen duen SMTP zerbitzari baterako, entrega honelakoa izan daiteke:

func smtpOverTunnel(conn net.Conn, mailHost string) (*smtp.Client, error) {
    client, err := smtp.NewClient(conn, mailHost)
    if err != nil {
        conn.Close()
        return nil, err
    }
    err = client.StartTLS(&tls.Config{
        ServerName: mailHost,
        MinVersion: tls.VersionTLS12,
    })
    if err != nil {
        client.Close()
        return nil, err
    }
    return client, nil
}

Paketeak net, net/smtp eta crypto/tls dira. Deitzaileak nahi den SMTP ostalari eta atakara jada konektatuta dagoen tunel bat ematen du, proxyaren CONNECT trukea amaituta. Proxyra TCP soilik irekitzea ez da nahikoa: HTTP erantzun bat ez da SMTP agurra.

mailHost SMTP zerbitzariaren ostalari-izena da, ataka gabe. Mantendu identitate hori SMTP autentifikaziorako eta ziurtagiria egiaztatzeko. HTTPS proxy baterako TLS konexioak ibilbidearen beste tarte bat babesten du.

Itzulitako bezeroa prest dago aplikazioaren lehendik dagoen SMTP autentifikaziorako eta posta-transakziorako. Itxi amaitu duzunean. Mugatu markatzea, CONNECT eta ondorengo protokolo-eragiketak aplikazioaren epe-politikarekin.

Proxyak CONNECT baimendu behar du aukeratutako posta-atakara. Batzuek 443 atakako HTTPS helmuguetara mugatzen dute. TLS inplizituko SMTPrako, ezarri helmugaren TLS saioa NewClient deitu aurretik, STARTTLS igorri beharrean.

Erlazionatutako artikuluak