cookie protection doesnt matter too much, if a person were to write a script to do it they wouldnt even make it handle cookies. ip protection is good but these days it does always have the drawback of people sharing an ip. you could maybe limit ip's to only voting every x hours or something. as far as checking a proxy, there are certain headers many proxy servers send, which you could try to detect and deny a vote if one of the headers are sent.
some may include:
$SERVER['HTTP_X_FORWARDED_FOR'];
$SERVER['HTTP_VIA'];
$SERVER['HTTP_PROXY_CONNECTION'];
$SERVER['HTTP_FORWARDED'];
another small trick you could use is to ensure that a user agent is sent. this way if people write scripts and dont think to send a user agent, you can deny the vote but not say thats why and IF they figure it out they will spend a while on it.