문득 NGINX에 이런 모듈이 있다면 어떨까 하고 적어봅니다. 실제로 만들 능력은 없고 그냥 이런거 있으면 어떨까 해서요. 솔직히 제가 기술적으로 제대로 이해하고 있는지도 모르겠...

 

 

아시다시피 우리가 사이트를 접속하면 먼저 웹 서버를 거치고 백엔드에 접속됩니다. 그리고 웹 서버를 거칠때 사용한 아이피가 접속 로그나 게시판 DB에 기록됩니다.

 

이때 웹 서버가 받아들이는(?) 아이피를 평문으로 받지 말고 SHA같은 단방향 암호화를 거쳐서 해시로 받아들이는 겁니다. 이러면 서버 내의 모든 로그에 아이피가 암호화되어 기록됩니다. 그리고 특정 아이피를 허용 혹은 차단할때도 해시 값을 비교해서 구분하는게 가능하도록 해야 합니다.

 

VPN이나 메신저 회사들은 종종 고객를 보호하기 위해 No-Log 정책을 취합니다. 물론 일반 커뮤니티가 아예 아이피를 저장하지 않기는 무리가 있으니 누가 누구인지 구별은 하되, 추적할수는 없도록 하는 거지요. 구현이 가능하다면 얼마전에 올라온 모욕죄 관련 글도 그렇고 이용자의 프라이버시를 중요시하는 운영자라면 나름 유용한 기능이 아닐까요?

  • ?
    ipv4는 다해봐야 2^32개니까 전부 돌려보는게 해볼만한 일이라서 의미가 있을까요
  • ? ?
    아... 하긴 그렇겠네요... 정말 작정하고 추적하려면 무리는 아니니
  • ? ?
    전부 ipv6 형태로 바꿔서 돌리면 되겠네요. 그런데 그래도 ipv4 대역은 한정되어 있어서 안 될듯요
  • ?

    글쎄요.. 어차피 그런건 좀 눈가리고 아웅이라는 느낌이랄까요..

    정확히 어떤 방식으로 해쉬처리했는지만 안다면 해쉬를 역으로 거꾸로 IP로 돌리는게 그리 어려운 일은 아닙니다. 왜냐면 IP는 입력되는 패턴이 어차피 한정되기 때문이죠. 대략 40억회의 해쉬 연산을 하면 모든 IP에 대해서 해쉬값을 알아낼 수 있습니다. 40억회 연산이라고 하니까 어마어마한 것 같은데.. 아쉽게도 SHA1을 40억회 연산하는데 몇분 안걸릴겁니다. 요즘 CPU는 워낙 무시무시해서요.. 충돌하는게 몇개쯤 있다고 쳐도 거의 그대로 복원이 가능하니.. 어차피 프라이버시에 관련해서라면 그냥 관리자가 알아서 할일이겠죠.

  • ? ?
    ipv6은 128비트 주소를 쓰니까 모든 ip를 ipv6 형태로 변환해서 (이 용도로 할당된 대역도 있고) 돌리면 되기는 할 거 같은데
  • ? ?

    일단 웹은 기본으로 모든 주소가 ipv4라고 보시면 됩니다... 
    그리고 ipv4 주소를 ipv6 포맷로 변환해도 주소 모양새가 별로 달라지지 않습니다. 그냥 ipv6의 하위 4바이트가 ipv4라서요...

  • ?

    그리고 PHP상에서는 그냥 PHP 맨 앞부분에 $_SERVER['REMOTE_ADDR']에다가 해쉬 연산해서 값 넣어주면 간단하게 구현할 수 있습니다. 구지 모듈까진 필요없죠.. IP를 해쉬로 저장하는게 프라이버시 보장까진 몰라도 털렸을때 훨씬 더 안전하긴 하겠죠. 어떻게 해쉬 만들었는지 모르면 복구 못하니까요.

  • profile

    nginx에서는 아예 IP를 빼고 기록하도록 설정하고, PHP단에서 $_SERVER['REMOTE_ADDR']에 sha1이든 뭐든 적용하면 간단하게 구현할 수 있습니다. 굳이 서버 모듈이 필요하지도 않고요.

    물론 절대 다수의 사이트에서는 불량유저나 스팸, 각종 공격을 손쉽게 파악하는 것이 유저의 IP를 숨기는 것보다 훨씬 더 중요한 문제이기 때문에 실용성은 거의 없다시피합니다. 정말로 자신의 프라이버시를 중요시하는 유저라면 IP를 기록하지 않는다는 사이트 운영자의 말을 믿을 이유도 없지요. 디비를 다 까보지 않는 이상 검증할 길이 없는 일방적인 주장에 불과하잖아요. 자기가 VPN을 사용하는 수밖에...