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
使用されるため、ルールがまったくないようです。nftables
iptables
iptables-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、ポート...