iptables как механизм уменьшения нагрузки на сервисы

На доскональное знание данной темы, не может претендовать, пожалуй ни один спец, из ныне живущих на земле. ;-)
Так поможем друг другу.

Модераторы: Trinity admin`s, Free-lance moderator`s

Ответить
Аватара пользователя
setar
Site Admin
Site Admin
Сообщения: 1990
Зарегистрирован: 22 авг 2002, 12:03
Откуда: St. Petersburg

iptables как механизм уменьшения нагрузки на сервисы

Сообщение setar » 07 окт 2008, 13:33

Всем привет.

хочу посоветоваться по поводу уменьшения нагрузки на почтовый сервер с помощью фаервола.

вот такие правила :

Код: Выделить всё

iptables -N SMTP                                                                                                                                   
iptables -N SMTP_REJECT_1                                                                                                                          
iptables -N SMTP_REJECT_2                                                                                                                          
iptables -N SMTP_REJECT_3                                                                                                                          
iptables -N SMTP_REJECT_4
iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j SMTP
iptables -A SMTP -m recent --update --name SMTP_REJECT_1 --seconds    600 --hitcount 1 -j DROP                                                     
iptables -A SMTP -m recent --update --name SMTP_REJECT_2 --seconds   3600 --hitcount 1 -j DROP                                                     
iptables -A SMTP -m recent --update --name SMTP_REJECT_3 --seconds  86400 --hitcount 1 -j DROP                                                     
iptables -A SMTP -m recent --update --name SMTP_REJECT_4 --seconds 604800 --hitcount 1 -j DROP                                                     
iptables -A SMTP -m recent --set --name smtp_c1                                                                                                    
iptables -A SMTP -m recent --set --name smtp_c2                                                                                                    
iptables -A SMTP -m recent --set --name smtp_c3                                                                                                    
iptables -A SMTP -m recent --set --name smtp_c4                                                                                                    
iptables -A SMTP -m recent --update --name smtp_c1 --seconds    60 --hitcount  10 -j SMTP_REJECT_1                                                 
iptables -A SMTP -m recent --update --name smtp_c2 --seconds   600 --hitcount  20 -j SMTP_REJECT_2                                                 
iptables -A SMTP -m recent --update --name smtp_c3 --seconds  3600 --hitcount  40 -j SMTP_REJECT_3                                                 
iptables -A SMTP -m recent --update --name smtp_c4 --seconds 86400 --hitcount 100 -j SMTP_REJECT_4                                                 
iptables -A SMTP -m limit --limit 1/sec --limit-burst 3 -j ACCEPT                                                                                  
iptables -A SMTP -j REJECT                                                                                                                         
iptables -A SMTP_REJECT_1 -m recent --set --name SMTP_REJECT_1                                                                                     
iptables -A SMTP_REJECT_1 -j LOG --log-prefix "INPUT smtp REJECT: (10min)"                                                                         
iptables -A SMTP_REJECT_1 -j REJECT                                                                                                                
iptables -A SMTP_REJECT_2 -m recent --set --name SMTP_REJECT_2                                                                                     
iptables -A SMTP_REJECT_2 -j LOG --log-prefix "INPUT smtp REJECT: (1h)"                                                                            
iptables -A SMTP_REJECT_2 -j REJECT                                                                                                                
iptables -A SMTP_REJECT_3 -m recent --set --name SMTP_REJECT_3                                                                                     
iptables -A SMTP_REJECT_3 -j LOG --log-prefix "INPUT smtp REJECT: (1day)"                                                                          
iptables -A SMTP_REJECT_3 -j REJECT                                                                                                                
iptables -A SMTP_REJECT_4 -m recent --set --name SMTP_REJECT_4                                                                                     
iptables -A SMTP_REJECT_4 -j LOG --log-prefix "INPUT smtp REJECT: (7day)"                                                                          
iptables -A SMTP_REJECT_4 -j REJECT
теперь по русски - что они делают :
1. все новые входящие соединения на 25 порт заворачиваем в цепочку SMTP
2. подготавливаем счетчики, блокируем уже папавших в списки и ограничиваем скорость входящих коннектов до 1 входа в секунду
3. считаем счётчики и отправляем в забвение если они превышины:
   10 писем в минуту -  бан на 10 мин
   20 писем в 10 мин - бан на час
   40 писем в час - бан на сутки
  100 писем в день - бан на неделю

примерно так, ну и логим действия с соответствующим временем бана.
ввел такие правила в проверку, собираю статистику, просматривая логи.
пока хуже не стало :) посмотрим что дальше будет
P.S. в спам листах  сейчас 714 ip проверял их по доменным именам, выборочно смотрел логи - в основном это хосты отлупленные из за присутствия в блек листах внешних (spamhaus.org)

Аватара пользователя
RedScorp
Advanced member
Сообщения: 158
Зарегистрирован: 24 июл 2003, 11:01
Откуда: Западный Казахстан, г.Уральск
Контактная информация:

Re: iptables как механизм уменьшения нагрузки на сервисы

