Ubuntuで特定のWebサイトへのアクセスをブロックする方法は?

Ubuntuで特定のWebサイトへのアクセスをブロックする方法は?

生産性を高め、妨害要因を避けるために、特定のウェブサイトをブロックしたいと思います。 BlockSite(Braveブラウザ拡張)は非常に良いツールですが、無効にすることができるという致命的な欠陥があります。非常に上部のタスクバーから簡単に実行できます。私はもう少し強力な解決策が欲しいです。

最初は説明した方法を使用しました。ここしかし、私はこの方法がFacebookやTwitterのすべてのページをブロックするBlockSiteの機能をエミュレートしないことを発見しました(たとえば)。ファイルを編集するこの方法は、Twitter関連ページをすべて/etc/hostsブロックするtwitter.comわけではありません(たとえば、まだ可能です)Joe BidenまたはDonald TrumpのTwitterページにアクセスしてください。

Ubuntuで特定のウェブサイトを完全にブロックしながらブロック解除を困難にする最善の方法は何ですか?

答え1

これは簡単な作業ではありません。

どのくらいのウェブサイトが生産性を妨げたり害を及ぼす可能性があると思いますか?サイトが2つしかない場合は、/ etc / hostsに追加してください。 20 - はい、大丈夫です。しかし、それを維持するのが難しくなり始めるポイントに達しています。ホストが200台の場合、パフォーマンスに多少の影響があります。

Foxが推奨するようにネームサーバーを実行すると技術的に拡張できますが、大規模なサイトのリストを維持するのは困難です。また、ユーザーが自分のコンピュータを別のDNSサーバーに割り当てること(または単にブラウザでDNS-over-HTTPSを有効にすること)を防ぐ方法を見つける必要があります。

コンピュータネットワーク用の既製のソリューションがあります。パイホールルーターまたはブロックリストを含むSquidプロキシを使用してください(GoogleでSquidguardを検索)。ただし、国内のADSLサービスにdhcpを実行しているコンピュータが1台しかない場合、これらの機能を実装するのは難しいかもしれません。インターネットにアクセスせずに別々のネットワーク名前空間でユーザーセッションを開始し、同じネットワーク上の別のコンピュータに接続する必要があります。ネットワーク。ローカル実行エージェントがホストに接続されます。

答え2

Githubに行くbytescout/Procrastination ウェブサイト一覧そして非常に簡単な指示に従ってください。 LinuxとWindowsで利用可能です。特にLinuxでは、/etc/hostsWindowsファイルではなく編集操作を実行しますc:\windows\system32\drivers\etc\hosts。パスワードを使用してくださいsudo

答え3

私はジャスティン・ソルムスのコメントに同意します。私は*成功せずに同様のことを試みました(www.google.comwww.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として指定します。

関連情報