Classe aonde você trata os ips que são permitidos o uso.
class NeedToLoginMiddleware(object):
def process_request(self, request):
ip = request.META['REMOTE_ADDR']
if not ip in ALLOWED_IP_BLOCKS:
#ip check
if not request.user.is_authenticated():
#if ip check failed, make authentication check
return HttpResponseRedirect(...)
return None
Você pode até criar um model aonde você cadastrará os ips que serão permitidos utilizar ao invés de deixar no settings.
ALLOWED_IP_BLOCKS = [......]
MIDDLEWARE_CLASSES = (
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
'path.to.my.NeedToLoginMiddleware',
...
)