Сообщение RedScorp » 02 окт 2009, 10:24

Удивительно. Прошел год, а народ ни словом даже... А ведь в iptables можно ооочень многое натворить (в хорошем смысле).
А я бы вот с большим удовольствием посмотрел на текущий iptables setar'a. Ибо помнится год назад он скидывал мне большууууууший список правил. И поверьте там не только уменьшение нагрузки на сервисы типа smtp. Вот нашел то самое хистори, надеюсь setar не будет против (кста, для тех кто не помнит, в былые времена setar в асе звался Tornado :wink: ):
Tornado (7/10/2008)
спама меньше не стало, а вот почтовик реально меньше нагрузку стал давать
по кусочкам, полная версия общих правил

Код: Выделить всё

###############################################################################                                                                                             
# Default Rules DROP                                                                                                                                                        
###############################################################################                                                                                             
iptables -F                                                                                                                                                                 
iptables -t nat -F                                                                                                                                                          
                                                                                                                                                                            
iptables -P INPUT DROP                                                                                                                                                      
iptables -P OUTPUT DROP                                                                                                                                                     
iptables -P FORWARD DROP                                                                                                                                                    
                             
iptables -X                                                                                                                                                                 
iptables -N SYNFLOOD                                                                                                                                                        
iptables -N PING                                                                                                                                                            
iptables -N SSH                                                                                                                                                             
iptables -N BLACKLIST                                                                                                                                                       
iptables -N FTP                                                                                                                                                             
iptables -N WWW                                                                                                                                                             
iptables -N SMTP                                                                                                                                                            
iptables -N SMTP_REJECT_1                                                                                                                                                   
iptables -N SMTP_REJECT_2                                                                                                                                                   
iptables -N SMTP_REJECT_3                                                                                                                                                   
iptables -N SMTP_REJECT_4

###############################################################################                                                                                             
# BASIC rules                                                                                                                                                               
###############################################################################                                                                                             
echo "Start BASIC rules"                                                                                                                                                    
#------------------------------------------------------------------------------                                                                                             
iptables -A INPUT -i ! $EXT_INTERFACE -j ACCEPT                                                                                                                             
                                                                                                                                                                            
iptables -A INPUT -i $EXT_INTERFACE -p icmp -m icmp --icmp-type 0 -j ACCEPT                                                                                                 
iptables -A INPUT -i $EXT_INTERFACE -p icmp -m icmp --icmp-type 8 -m state --state NEW -j PING                                                                              
iptables -A INPUT -i $EXT_INTERFACE -p icmp -m icmp --icmp-type 11 -j ACCEPT                                                                                                
iptables -A INPUT -i $EXT_INTERFACE -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j SYNFLOOD                                                                               
iptables -A INPUT -i $EXT_INTERFACE -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP                                                            
iptables -A INPUT -m state --state INVALID -j DROP                                                                                                                          
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j SSH                                                                                                             
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j FTP                                                                                                             
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j WWW                                                                                                             
iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j SMTP                                                                                                            
                                                                                                                                                                            
iptables -A OUTPUT -j ACCEPT -p ALL -s $LO_IPADDR                                                                                                                           
iptables -A OUTPUT -j ACCEPT -p icmp -s $ANYWHERE -d $ANYWHERE

iptables -A SYNFLOOD -p tcp -m limit --limit 30/sec --limit-burst 30 -j RETURN                                                                                              
iptables -A SYNFLOOD -j LOG -m limit --limit 6/min --log-prefix "INPUT packets syn DROP2:"                                                                                  
iptables -A SYNFLOOD -p tcp -j REJECT --reject-with tcp-reset                                                                                                               
iptables -A PING -p icmp --icmp-type echo-request -m limit --limit 1/second -j ACCEPT                                                                                       
iptables -A PING -p icmp -j REJECT                                                                                                                                          
iptables -A BLACKLIST -m recent --set --name BLACKLIST                                                                                                                      
iptables -A BLACKLIST -j DROP

iptables -A SSH -m recent --update --name BLACKLIST --seconds 600 --hitcount 1 -j DROP                                                                                      
iptables -A SSH -m recent --set --name counting1                                                                                                                            
iptables -A SSH -m recent --set --name counting2                                                                                                                            
iptables -A SSH -m recent --set --name counting3                                                                                                                            
iptables -A SSH -m recent --set --name counting4                                                                                                                            
iptables -A SSH -m recent --update --name counting1 --seconds    20 --hitcount   5 -j BLACKLIST                                                                             
iptables -A SSH -m recent --update --name counting2 --seconds   200 --hitcount  15 -j BLACKLIST                                                                             
iptables -A SSH -m recent --update --name counting3 --seconds  2000 --hitcount  80 -j BLACKLIST                                                                             
iptables -A SSH -m recent --update --name counting4 --seconds 20000 --hitcount 400 -j BLACKLIST                                                                             
iptables -A SSH -j ACCEPT

