리눅스에서 특정 웹사이트들 차단하기

리눅스에서 특정 웹사이트들 차단하기

집중력 회복 프로젝트: 웹사이트 차단의 필요성

요 몇년 간 집중력이 너무 떨어졌다. 개인적으로, 기술의 발전의 방향이 이런 방향으로 움직이고 있기 때문이란 생각을 갖고있다. (도둑맞은 집중력 을 참고하자.)

거대 기술 기업에 대항하는 한명의 개인으로써, 특단의 조치들이 필요하다는 생각이 들었따. 그래서 집중력을 올릴 수 있는 방법들을 하나씩 찾아서 적용해보는 중이다. 내가 적용하고 있는 방식들은 이 정도가 있다.

  1. 듀얼/트리플 모니터를 사용하지 않기, 듀얼을 꼭 써야한다면 한 개를 main으로 중앙에 배치하고 다른 하나는 세로로 세워서 view 용도로만 사용하기.
  2. 웹브라우저 멀티탭 대신 멀티 윈도우 사용하기.
  3. window manager를 stack으로 사용하여, master window에서만 작업 처리하기.
  4. 주기적으로 발생하는 딴짓을 막기 위해 reddit, youtube 같은 특정 사이트들 차단하기.

그래서, 나의 집중력 회복 프로젝트의 한 축을 담당하고 있는 리눅스에서 특정 웹사이트 차단하는 방법에 대해 다뤄볼까 한다.

웹사이트 주소와 ip의 개념

우리가 어떤 웹사이트에 접속하려면, 그 사이트의 ip를 알아야만 한다. 우리가 youtube에 접속할 때, 우리는 우리도 모르게 youtube의 ip를 알아내어 그 ip로 연결을 하고 있다. 이게 어떻게 가능한가?

바로 DNS 서버 덕분이다. DNS 서버는 세상의 모든 웹사이트들의 주소ip를 한 쌍으로하여 저장해둔 사전같은 것이다. 사용자들에게 특정 웹사이트 주소에 대해 질문을 받으면, ip를 답으로 내어놓는다. 가장 유명하고 많이 사용되는 무료 DNS 서버로 구글 (8.8.8.8)과 cloudflare (1.1.1.1)이 있다.

우리가 youtube에 접속한다고 생각해보자.

  1. 우리는 youtube.com의 ip를 모른다. 그래서 가장 먼저 DNS server (나, 공유기, 혹은 인터넷 회사가 지정해두었을 것이다)에 ip를 물어본다.
  2. 그러면, DNS server는 youtube.com과 연결되어있는 ip를 알려준다. 그럼 나의 웹브라우저는 그 ip로 youtube에 접속하게 된다. (그림의 access with ip)
  graph LR
    subgraph My PC
      A["web browser"]
      B["/etc/hosts"]
    end

    subgraph Internet
      C["cloudflare DNS server<br>(1.1.1.1)"]
      D["youtube"]
    end

    A -->|youtube.com| B -->|youtube.com| C -->|ip| B -->|ip|A
    A -->|access<br>with ip|D

우리가 주목해야하는 부분은, 내가 그래프에 추가해둔 /etc/hosts이다. DNS server한테 질문하기에 앞서, 우리 웹브라우저는 혹시나 그 인터넷 주소가 이 pc에 존재하는 서버인지 확인하는 절차를 가진다. 그래서 그런 정보들을 기입하는 /etc/hosts에서 우선적으로 ip를 찾는다!

이 부분이 우리가 특정 웹사이트를 차단하는 공략법이 된다. 그럼 한번 방법을 알아보자. (아주 쉽기 때문에 금방 따라할 수 있을 것이다.)

특정 사이트 주소를 차단하는 법

먼저 sudo 권한으로 /etc/hosts파일을 열어주자. 나는 vim을 썼지만, nano를 써도 무방하다.

bash
sudo vim /etc/hosts

그러면 이런 내용이 보일 것이다.

/etc/hosts
# Static table lookup for hostnames.
# See hosts(5) for details.
127.0.0.1        localhost
::1              localhost

여기서 왼쪽 컬럼이 ip주소, 오른쪽 컬럼이 주소를 의미한다. 지금은 localhost라는 주소밖에 없다. 이건 내 pc에서 운영되는 서버에 접속할 때 쓰는 특별한 주소다.

궁금하면 인터넷 주소창에 localhost로 접속을 시도해보자. 별도로 서버를 운영하고 있지 않다면 This site can’t be reached라는 응답이 돌아올 것이다.

localhost에 접속이 안된다.
localhost에 접속이 안된다.

여기서 127.0.0.1은 내 pc 자체를 가리키는 ip 주소이다. (loopback이라고 부른다.) 이것도 인터넷 주소창에 붙여넣어보면, localhost로 접속한 것과 똑같은 응답을 보게 될 것이다.

자, 이처럼 내 pc로 접속하면 아무런 결과도 뜨지 않는다. 우리는 이걸 활용해서 사이트를 차단할 것이다. 여기선 youtube를 차단하는 예시를 사용하겠다.

/etc/hosts
# Static table lookup for hostnames.
# See hosts(5) for details.
127.0.0.1        localhost
::1              localhost
127.0.0.1        youtube.com
127.0.0.1        www.youtube.com

위와 같이 나는 youtube.comwww.youtube.com을 둘 다 추가해주었다. 일반적으로 웹사이트들은 www이 붙어있는 버전과 없는 버전을 둘 다 관리하기 때문이다.

작성이 완료되었다면 변경사항을 저장해주자. 그러면 거의 곧바로 그 사이트에 대한 접속이 뜨지 않고 아까 localhost로 접속시도했을 때와 같이 This site can’t be reached와 같은 응답을 띄우게 된다.

혹시나 이 방식으로 사이트 접속이 안막힌다면?

웹 브라우저가 이미 접속했던 사이트들의 정보를 일부 저장해놓고 보관하고 있는데, 그걸 캐시라고 한다. 캐시에 접속관련 정보가 남아있다면 막았더라도 접속이 된다. 이건 시간이 지나면 자연스럽게 캐시가 갱신되면서 해결이 된다.

마무리하며

집중력을 회복하기 위한 프로젝트의 한 축을 담당하는 리눅스에서 특정 웹사이트 접속을 막는 방법을 알아보았다. 생각보다 아주 간단하지 않나? 다음번에는 또 다른 집중력 회복을 위한 방식에 대해 연구해서 가져오겠다.

Last updated on