web-dev-qa-db-ja.com

/ etc / hostsファイルを次のようにWebサイトのブロッカーとして使用するのは安全ではありませんか?

私はLinuxの初心者で、簡単なOSレベルのウェブサイトブロック手法を探しているときに、次のようにLinuxのhostsファイルを使用するという解決策を見つけました。

127.0.0.1 websiteiwanttoblock.com
127.0.0.1 anotherone.com
...

これは素晴らしくてシンプルです-私の目的にはぴったりですが、ここで私の質問です:Web開発目的で127.0.0.1を頻繁に使用する場合、これは危険ですか?

少なくとも、私が現在取り組んでいるWeb開発プロジェクトを台無しにする可能性はありますか?たとえば、Chrome/Firefoxがwebsiteiwanttoblock.com/api/blahにリクエストを送信すると、127.0.0.1/api/blahにリクエストが送信され、プロジェクトのAPIが乱れる可能性がありますか?

これが危険な場合、ブロックされたサイトをリダイレクトできるより安全な「null」のIPアドレスはありますか?このようにhostsファイルを使用することはおそらくお勧めできませんが、パッケージなどをダウンロードするのではなく、テキストファイルを編集する簡単さを気に入っています。

編集:ああ、そして私はしばしば開発用にポート3000を使用しますが、時々80やその他の利用可能なポート番号を使用するとします。

24
user134696

簡潔な答え

/etc/hostsファイルを「null」アドレスをブロックするWebサイトとして使用することはsafeですか?

私は答えは次のとおりであると主張します:いいえ

リクエストが実際に「null」にならない以外の理由がない場合。彼らはまだアクティブなリクエストです。そして、OPが示すように、リクエストは正当なインターネットホストに対するものであるため、リクエストをlocalhostにリダイレクトするこの種のショートカット方法は、開発環境でのネットワークコードのテストを妨害する可能性があります。

おそらく、特定のインターネットホストとの間のトラフィックをブロックするより良い方法は、Linuxカーネルのファイアウォールへのインターフェースであるiptablesを利用することです。 iptablesは、ほとんどのGNU/Linuxシステムのデフォルトのネットワークルールテーブルです。一部のディストリビューションでは、ufwiptablesのフロントエンドとして使用しています。

iptablesを使用する場合は、次の簡単なスクリプトを使用して、プレーンテキストファイルに含まれるIPアドレスまたはホスト名のリストに1つのアドレスまたはホスト名を含むすべての着信および発信パケットをDROPします~/blocking.txtと呼ばれます

## Block every IP address in ~/blocking.txt
## DROP incoming packets to avoid information leak about your hosts firewall
## (HT to Conor Mancone) REJECT outgoing packets to avoid browser wait
for i in $(cat ~/blocking.txt); do
    echo "Blocking all traffic to and from $i"    
    /sbin/iptables -I INPUT -s $i -j DROP
    /sbin/iptables -I OUTPUT -d $i -j REJECT
done

サンプル~/blocking.txt

websiteiwanttoblock.com
anotherone.com
ip.add.of.net/mask

localhost IPアドレスをこのファイルに含めないでください。

より長い答え

インターネットホストを/etc/hostsファイルのlocalhostに再割り当てすることは、不要なインターネットホストをblockブロックする一般的なショートカットテクニックですが、この方法には重大なセキュリティ上の欠点があります。

着信リクエスト

特定のユーザー要求によって意図的に開始されなかった受信要求。最も一般的な例は、ウェブページ上の広告です。着信パケットを追跡しましょう...

まず、wiresharkを起動します。次に、最大のインターネット広告会社を/etc/hostsファイルに次の行で配置します。

127.0.0.1   google.com

次に、ブラウザーですべての広告ブロッカーを無効にし、youtubeに移動してランダムビデオを再生します。

パケットをフィルタリングすると、GoogleのIPアドレス空間が広く含まれます。

ip.addr==172.217.0.0/16

まだGoogleからパケットを受信して​​います。

これは何を意味するのでしょうか?

これは、悪意のあるサーバーがマルウェアを挿入する可能性があることを意味します。マルウェアは、まだ到着していてローカルホストに送信されているパケットを介してコンピューティングプラットフォームを攻撃できる可能性があります。ファイアウォールルールを介してパケットをドロップまたは拒否するのではなく/etc/hostsを使用することは、セキュリティ対策としては不十分です。悪意のある可能性のあるホストからの着信パケットをブロックせず、トラブルシューティングの目的で効果的なフィードバックを提供しません。

