2015-01-07 115 views
-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 

我關心的是規則處理性能。上述規則處於有狀態模式,我一直在想如果無狀態模式會使處理速度更快。爲了清楚起見,我阻止了TCP端口上的入侵者IP地址(例如22或25)。

我讀的地方,對於TCP連接專用,添加ESTABLISHED,RELATED狀態會更好。但是由於每個IP指向不同的連接,應用這些狀態是否有意義?

UPDATE:

這裏是一個示例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    

回答

-1

儘管是許多性能辯護士要求,的IPtables能有顯著的開銷,但直到你得到一些實質性的流量也不會明顯。現在你怎麼做表格,以及你調用哪些擴展,將決定每個數據包的CPU開銷。

至於無狀態vs有狀態,是的性能差異可以是巨大的,但它又是一個非常高的吞吐量。另外,正如你可能已經讀過的,管理無狀態防火牆要複雜得多。只有在IPtable影響可衡量的情況下才應該這樣做。

但是應該始終遵循良好的做法,並且IMO應該包括最少的開銷,而不會增加很多複雜性。

現在至於你的情況,fail2ban只是整體考慮你的iptables的一部分,但我建議你只能預防性地考慮這一部分。

-p tcp -m multiport --dports

使用多端口擴展確實有更多的開銷,除非這樣做會使得規則固體還原。既然你只是做2,我會單獨列出來,避免了多端口擴展...或更好的範圍只有一個,如果你不關心阻擋23和24

-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限制,並稱其足夠好。

+0

檢查更新 – Jay