-1

サーバーで失敗したログイン試行をブロックするために、fail2ban を使用しています。ブロックは、次の構成の IP テーブルを使用して実行されます。

actionstart = iptables -N fail2ban
              iptables -A fail2ban -j RETURN
              iptables -I <chain> -p tcp -m multiport --dports <port> -j fail2ban

actionstop = iptables -D <chain> -p tcp -m multiport --dports <port> -j fail2ban
             iptables -F fail2ban
             iptables -X fail2ban

actionban = iptables -I fail2ban 1 -s <ip> -j DROP
actionunban = iptables -D fail2ban -s <ip> -j DROP

気になるのはルール処理性能です。上記のルールはステートフル モードであり、ステートレス モードで処理が速くなるかどうか疑問に思っていました。わかりやすくするために、侵入者の IP アドレスを TCP ポート (22 または 25 など) でブロックしています。

私はどこかで、TCP接続の特別な場合、ESTABLISHED、RELATED状態を追加する方が良いと読みました。しかし、各 IP は異なる接続を参照するため、これらの状態を適用する意味はありますか?

アップデート:

ここにサンプルがありますiptables -L

Chain INPUT (policy ACCEPT 399 packets, 36043 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   39  4230 fail2ban  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           multiport dports 22,25,80,99,100,101 

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 282 packets, 39686 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain fail2ban (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DROP       all  --  *      *       192.168.0.1        0.0.0.0/0
    0     0 DROP       all  --  *      *       192.168.0.2        0.0.0.0/0
    0     0 DROP       all  --  *      *       192.168.0.3        0.0.0.0/0
    0     0 DROP       all  --  *      *       192.168.0.4        0.0.0.0/0           
   39  4230 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0             
4

1 に答える 1

-1

多くのパフォーマンス擁護論者が主張していることにもかかわらず、IPtables にはかなりのオーバーヘッドが発生する可能性がありますが、かなりのトラフィックが発生するまでは気にならないでしょう。テーブルをどのように作成するか、どの拡張機能を呼び出すかによって、パケットあたりの CPU オーバーヘッドが決まります。

ステートレスとステートフルに関しては、はい、パフォーマンスの違いは計り知れませんが、スループットは非常に高くなります。さらに、読んだことがあるかもしれませんが、ステートレス ファイアウォールの管理は非常に複雑です。実際には、IPtable への影響が測定可能な場合にのみ実行する必要があります。

しかし、良い慣行には常に従うべきであり、多くの複雑さを追加することなくオーバーヘッドを最小限に抑える IMO です。

あなたの状況に関して言えば、fail2ban は iptables 全体の一部のみを考慮していますが、予防的に検討することをお勧めするのはこの部分だけです。

-p tcp -m multiport --dports

マルチポート拡張機能を使用すると、ルールを大幅に削減する場合を除いて、オーバーヘッドが増加します。あなたは2つしかしていないので、マルチポート拡張を避けるために、それらを別々にリストします...または、23と24をブロックすることを気にしない場合は、範囲ごとに1つだけ.

-p tcp -m tcp --dport 22:25

確立されたトラッキングに関しては、はい、いくつかの考慮事項がありますが、fail2ban で使用できます。最大の影響を得るには、fail2ban チェーンを ESTABLISHED,RELATED の下に配置します。ただし、これにより、すでに認証されたユーザーが必要になることを考えると、すでに確立されている接続が許可されます。十分に合理的です。

これは、サーバーに使用するテーブルの小さな例です。ルールの例をいくつか示します。コメントを付けました。

*raw
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

## Stateless on Loopback
## Remove everything before #filter if iptables chokes on #raw
-A OUTPUT -o lo -j NOTRACK

COMMIT


*filter
## Default Chains
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

## Proto Chains
:FWINPUT-TCP - [0:0]
:FWINPUT-UDP - [0:0]
:FWINPUT-ICMP - [0:0]

## FAIL2BAN Chain
:fail2ban - [0:0]

## Accept Established
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

## Accept Loopback
-A INPUT -i lo -j ACCEPT

## Seperate Proto
-A INPUT -p tcp -g FWINPUT-TCP
-A INPUT -p udp -g FWINPUT-UDP
-A INPUT -p icmp -g FWINPUT-ICMP

## Reject Anything Non-TCP/UDP/ICMP
-A INPUT -j REJECT --reject-with icmp-proto-unreachable



## TCP Rules
-A FWINPUT-TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A FWINPUT-TCP -p tcp -m tcp --dport 443 -j ACCEPT

## fail2ban Check
-A FWINPUT-TCP -p tcp -m tcp --dport 22:25 -g fail2ban
## fail2ban Return

-A FWINPUT-TCP -p tcp -m tcp --dport 22 -j ACCEPT
-A FWINPUT-TCP -p tcp -m tcp --dport 25 -j ACCEPT

## TCP-Reset Ident
-A FWINPUT-TCP -p tcp -m tcp --dport 113 -j REJECT --reject-with tcp-reset

## Reject Any Other TCP Traffic
-A FWINPUT-TCP -j REJECT --reject-with icmp-port-unreachable


## UDP Rules
-A FWINPUT-UDP -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT

## Reject Any Other UDP Traffic
-A FWINPUT-UDP -j REJECT --reject-with icmp-port-unreachable


## ICMP Rules
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 8 -m limit --limit 5/s -j ACCEPT
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 3 -j ACCEPT
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 4 -j ACCEPT
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 11 -j ACCEPT
-A FWINPUT-ICMP -p icmp -m icmp --icmp-type 12 -j ACCEPT

## Reject Any Other ICMP Types
-A FWINPUT-ICMP -j REJECT --reject-with icmp-host-prohibited

## fail2ban Inserted Rules
-A fail2ban -j RETURN

COMMIT

アクションの開始とアクションの停止を空白にして、fail2ban が実行時にブロックされた IP ルールを追加するだけにします。これは、より多くのものをブロックするために fail2ban の使用を開始したい場合など、より多くの手動の考慮事項を挟むことになります...しかし、それが作業しようとしているもののセットタイプである場合、問題にはなりません.

...サーバーではなくホームシステムでは、通常、iptablesの制限を設定して、それで十分だと呼びます。

于 2015-01-07T15:14:09.303 に答える