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に到達できます。ソースがリストされていない場合、サービスやポートに到達できないようにすることが目的でした。
豊富なルールはまったく必要ありません。
ゾーンを特定の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
を追加して各コマンドを再実行します。
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
は個別に作成する必要があります。
リッチルールで簡単に管理できます。
最初のステップ
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'