ファイアウォール拒否ルールがあり、トラフィックが引き続き入っています。

ファイアウォール拒否ルールがあり、トラフィックが引き続き入っています。

ServerFaultに同じ質問をしましたが、答えは0です。

サーバーのSMTPポートが繰り返し攻撃されるたびにファイアウォールに拒否ルールを追加する簡単なツールを開発しました。トラフィックがまだ特定のIPアドレスで発生しているため、一部のルールが適用されていないことがわかりました。一例:

rule family="ipv4" source address="45.125.66.22" reject
rule family="ipv4" source address="45.125.66.24" reject

それでもこのアドレスからのトラフィックが表示されるため、ファイアウォールがそのアドレスの通過を許可しているようです。

28/07/2022 08:27:31   SMTP Server: Authentication failed for user monica ; connecting host 45.125.66.24

ルールを自動的に作成して有効にするには、次のコマンドを使用します。

/bin/sudo firewall-cmd --add-rich-rule='rule family=ipv4 source address=<ip-address> reject' --permanent
/bin/sudo firewall-cmd --reload

サーバーはCentOS Linuxバージョン8.5.2111です。他のLinuxディストリビューションに切り替える必要があることを知っています。

私が逃したものは何ですか?これを行うにはどうすればよいですか?


修正する

iptables-saveの出力:

# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*filter
:INPUT ACCEPT [1160:109252]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1129:138455]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*security
:INPUT ACCEPT [1106:106324]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1130:138703]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*raw
:PREROUTING ACCEPT [1160:109252]
:OUTPUT ACCEPT [1132:139087]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*mangle
:PREROUTING ACCEPT [1160:109252]
:INPUT ACCEPT [1160:109252]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [1135:139543]
:POSTROUTING ACCEPT [1135:139543]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022
# Generated by iptables-save v1.8.4 on Sun Jul 31 16:17:13 2022
*nat
:PREROUTING ACCEPT [239:11084]
:INPUT ACCEPT [185:8156]
:POSTROUTING ACCEPT [6:440]
:OUTPUT ACCEPT [6:440]
COMMIT
# Completed on Sun Jul 31 16:17:13 2022

# firewall-cmd --get-zones
block dmz drop external home internal nm-shared public trusted work

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources: 
  services: cockpit dhcpv6-client domino http https smtp ssh websockets
  ports: 
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
    rule family="ipv4" source address="45.133.1.201" reject
    rule family="ipv4" source address="31.210.20.23" reject
    ...

# firewall-cmd --list-rich-rules
... lists the same rules as above, some 520 lines

修正する

# firewall-cmd --info-service domino
domino
  ports: 1352/tcp
  protocols: 
  source-ports: 
  modules: 
  destination: 
  includes: 
  helpers: 

# firewall-cmd --info-service websockets
websockets
  ports: 3000-3029/tcp
  protocols: 
  source-ports: 
  modules: 
  destination: 
  includes: 
  helpers: 

答え1

RHEL / CentOS 8およびRHEL 9ではクラシックの代わりにfirewalld使用されるため、ルールがまったくないようです。nftablesiptablesiptables-save

nftablesファイアウォールルールが実際に機能していることを確認するには、次の手順を実行します。

nft list ruleset

nftables作成されたルールよりも優先されるルールセットを手動で作成できるため、firewalld誰かが一部のルールを設定する場合(cockpit設定に許可が表示されてfirewalldいる場合や手動編集など)を行う/etc/nftables/main.nftことに加えて、firewalld重要です。さまざまなルールが処理される順序を理解するために、ルールセット全体を確認します。

手動で作成されたフィルタテーブルにSMTPを許可するルールが含まれていて、そのテーブルがで作成したフィルタテーブルよりも優先順位が高い場合、設定がこれらのソースアドレスからSMTPをブロックするのに効果がないfirewalld理由を説明できます。firewalld

答え2

ユースケースには豊富なルールは必要なく、ファイアウォールルールを再ロードする必要もありません。

次のソースをファイアウォールブロック領域に追加するだけで十分です。

firewall-cmd --zone=block --add-source=45.125.66.22
firewall-cmd --permanent --zone=block --add-source=45.125.66.22
firewall-cmd --zone=block --add-source=45.125.66.24
firewall-cmd --permanent --zone=block --add-source=45.125.66.24

注:すでに確立されている接続は終了しません!

次のように殺すことができます:

ss -K dst 45.125.66.22
ss -K dst 45.125.66.24

答え3

有線上の理由から、Firewalldは何も生成しません。その結果、カーネルはすべての着信トラフィックを受け入れます。

汚れたファイアウォールの代わりに単純なiptablesとipsetを使用して学びます。より効率的で簡単です。

すばやく開始するには、次のルールを追加してください。

iptables -A INPUT -s bad_ip -j DROP

ファイアウォールを無効にします。

次に、アクションのルールを作成します。ステートフルルール、接続追跡、IPset、ポート...

関連情報