web-dev-qa-db-ja.com

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

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'

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


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

# 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に到達できます。ソースがリストされていない場合、サービスやポートに到達できないようにすることが目的でした。

18
mike

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

ゾーンを特定の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を追加して各コマンドを再実行します。

24
Michael Hampton

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.

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

それ以外に、許可されたIPの非連続リストのipsetを作成してみることができます。

たとえば、/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は個別に作成する必要があります。

1
dawud

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

最初のステップ

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'
0
Ranjeet Ranjan