web-dev-qa-db-ja.com

firewalld / firewalld.richlanguageを使用してホスト(IPではない)を拒否する

Linuxのfirewalldにルールを追加して、ホスト全体(IPまたはIP範囲ではない)を拒否することは可能ですか?

たとえば、my133y.orgからのすべての接続を拒否します。

ファイアウォールの豊富な言語を使用してIPをドロップできますが、ホストの拒否はmanページにありません。

IPを拒否する例

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.100.4/24" drop'

に変更した場合:

firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="my133t.org" drop'

エラーが発生しました:

Error: INVALID_ADDR: my133t.org
1
Sameer

firewall-cmd のmanページで、事実を説明しています。

送信元アドレスまたはアドレス範囲は、IPv4またはIPv6のマスクを含むIPアドレスまたはネットワークIPアドレス、あるいはMACアドレスまたはipset:プレフィックスを含むipsetのいずれかです。 IPv4の場合、マスクはネットワークマスクまたはプレーン番号にすることができます。 IPv6の場合、マスクは単純な数値です。ホスト名の使用はサポートされていません。

これには正当な理由があります。 Firewalldはパケットフィルターです。パケットとそのルールを比較します。 IPパケットには、送信元IPアドレスと宛先IPアドレスの両方がありますが、ホスト名はありません。したがって、基準としてホストを使用するには、追加のソース、つまりドメインネームシステムDNSから追加情報を収集する必要があります。このような実装は、パケットをフィルタリングしようとするときにサーバーに新しいトラフィックを生成させることが容易であるため、サービス拒否攻撃に対して脆弱です。

さらに、DNSでAレコードを照会することにより、ホスト名をIPアドレスに変換するのは簡単ですが、IPアドレスのすべてのホスト名を検出することはそれほど簡単ではありません。確かにIPは逆PTRレコードを持つことができますが、それは必須ではなく、信頼できません。

例えば。コンテンツフィルターを備えた一部の統合脅威管理(UTM)ソリューションは、TLSトラフィックを暗号化せずに、禁止されたホスト名に基づいてHTTPSトラフィックをブロックします。これは、HTTPリクエストとそのHost:ヘッダーが暗号化されているため、URLを使用できないことを意味します。ファイアウォールと同様に、IPアドレスのみが表示されます。コンテンツをフィルタリングする代わりに、そのホスト名のIPアドレスのプリフェッチリストを使用して、そのIPアドレスへのすべてのHTTPSトラフィックをブロックします。これはまさにあなたがしなければならないことです。

本当にホスト名を使用したい場合は、最初にIPアドレスを照会する必要があります。従業員が貴重な勤務時間にserverfault.comでサーフィンするのを防ぎたいとしましょう。

  1. Dig +short serverfault.com
  2. それらの宛先IPアドレスをブロックします。
  3. 古いルールを削除することから始めて、これを定期的に繰り返します。
5
Esa Jokinen