Agguingi una tabella al DB in cui riporti per esempio: IP, numero_tentativi, timestamp.
l'utente prova il login
codice:
if ( esiste una entry con l'IP dell'utente )
{
    if ( numero_tentativi < della soglia da te scelta )
    {
        tenti il login
        if ( il login fallisce )
        {
            +1 ai tentativi falliti ed aggiornamento del timestamp
        }
    }
    else if ( numero_tentativi == alla soglia da te scelta AND il minuto non è passato )
    {
        notifichi all'utente che deve aspettare un tempo pari a timestamp+60 - time()
    }
    else if ( numero_tentativi == alla soglia AND il minuto è passato )
    {
        elimini la riga relativa all'IP dalla tabella e provi il login
        if ( il login fallisce )
        {
            inserisci nella tabella una entry per l'IP dell'utente con 1 al numero di tentativi e il timestamp corrente
        }
    }
}
else
{
    provi il login
    if ( il login fallisce )
    {
        inserisci nella tabella una entry per l'IP dell'utente con 1 al numero di tentativi e il timestamp corrente
    }
}
Questo scritto adesso al volo, sicuramente la logica è migliorabile, ma l'idea è questa.