私のホームシステム(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%完璧である必要はありません)Webサイト(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の世界で最もよく知られているもの(確かに最もよく知られているパッケージの1つ)は、現在バージョン9のBINDです。実行中のUbuntuの正確なバージョンを指定していないので、現在Ubuntu LTSバージョンの14.04 / trustyを実行していることを確認します。他の場所では大きな違いはありません。
BINDをインストールするには、ターミナルウィンドウを開き、コマンドを実行します。 (メッセージが表示されたらパスワードを入力する必要があります。)
sudo apt-get update
sudo apt-get install -u bind9
2番目のコマンドで表示されるインストールするパッケージのリストを表示し、適切に見えることを確認してから、インストールを確認します。
これでソフトウェア自体がインストールされているので、設定する必要があります。デフォルトの設定ファイルは/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への最新の変更を元に戻して設定を再ロードします。//
1行の任意の場所に(引用符を除く)書き込むことで、行の残りの部分をコメントに置き換えることができます。これは、たとえば変更を一時的にキャンセルするのに最適な方法です。
楽しくお過ごしください!