発信リクエスト

ファイアウォールルールによって拒否またはドロップされるのではなくlocalhostに送信される発信要求は、引き続きカーネルによって処理されます。ファイアウォールではなく/etc/hostsを使用すると、いくつかの望ましくないアクションが発生します。

  • 発信パケットがローカルホストに到達すると、追加の処理が発生します。たとえば、Webサーバーがホスト上で実行されている場合、localhostに送信されたパケットはWebサーバーによって処理される可能性があります。

  • /etc/hostsに特定のドメインが入力されている場合、発信要求からのフィードバックが混乱する可能性があります。

iptablesは多くのルールを処理できます

いくつかによれば:

ServerFault:iptablesがサポートできるルールの数

32ビットマシンで可能な理論上の制限は、3800万のルールです。ただし、参考記事に記載されているように、iptablesルールリストが展開されると、必要なカーネルメモリも拡張されます。

24
RubberStamp

[...]シンプルなOSレベルのウェブサイトブロッキングテクニックを探しているときに、Linuxホストファイルを使用して解決策を見つけました[...]

明確にするために、/etc/hostsはホスト名をIPアドレスにマッピングするだけです。 127.0.0.1を含むエントリは、サーバーへのアクセスをブロックせず、コンピューターが特定の名前をローカルで127.0.0.1に解決するようにします。あなたとサーバーは、制限なしにパケットを交換している可能性があります。

Web開発の目的で127.0.0.1をよく使用する場合、これは危険ですか?少なくとも、私が現在取り組んでいるWeb開発プロジェクトを台無しにする可能性はありますか?

いいえ、127.0.0.1に解決しても、さらに危険にさらされることはありません。これは、Webサイトの名前を127.0.0.1を含む任意のIPに解決できるためです(DNSサーバーがブロックしない限り)。したがって、evilpage.example127.0.0.1に解決したい場合は、それぞれのDNS Aレコードを指定するだけで、/etc/hostsに依存する必要はありません。 (また参照してください 127.0.0.1を指すDNSレコードがあっても安全ですか?

127.0.0.1で何かを実行すると、 DNS再バインド 攻撃に対して脆弱になる可能性があることに注意してください。

11
Arminius

Webサーバーがローカルマシン(127.0.0.1)のポート80または443で実行されていない限り、Webプロジェクトに影響はありません。それがそうであるならば、それはそれから迷惑であるかもしれません。 http://example.com/api/にリクエストを送信すると、http://127.0.0.1/api/にリクエストが送信されます。 /api/というリソースがある場合、そのリソースはリクエストを受信することになり、アプリを妨害することになります。しかし、@ Arminusが言及したことを強調したい最大のポイントは、/etc/hosts/ファイルがIPアドレスをホスト名にマッピングするためのものであることです。特定のホストをブロックする場合は、UFWなどのファイアウォールをインストールするか、デフォルトのLinuxファイアウォールであるiptablesを使用することをお勧めします。ここにあなたが始めるのに役立ついくつかのリンクがあります:

UFW: https://www.linux.com/learn/introduction-uncomplicated-firewall-ufw

iptables: https://www.howtogeek.com/177621/the-beginners-guide-to-iptables-the-linux-firewall/

3
ssharma

どこにも行けないIPアドレスを使用する場合は、公式の ドキュメントIPアドレス を使用できます。

  • 192.0.2.0/24
  • 198.51.100.0/24
  • 203.0.113.0/24

それらがどこかに行くことはまだ可能ですが、ルーティング不可能なアドレス空間に追加する必要があります。他の人が指摘しているように、潜在的にはそれらのIPアドレスにトラフィックをルーティングするだけです-他の回答で述べられているより良い解決策がありますが、これらは少なくとも勝ちましたlocalマシンに移動しないでください。

2
Wayne Werner

127.0.0.0/8のアドレス範囲全体はlocalhostなので、この範囲内の1つのアドレス(例:127.1.1.1)の送信トラフィックをブロックできます。

次に、hostsファイルを使用して、不要なトラフィックをこのアドレスにリダイレクトします。これにより、不要な追跡リクエストがlocalhostで実行されているウェブサーバーに影響を与えなくなります。

0
Calmarius