私は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やその他の利用可能なポート番号を使用するとします。
/etc/hosts
ファイルを「null」アドレスをブロックするWebサイトとして使用することはsafeですか?
私は答えは次のとおりであると主張します:いいえ
リクエストが実際に「null」にならない以外の理由がない場合。彼らはまだアクティブなリクエストです。そして、OPが示すように、リクエストは正当なインターネットホストに対するものであるため、リクエストをlocalhost
にリダイレクトするこの種のショートカット方法は、開発環境でのネットワークコードのテストを妨害する可能性があります。
おそらく、特定のインターネットホストとの間のトラフィックをブロックするより良い方法は、Linuxカーネルのファイアウォールへのインターフェースであるiptables
を利用することです。 iptables
は、ほとんどのGNU/Linuxシステムのデフォルトのネットワークルールテーブルです。一部のディストリビューションでは、ufw
をiptables
のフロントエンドとして使用しています。
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
に特定のドメインが入力されている場合、発信要求からのフィードバックが混乱する可能性があります。
いくつかによれば:
ServerFault:iptablesがサポートできるルールの数
32ビットマシンで可能な理論上の制限は、3800万のルールです。ただし、参考記事に記載されているように、iptables
ルールリストが展開されると、必要なカーネルメモリも拡張されます。
[...]シンプルな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.example
が127.0.0.1
に解決したい場合は、それぞれのDNS A
レコードを指定するだけで、/etc/hosts
に依存する必要はありません。 (また参照してください 127.0.0.1を指すDNSレコードがあっても安全ですか? )
127.0.0.1
で何かを実行すると、 DNS再バインド 攻撃に対して脆弱になる可能性があることに注意してください。
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/
どこにも行けないIPアドレスを使用する場合は、公式の ドキュメントIPアドレス を使用できます。
それらがどこかに行くことはまだ可能ですが、ルーティング不可能なアドレス空間に追加する必要があります。他の人が指摘しているように、潜在的にはそれらのIPアドレスにトラフィックをルーティングするだけです-他の回答で述べられているより良い解決策がありますが、これらは少なくとも勝ちましたlocalマシンに移動しないでください。
127.0.0.0/8のアドレス範囲全体はlocalhostなので、この範囲内の1つのアドレス(例:127.1.1.1)の送信トラフィックをブロックできます。
次に、hostsファイルを使用して、不要なトラフィックをこのアドレスにリダイレクトします。これにより、不要な追跡リクエストがlocalhostで実行されているウェブサーバーに影響を与えなくなります。