Ubuntu에서 특정 웹사이트에 대한 액세스를 차단하는 방법은 무엇입니까?

Ubuntu에서 특정 웹사이트에 대한 액세스를 차단하는 방법은 무엇입니까?

생산성을 높이고 방해 요소를 피하기 위해 특정 웹 사이트를 차단하고 싶습니다. BlockSite(Brave 브라우저 확장)는 매우 좋은 도구이지만 비활성화할 수 있다는 치명적인 결함이 있습니다.매우상단의 작업 표시줄을 통해 쉽게 수행할 수 있습니다. 저는 좀 더 강력한 솔루션을 원합니다.

처음에는 설명된 방법을 사용했습니다.여기그러나 나는 이 방법이 Facebook이나 Twitter의 모든 페이지를 차단하는 BlockSite의 기능을 에뮬레이트하지 않는다는 것을 발견했습니다(예를 들어). 파일을 편집하는 이 방법은 Twitter 관련 페이지를 모두 /etc/hosts차단 twitter.com하지는 않습니다(예를 들어, 여전히 가능합니다) Joe Biden 또는 Donald Trump의 트위터 페이지를 방문하세요)

우분투에서 특정 웹사이트를 완전히 차단하면서 차단 해제를 어렵게 만드는 가장 좋은 방법은 무엇입니까?

답변1

이것은 간단한 작업이 아닙니다.

얼마나 많은 웹사이트가 생산성을 방해하거나 해칠 수 있다고 생각하시나요? 사이트가 2개뿐이라면 /etc/hosts에 추가하세요. 20 - 예, 괜찮습니다. 하지만 이를 유지하는 것이 어려워지기 시작하는 지점에 도달하고 있습니다. 호스트가 200개이면 성능에 약간의 영향을 미칠 것입니다.

Fox가 권장하는 대로 네임서버를 실행하면 기술적으로 확장할 수 있지만 대규모 사이트 목록을 유지하는 것은 어렵습니다. 또한 사용자가 단순히 자신의 컴퓨터를 다른 DNS 서버로 지정하는 것(또는 단순히 브라우저에서 DNS-over-HTTPS를 활성화하는 것)을 방지하는 방법을 찾아야 합니다.

컴퓨터 네트워크를 위한 기성 솔루션이 있습니다. 파이홀 라우터나 차단 목록이 있는 Squid 프록시를 사용하세요(Google에서 Squidguard 검색). 그러나 국내 ADSL 서비스에 dhcp를 실행하는 컴퓨터가 한 대만 있는 경우에는 이러한 기능을 구현하기 어려울 수 있습니다. 인터넷에 액세스하지 않고 별도의 네트워크 네임스페이스에서 사용자 세션을 시작하고 동일한 네트워크에 있는 다른 컴퓨터에 연결해야 합니다. 네트워크. 로컬 실행 에이전트가 호스트에 연결됩니다.

답변2

Github로 이동bytescout/Procrastination 웹사이트 목록그리고 매우 간단한 지침을 따르십시오. 리눅스와 윈도우에서 사용 가능합니다. 특히 Linux에서는 /etc/hostsWindows 파일이 아닌 편집 작업을 수행하게 됩니다 c:\windows\system32\drivers\etc\hosts. 비밀번호를 사용하세요 sudo.

답변3

나는 저스틴 솔름스(Justin Solms)의 의견에 동의합니다. 나는 *성공하지 못한 채 비슷한 것을 시도했습니다 ( www.google.com, www.google.fr-> www.google.*). 내가 이해하는 성능상의 이유로 해결 방법이 있을 수 있습니다.

아무튼 개인적으로 사용하기에는 번거로울 것 같습니다. 자신을 즐길 시간이 되었을 때 그것으로부터 "돌아올" 수 있다는 것은 좋은 일입니다. 모든 Linux 배포판에서 작동하는 스크립트를 생각해냈습니다. hosts그것이 거기 있는 한 /etc/.

이 스크립트는 복사만 합니다. 초기화 매개변수는 (존재하는지 묻기) hosts.prod(생산성) 및 hosts.div(다양화, 프랑스어이므로 영어로 유지하려면 다각화라고 합시다^^)를 생성합니다. 그러면 hostsdiv 또는 prod 버전이 덮어쓰게 됩니다.

#!/usr/bin/env bash
#
# This script inverts the hosts files.
# To be in the productive mode or not.
# -p: productive mode
# -n: non-productive mode
# --init: initialize hosts

PROD_HOSTS=/etc/hosts.prod
DIV_HOSTS=/etc/hosts.div
HOSTS=/etc/hosts

if [ "$1" == "-p" ]; then
    echo "Switching to productive mode"
    sudo cp $PROD_HOSTS $HOSTS -f
elif [ "$1" == "-n" ]; then
    echo "Switching to non-productive mode"
    sudo cp $DIV_HOSTS $HOSTS -f
elif [ "$1" == "--init" ]; then
    echo "Initializing hosts"
    sudo cp $HOSTS $DIV_HOSTS -i
    sudo cp $HOSTS $PROD_HOSTS -i
    sudo echo "# Blacklisted websites" >> $PROD_HOSTS
    sudo echo "127.0.0.1  www.example.org" >> $PROD_HOSTS
    echo ""
    echo "To update your blacklist: `sudo vim /etc/hosts.prod`"
    echo "(`vim` or `nano`)"
    echo ""
    echo "/!\\ Don't forget to run this script after editing!"
    echo ""
else
    echo "Usage: productivity.sh [-p|-n]"
    echo "  -p: productive mode"
    echo "  -n: non-productive mode"
    echo "  --init: initialize hosts"
fi

답변4

당신은 올바른 길을 가고 있습니다 /etc/hosts. 호스트 이름 확인을 직접 처리하십시오. 문제는 지적하신 대로 모든 하위 도메인에 와일드카드를 사용할 수 없다는 것입니다. 이렇게 하려면 DNS 서버를 설정해야 합니다. 예를 들어 BIND를 사용하는 경우 먼저 다음과 같은 영역 파일이 필요합니다.

; /var/named/blackhole.zone
@ IN SOA localhost. localhost. (
        2021121301  ; Serial
              7200  ; Refresh
               120  ; Retry
           2419200  ; Expiration
              3600) ; Default TTL
     A    127.0.0.1
* IN A    127.0.0.1
     AAAA ::1
* IN AAAA ::1

그런 다음 차단하려는 도메인이 포함된 구성 파일을 생성해야 합니다.

# /etc/named/blackhole.conf
zone "facebook.com" {type master; file "/var/named/blackhole.zone";};
zone "twitter.com" {type master; file "/var/named/blackhole.zone";};

기본 구성 어딘가에 다음 파일을 포함하십시오.

# main config, probably /etc/named.conf but can vary
#...
options {
        listen-on { 127.0.0.1; }; # localhost only
        forwarders {208.67.222.222; 208.67.220.220;}; # OpenDNS
        # ...
}
include "/etc/named/blackhole.conf";

그런 다음 DNS 서버가 구성되고 BIND가 실행 중이라고 가정하면 모든 와일드카드 도메인을 블랙리스트에 추가하기 위해 127.0.0.1실행할 수 있습니다 .rndc reload

기본적으로 여기서 수행하는 작업은DNS 서버 전달나만의 것을 가져보세요(가상)권한 있는 영역일부 호스트 이름을 실제 위치 대신 localhost로 지정합니다.

관련 정보