ホワイトリストにある元のIPアドレスを除くすべての着信要求をブロックするようにCentOS 7ファイアウォールを設定したいと思います。ホワイトリストのIPアドレスの場合は、すべてのポートにアクセスできる必要があります。
私はいくつかの解決策が見つかりましたが(動作しているかどうかはわかりません)、iptables
CentOS 7を使用しました。コマンドで達成できるfirewalld
ものと似たものが見つかりませんでした。firewall-cmd
インターフェイスはパブリックエリアにあります。また、すべてのサービスをパブリックスペースに移動しました。
答え1
ゾーンにソースを追加してこれを行います。まず、お住まいの地域で利用可能なソースを確認してください。
firewall-cmd --permanent --zone=public --list-sources
そうでない場合は、追加を開始できます。これが「許可リスト」です。
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
(これにより、/24
IP全体と単一IPが追加されるため、サブネットと単一IPの両方への参照が得られます。)
開くポートの範囲を設定します。
firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp
これはポート1〜22にのみ適用されます。必要に応じて拡張できます。
今行ったことを再ロードしてください。
firewall-cmd --reload
作業内容を確認してください。
firewall-cmd --zone=public --list-all
注/編集:これは重要ではありませんが、IPグループをホワイトリストに追加するためにファイアウォールの「信頼できる」領域が好きです。読んでみると、さらに詳しく評価できます。地域選択のためのredhatの提案。
また見なさい:
- ファイアウォールを使用した RHEL 7 ドキュメント
- FedoraファイアウォールDドキュメント(とても良いです。Fedoraはしばらくファイアウォールを使ってきました)
DROP
このソースの外部にパケットを送信する場合は、/24
以前に例として使用したソース外部パケットをドロップする例を次に示します。これには豊富なルールを使用できます、私は信じる。これは概念的であり、まだテストしていません(centos 7がコマンドを受け入れる以外)。 pcapを実行し、期待どおりに機能していることを確認するのは簡単です。
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.168.100.0/24" invert="True" drop'
答え2
回答が承認されて投票を受けましたが、正解ではないようです。ドキュメントで明確な説明が見つかりませんが、実装された動作を見ると次のようになります。
- インターフェイスとソースはセレクタとして使用されます - 有効にする領域
- デフォルト領域の場合、両方は無視されます(常に有効)。
答えは次のとおりです。
- 「パブリック」などの基本領域をロックします。開いているポートやサービスは利用できません。
- 他の分野では「Work」と言ってください。ソースとオープンポートを定義します。
たとえば、既定のゾーンがパブリックゾーンであり、開いているポートがないと仮定すると、ソースとポートの範囲を「作業」ゾーンに追加します。
$ sudo firewall-cmd --zone=work --add-source=192.168.0.0/24
$ sudo firewall-cmd --zone=work --add-port=8080-8090/tcp
次に、アクティブゾーンを確認します(デフォルトゾーンは常にアクティブです)。
$ sudo firewall-cmd --get-active-zones
あなたは得るでしょう:
work
sources: 192.168.0.0/24
したがって、「作業」ゾーンルールは特定のサブネットに適用されます。 「許可リストにある」開いているポートのリストが表示されます=サブネット要求通り。もちろん、--permanent
ステートメントでオプションを使用すると、--add-xxx
動作がそのまま維持される可能性があります。
これにより、「パブリック」(デフォルト)領域のすべてのポートまたはサービスがすべてのインターフェイスとソースアドレスに適用されます。
$ sudo firewall-cmd --list-all-zones
public (default)
interfaces:
sources:
services:
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
work (active)
interfaces:
sources: 192.168.0.0/24
services: dhcpv6-client ipp-client ssh
ports: 8080-8090/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
同じシステムがインターフェイスにも適用されます。 「work」領域に「ens3」インタフェースを追加することで表現されます。
$ sudo firewall-cmd --zone=work --add-interface=ens3
特定のインターフェイス(「ソース」よりも粗いセレクタ)からのすべての着信要求に対して「作業」領域ルールを使用します。
答え3
免責事項:ここで提案することを実際に試したことはありませんが、前回行ったファイアウォール設定と非常によく似ているので、もう一度やりません。 Firewalldは、この目的のためにのみ事前設定されたいくつかの領域を提供します。着信コンテンツをすべて削除する「ドロップ」というものがあり、次を許可する「信頼できる」というものがあります。どの(つまり、別のポートを開く必要さえないと思います)。秘訣は、必要なものをトリガーする正しい領域を見つけることです。
Firewalldは、次の優先順位に従ってゾーンルールを適用します。
- ソースIPがゾーンにバインドされているソースIPと一致する場合、そのソースIPが使用されます。
- ソースIPが特定のゾーンと一致しない場合は、ソース用に設定されたゾーンがあることを確認してください。相互作用パケットが入っています。ある場合はそれを使用してください。
- 最後に、他の一致がない場合は、デフォルト領域を使用します。
したがって、まず信頼できるIPを「信頼できる」領域にバインドする必要があります。
firewall-cmd --permanent --zone=trusted --add-source=1.2.3.4
次に、デフォルト領域を「ドロップ」に設定するか、インターフェイスをここにバインドします。
firewall-cmd --permanent --set-default-zone=drop
firewall-cmd --permanent --zone=drop --change-interface=eth0
その後、変更を適用します(警告:ネットワークを介してこれを実行し、送信元IPを信頼できるゾーンに追加しないと接続が失われる可能性があります)。
firewall-cmd --reload
もちろん、「--permanent」を省略して一時的にテストすることもできます(これは --reload も必要ありません)。
答え4
信頼できる地域の回答が選択された回答ではないことに驚きました。信頼領域にはデフォルトで「target:ACCEPT」があり、残りは「target:default」です。実際にはあまり問題にはなりませんが、名前とデフォルトのターゲット値で見て予想される方法のようです。
自分だけがアクセスできるようにボックスをすばやくロックする方法:
firewall-cmd --zone=trusted --add-source=1.2.3.4
firewall-cmd --zone=trusted --add-source=5.6.7.8/24
firewall-cmd --zone=drop --change-interface=eth1
firewall-cmd --set-default-zone=drop
firewall-cmd --runtime-to-permanent
firewall-cmd --reload
firewall-cmd --list-all-zones
すべての領域が一覧表示されると、次の内容が表示されます。
trusted (active)
target: ACCEPT
icmp-block-inversion: no
sources: 1.2.3.4 5.6.7.8/24
masquerade: no
drop (active)
target: DROP
icmp-block-inversion: no
interfaces: eth1
masquerade: no
注: null/欠落値のある行を削除しました。重要なのは、トラストとドロップが両方(アクティブ)で、ドロップにパブリックインターフェイスがあることです。
これがiptablesでどのように機能するかを示してください:
Chain INPUT_ZONES_SOURCE (1 references)
target prot opt source destination
IN_trusted all -- 1.2.3.4 0.0.0.0/0
IN_trusted all -- 5.6.7.8/24 0.0.0.0/0
Chain INPUT_ZONES (1 references)
target prot opt source destination
IN_drop all -- 0.0.0.0/0 0.0.0.0/0
IN_drop all -- 0.0.0.0/0 0.0.0.0/0
IN_drop all -- 0.0.0.0/0 0.0.0.0/0