iptables -A FTP -m recent --set --name FTP                                                                                                                                  
iptables -A FTP -m recent --update --name FTP --seconds 180 --hitcount 6 -j BLACKLIST                                                                                       
iptables -A FTP -j ACCEPT                                                                                                                                                   
iptables -A WWW -m limit --limit 5/sec --limit-burst 10 -j ACCEPT                                                                                                           
iptables -A WWW -j LOG -m limit --limit 6/min --log-prefix "INPUT packets www REJECT2:"                                                                                     
iptables -A WWW -j REJECT

iptables -A SMTP -m recent --update --name SMTP_REJECT_1 --seconds    600 --hitcount 1 -j DROP                                                                              
iptables -A SMTP -m recent --update --name SMTP_REJECT_2 --seconds   3600 --hitcount 1 -j DROP                                                                              
iptables -A SMTP -m recent --update --name SMTP_REJECT_3 --seconds  86400 --hitcount 1 -j DROP                                                                              
iptables -A SMTP -m recent --update --name SMTP_REJECT_4 --seconds 604800 --hitcount 1 -j DROP                                                                              
iptables -A SMTP -m recent --set --name smtp_c1                                                                                                                             
iptables -A SMTP -m recent --set --name smtp_c2                                                                                                                             
iptables -A SMTP -m recent --set --name smtp_c3                                                                                                                             
iptables -A SMTP -m recent --set --name smtp_c4                                                                                                                             
iptables -A SMTP -m recent --update --name smtp_c1 --seconds    60 --hitcount  10 -j SMTP_REJECT_1                                                                          
iptables -A SMTP -m recent --update --name smtp_c2 --seconds   600 --hitcount  20 -j SMTP_REJECT_2                                                                          
iptables -A SMTP -m recent --update --name smtp_c3 --seconds  3600 --hitcount  40 -j SMTP_REJECT_3                                                                          
iptables -A SMTP -m recent --update --name smtp_c4 --seconds 86400 --hitcount 100 -j SMTP_REJECT_4                                                                          
iptables -A SMTP -m limit --limit 1/sec --limit-burst 3 -j ACCEPT                                                                                                           
iptables -A SMTP -j REJECT

iptables -A SMTP_REJECT_1 -m recent --set --name SMTP_REJECT_1                                                                                                              
iptables -A SMTP_REJECT_1 -j LOG --log-prefix "INPUT smtp REJECT: (10min)"                                                                                                  
iptables -A SMTP_REJECT_1 -j REJECT                                                                                                                                         
iptables -A SMTP_REJECT_2 -m recent --set --name SMTP_REJECT_2                                                                                                              
iptables -A SMTP_REJECT_2 -j LOG --log-prefix "INPUT smtp REJECT: (1h)"                                                                                                     
iptables -A SMTP_REJECT_2 -j REJECT                                                                                                                                         
iptables -A SMTP_REJECT_3 -m recent --set --name SMTP_REJECT_3                                                                                                              
iptables -A SMTP_REJECT_3 -j LOG --log-prefix "INPUT smtp REJECT: (1day)"                                                                                                   
iptables -A SMTP_REJECT_3 -j REJECT                                                                                                                                         
iptables -A SMTP_REJECT_4 -m recent --set --name SMTP_REJECT_4                                                                                                              
iptables -A SMTP_REJECT_4 -j LOG --log-prefix "INPUT smtp REJECT: (7day)"                                                                                                   
iptables -A SMTP_REJECT_4 -j REJECT
Tornado (7/10/2008)
ну а дальше частные правила

здесь защита от флуда доса по сервисам www SMTP перебор паролей на ssh и ftp
Надеюсь это поддержит дальнейший разговор в адрес всевозможных правил iptables.

Аватара пользователя
setar
Site Admin
Site Admin
Сообщения: 1990
Зарегистрирован: 22 авг 2002, 12:03
Откуда: St. Petersburg

Re: iptables как механизм уменьшения нагрузки на сервисы

Сообщение setar » 05 окт 2009, 13:33

:) наверное никому не интересно просто
прикол в том что меня тут на днях просил человек один посмотреть машинку которую я подготавливал ему на хостинг год назад
тормозить говорит что то стала :)
зашел, посмотрел логи, порадовался...
машина в течении 5 суток выдерживала распределённую DOS атаку,
а немного подтормаживала из за логов :) которые я и оптимизоровал убрав повторяющиеся

Gh0st
Junior member
Сообщения: 16
Зарегистрирован: 22 авг 2009, 01:06
Откуда: Санкт-Петербург

Re: iptables как механизм уменьшения нагрузки на сервисы

Сообщение Gh0st » 20 окт 2009, 08:24

Это нужные вещи, обязательно воспользуюсь при случае.

Dyr
Power member
Сообщения: 43
Зарегистрирован: 14 сен 2005, 10:54
Откуда: Санкт-Петербург
Контактная информация:

Re: iptables как механизм уменьшения нагрузки на сервисы

Сообщение Dyr » 28 окт 2009, 14:18

Нечто подобное у меня на фряшном PF'е.

Ответить

Вернуться в «Серверы - ПО, Unix подобные системы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 9 гостей