내 홈 시스템(Ubuntu)에서 Facebook에 대한 액세스를 차단하려고 합니다. facebook.com을 추가할 수 있지만 /etc/hosts
이렇게 하면 facebook.com에 대한 액세스만 차단됩니다. mbasic.facebook.com, m.facebook.com, touch.facebook.com, IP 주소 등 Facebook을 사용하는 다른 방법이 많이 있습니다.
브라우저 확장을 사용하여 차단할 수 있다고 생각하지만 시스템 전체 차단을 선호합니다. 나는 살펴보았다이 문제이 문제를 해결하기 위해 iptables를 사용해 보았으나 성공하지 못했습니다. 이 명령을 실행한 후에도 여전히 facebook.com에 액세스할 수 있습니다(범위는 whois 173.252.120.6 | grep CID에서 얻음).
sudo iptables -A OUTPUT -p tcp --destination-port 80 -d 173.252.64.0/18 -j REJECT
그래서 내 질문은 본질적으로: 내 시스템에서 어떤 수단으로도 액세스할 수 없도록 다양한 방법으로(100% 완벽할 필요는 없음) 웹 사이트(예: facebook.com)를 차단하려면 어떻게 해야 합니까?
답변1
이는 블록이 얼마나 완벽하기를 원하는지, 시스템에 대해 얼마나 많은 제어권을 갖고 있는지에 따라 다릅니다. 귀하가 "홈 시스템"에 대해 이야기하고 /etc/hosts를 수정하고 있으므로 합법적인 루트 액세스 권한이 있고 완전히 방탄할 필요는 없다고 가정합니다.
전체 도메인에 대한 액세스를 차단하는 가장 쉬운 방법은 로컬 DNS "재귀 확인자"를 설정하고 해당 도메인에 대해 특별히 구성하는 것입니다. 기본적으로 DNS 서버(물론 동일한 호스트에서 실행될 수 있음)를 설정하고 로컬 시스템을 가리키며 해당 DNS 서버에 도메인 facebook.com
(또는구역, DNS 용어로 불림). 이에 대해 설정된 주소 레코드가 없으므로 facebook.com에서 호스트 이름을 확인하려고 하면 "호스트를 찾을 수 없음"이 반환됩니다.
모든 이름 확인을 자체적으로 수행하거나 (구성을 통해) 알지 못하는 모든 항목을 다른 DNS 서버에 전달하도록 이러한 DNS 서버를 설정할 수 있습니다. 후자의 구성을 종종 "전달" 확인자라고 합니다.
이는 특정 도메인(www.facebook.com, m.facebook.com, touch.facebook.com, everything.somewhere.facebook.com)에서 이름을 통한 모든 액세스에 작동하지만 DNS(www.facebook.com)의 관련 없는 이름에는 작동하지 않습니다. com, m.facebook.com, touch.facebook.com, everything.somewhere.facebook.com). facebook.example.com은 Facebook으로 이동해도 계속 작동합니다. 또한 IP 주소를 통한 접근을 차단하지 않습니다. 그러나 처음에는 IP 주소를 찾는 것이 덜 쉽습니다( host
또는 nslookup
"찾을 수 없음"이라고 말함).
단지 알려진 특정 도메인을 실수로 탐색하는 것을 방지하는 것이 목적이라면 이것으로 충분할 수 있습니다. 아이디어라면완전히액세스를 차단하면 작동하지 않습니다.
실제로 설정하려면,먼저 완전히 구성된 로컬 확인자를 원하는지, 아니면 전달된 확인자를 원하는지 결정해야 합니다. 두 가지 모두 장단점이 있지만 지금은 사용 사례 요구 사항에 더 적합할 수 있는 포워드 리졸버를 구성하는 방법을 보여 드리겠습니다.
다양한 DNS 서버 패키지를 사용할 수 있지만 아마도 *nix 세계에서 가장 잘 알려진 것(확실히 가장 잘 알려진 패키지 중 하나)은 현재 버전 9에 있는 BIND일 것입니다. 실행 중인 Ubuntu의 정확한 버전을 지정하지 않았으므로 현재 Ubuntu LTS 버전인 14.04/trusty를 실행하고 있는지 확인하겠습니다. 다른 곳에서는 큰 차이가 없어야 합니다.
BIND를 설치하려면 터미널 창을 열고 명령을 실행하세요. (메시지가 표시되면 비밀번호를 입력해야 합니다.)
sudo apt-get update
sudo apt-get install -u bind9
두 번째 명령으로 표시되는 설치할 패키지 목록을 보고 적절해 보이는지 확인한 다음 설치를 확인합니다.
이제 소프트웨어 자체가 설치되었으므로 구성해야 합니다. 기본 구성 파일은 /etc/bind/named.conf입니다. gedit
편집기 에서 엽니다.텍스트편집자가 할 것입니다):
sudo gedit /etc/bind/named.conf
directory
블록 에 설정된 값을 기록해 두십시오 options
. 그런 다음 전체 구성 파일을 다음으로 바꿉니다.
options {
directory "** PAST VALUE GOES IN HERE **";
forwarders { ** YOUR UPSTREAM DNS SERVER IPS HERE, SEE BELOW ** };
forward only;
allow-transfer { "none"; };
allow-query { "localhost"; };
allow-update { "none"; };
};
의 경우 directory
과거 값을 사용합니다(따라서 그럴 가능성이 높지만 directory "/etc/bind";
내 말을 받아들이지 마세요).
forwarders { }
형식이 조금 더 복잡하기 때문입니다 . 여기,ISP(또는 기타 업스트림) DNS 서버를 IP 주소별로 나열합니다.각 IP 주소 뒤에는 세미콜론이 옵니다. 아마도 /etc/resolv.conf에서 이러한 내용을 찾을 수 있을 것입니다. NAT 라우터 또는 유사한 라우터가 있는 경우 DNS 전달 서비스도 제공할 수 있으며, 그렇다면 여기에서 라우터의 IP 주소를 사용하는 것이 좋습니다. 예를 들어, 업스트림 DNS 서버가 192.168.100.1 및 192.168.200.1인 경우 괄호 안과 바깥 모두에 마지막 세미콜론을 포함하도록 변경됩니다 forwarders { 192.168.100.1; 192.168.200.1; };
(이들은 서로 다른 용도로 사용되므로 지금 완전히 이해할 필요는 없습니다. 내 말을 믿으세요. 그들은 모두 거기에 있어야 합니다.)BIND 관련 구성 파일을 편집한 후,sudo rndc reload
구성 다시 로드를 트리거하는 명령을 실행합니다 .
방화벽이 엄격하게 구성되어 있는 경우 TCP를 통한 로컬 트래픽이 시스템에 도달하도록 허용해야 합니다.그리고UDP, 로컬 포트 53. 비슷한:
sudo iptables -A INPUT -i lo -p udp --dport 53 -j ACCEPT
sudo iptables -A INPUT -i lo -p tcp --dport 53 -j ACCEPT
이제 시스템의 이름 확인 기능이 이 DNS 서버를 가리키도록 하십시오. 이는 /etc/resolv.conf를 직접 편집하여 지시문을 127.0.0.1을 가리키는 단일 지시문으로 바꾸는 방식으로 가능할 수도 있지만 nameserver
, 저는 Ubuntu 작업 방식에 익숙하지 않기 때문에 이에 대해 별도로 문의하고 싶을 수도 있습니다. . GUI가 있을 수 있으며 /etc/resolv.conf는 시작 시 자동으로 다시 작성될 수 있습니다.
이는 매우 기본적인 전달 DNS 확인자 설정을 제공합니다.특정 도메인에 대한 접근을 차단하려면,DNS 용어로 이는 편의상 패키지에서 제공하는 파일을 zone { }
가리키는 BIND 구성 파일에 스탠자를 추가하여 이러한 이름에 대해 빈 영역을 정식으로 제공한다는 의미입니다 . 예를 들어, 모든 항목 (본명 포함)을 차단하려면 다음을 추가하세요.db.empty
bind9
facebook.com
zone "facebook.com" { type master; file "db.empty"; };
다시 실행 sudo rndc reload
하여 로드하세요.이제 facebook.com의 호스트 이름에 액세스할 수 없습니다.
망쳐버리면,그런 다음 업스트림 DNS 서버를 사용하도록 네트워크 DNS 설정을 재설정하거나 /etc/bind/named.conf에 대한 최신 변경 사항을 실행 취소하고 구성을 다시 로드하십시오. //
한 줄의 아무 곳에나(따옴표 안은 제외) 써서 줄의 나머지 부분을 주석으로 바꿀 수 있습니다 . 이는 예를 들어 변경 사항을 일시적으로 취소하는 데 좋은 방법입니다.
재미있게 보내세요!
답변2
일반 사용자에게 충분히 효과적인 간단한 방법은 DNS 조회에서 반환된 IP 주소를 차단하는 것입니다. Facebook에 액세스할 수 없는 미성년자가 있다고 가정해 보겠습니다. 필터링해야 하는 IP 및 IPv6 주소를 사용 ping -4 facebook.com
하고 찾으십시오. ping -6 facebook.com
그 다음에
a) 라우터 방화벽 필터에 이를 추가합니다. MikroTik 라우터인 경우 winbox를 사용하여 로그인하고 "새 터미널"을 클릭한 후 실행하면 됩니다.
/ip firewall filter add chain=forward src-address=185.60.217.35 action=drop
/ipv6 firewall filter add chain=forward src-address=2a03:2880:f136:83:face:b00c:0:25de action=drop
물론, 얻은 IP 주소를 사용하거나 인터페이스를 통해 원하는 방식을 클릭할 수 있습니다.
b) 컴퓨터에서 이러한 서버만 차단하려면 해당 IP 주소를 사용 ufw
하거나 차단하십시오.iptables
가끔 IP 주소가 변경되었는지 확인하고 새 주소를 추가해야 할 수도 있습니다.
도움이 되었기를 바랍니다.