firewalldでいくつかのIPを除くすべてをブロックする


17

Linuxネットワークマシンでは、「パブリック」ゾーン(ファイアウォールの概念)上のアドレスのセットを制限したいので、そこに到達できます。したがって、最終結果は、明示的に許可されたものを除いて、他のマシンがポートまたはプロトコルにアクセスできないことです。

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.120" drop'

  --add-rich-rule='rule family="ipv4" source not  address="192.168.56.105" drop'

上記の問題は、これが実際のリストではないことです。1つのアドレスが他のアドレスと同じではないためにブロックされ、偶発的な「すべてドロップ」効果が発生した場合、特定の非連続セット?ソースはアドレスのリストを受け入れますか?私はこれまでのところ、ドキュメントやグーグルの結果を見て何も見ていません。


編集:私はこれを作成しました:

# firewall-cmd  --zone=encrypt --list-all
encrypt (active)
  interfaces: eth1
  sources: 192.168.56.120
  services: ssh
  ports: 6000/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

しかし.123 、ソースがリストされていない場合、どのサービスまたはポートにも到達できないはずであるという私の意図から、まだポート6000 に到達できます

回答:


24

豊富なルールはまったく必要ありません。

ゾーンを特定のIPセットに制限する場合は、それらのIPをゾーン自体のソースとして定義します(ソースIPをオーバーライドするため、存在する可能性のあるインターフェース定義をすべて削除します)。

ただし、これは「パブリック」ゾーンに対してこれを実行することをおそらく望まないでしょう。なぜなら、それはセマンティック上、一般向けサービスが世界に開かれるためのものだからです。

代わりに、ほとんどの信頼できるIPアドレスに「内部」などの別のゾーンを使用して、sshdなどの潜在的に機密性の高いサービスにアクセスしてみてください。(独自のゾーンを作成することもできます。)

警告:特別な「信頼できる」ゾーンを通常の「内部」ゾーンと間違えないでください。「信頼できる」ゾーンに追加されたソースはすべてのポートで許可されます。「信頼済み」ゾーンへのサービスの追加は許可されていますが、そうすることは意味がありません。

firewall-cmd --zone=internal --add-service=ssh
firewall-cmd --zone=internal --add-source=192.168.56.105/32
firewall-cmd --zone=internal --add-source=192.168.56.120/32
firewall-cmd --zone=public --remove-service=ssh

この結果は、sshへのアクセスを許可する「内部」ゾーンになりますが、指定された2つのIPアドレスからのみです。永続的にするには、各コマンドを--permanent追加して再実行します。


「存在する可能性のあるインターフェース定義」の意味を明確にしてください。iv提案を試みました。私の編集を参照してください。
マイク

@mike先ほど言ったようにeth1、ゾーンから削除する必要があります。firewall-cmd --zone=encrypt --remove-interface=eth1
マイケルハンプトン

ええと、暗号化ゾーンは新しいゾーンです。eth1がパブリックになる前に、パブリックから暗号化に移動したので、暗号化のソースは.120になり、ポートに到達できるのは120だけだと思いました。
マイク

1
あなたがゾーンにインターフェースを入れた場合は、何もインタフェースを介して到着したにかかわらず、IPアドレスの、ゾーンに追加されているものは何でもポートとサービスにアクセスすることができます。したがって、おそらく元々あった公共の場所に属している可能性があります。
マイケルハンプトン

ああ、インターフェイスがパブリックに配置されていても、受け入れられたソースは引き続き許可され、受け入れられたソースは別の信頼できるソースに配置されますか?
マイク

1

としてfirewalld.richlanguage

ソースソース[not] address = "address [/ mask]"

   With the source address the origin of a connection attempt can be limited to the source address. An address is either a single IP address, or a network IP address. The address has to match the rule family (IPv4/IPv6). Subnet mask is expressed in either
   dot-decimal (/x.x.x.x) or prefix (/x) notations for IPv4, and in prefix notation (/x) for IPv6 network addresses. It is possible to invert the sense of an address by adding not before address. All but the specified address will match then.

連続したブロックを許可するには、アドレスのネットマスクを指定します。

それ以外に、ipset許可されたIPの非連続リストのを作成してみてください。

例えば、中/etc/firewalld/direct.xml

<?xml version="1.0" encoding="utf-8"?>
<direct>
   <rule ipv="ipv4" table="filter" chain="INPUT" priority="0">-m set --match-set whitelist src -j ACCEPT</rule>
</direct>

実際ipsetは個別に作成する必要があります。


これは拒否されます、私が必要とするのは逆です、セットにあれば受け入れます
マイク

0

リッチルールで簡単に管理できます。

最初の一歩

firewall-cmd --permanent --set-default-zone=home
firewall-cmd --permanent --zone=drop --change-interface=eth0

2番目のステップ-リッチルールの追加

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" source address="192.168.78.76/32" accept'

リッチルールを追加し、他のソースからのすべてのポートをブロックすると、192.168.2.2ですべてのポートにアクセスできます。

以下のコマンドでポートまたはサービスを追加する場合、すべてのソースからアクセスできます。

firewall-cmd --zone=public --add-service=ssh
firewall-cmd --zone=public --add-port=8080

以下のコマンドよりも特定のIPに対して特定のポートを開く場合

firewall-cmd --permanent --zone=home --add-rich-rule='rule family="ipv4" port="8080/tcp" source address="192.168.78.76/32" accept'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.