Настройки Iptables для сервера
Re: Настройки Iptables для сервера
1. В примере с hashlimit ограничена частота соединений с одного ip на 400/min. Я только не указал следующее правило с DROP:demian wrote:1. зачем нам больше коннектов с одного ip на порты сервера? - sync flood однако --> обработка запросов службой --> увеличение потребления памяти службой --> свал сервера в swap(если он есть) --> потеря контроля над сервером
2. правило не отбрасывает соединения, а лишь тормозит их... по вашему примеру... они будут блокироваться почти на 10 минут + при действительно ddos атаке получится stack owerflow(не увеличить системные лимиты ip стека), а тогда поможет только reset
3. в ваших простых правилах вообще нет ограничений....т.о. весь траф пойдет на службы.... так и так заваливая их
-A INPUT -m tcp -p tcp --dport 80 -m hashlimit --hashlimit-upto 400/min --hashlimit-burst 500 --hashlimit-mode srcip --hashlimit-name ratelimit -j ACCEPT
-A INPUT -m tcp -p tcp --dport 80 -j DROP
Вообще я предложил только подумать над hashlimit, так как мне кажется, что 600/min запросов на весь сервер будет мало. Это всего 6 запросов в секунду на все сайты сервера.
2. Правило limit 600/min будет принимать 600 соединений в секунду, а если будет больше, то такие пакеты он не будет акцептить и они будут рассматриваться с след. правилах. Там дальше нет правил для dport 80, поэтому пакеты попадут в последнее правило с REJECT.
3. да, тут я не приводил ограничений. но если поставить слишком низкие limit, то сервер не загнется, он просто не будет обрабатывать http запросы при самых минимальных атаках. Логичней мне кажется будет сделать комбинацию из ограничений на ip и общий лимит вот так:
-A INPUT -p tcp -m tcp --dport 80 -m limit --limit 20/sec --limit-burst 10 -j ACCEPT
-A INPUT -m tcp -p tcp --dport 80 -m hashlimit --hashlimit-upto 200/min --hashlimit-burst 200 --hashlimit-mode srcip --hashlimit-name ratelimit -j ACCEPT
-A INPUT -m tcp -p tcp --dport 80 -j DROP
Last edited by Deeryo on Thu Mar 06, 2014 11:44 am, edited 1 time in total.
Re: Настройки Iptables для сервера
Ааа, я понял, вы подумали, что правила limit или hashlimit умеют задерживать пакеты. Но это не верно. Эти правила акцептят пакеты с указанной частотой, а превышающие эту частоту пакеты они не рассматривают, поэтому такие пакеты идут в следущие правила iptables. Вот у меня ссылка на мануал под рукой http://ipset.netfilter.org/iptables-extensions.man.htmlправило не отбрасывает соединения, а лишь тормозит их... по вашему примеру... они будут блокироваться почти на 10 минут
Re: Настройки Iptables для сервера
Чет я еще больше запутался ))
Можете в кучу собрать настройки какие вписать. Было бы еще не плохо с краткими комментариями что делают по блокам например.
Можете в кучу собрать настройки какие вписать. Было бы еще не плохо с краткими комментариями что делают по блокам например.
Re: Настройки Iptables для сервера
Попробую добавить лимиты. (тут я объединил разные порты http/https smtp/smtps и pop/imap, но это возможно неправильно)
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type echo-request -m limit --limit 1/sec -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp --dport ftp -m limit --limit 10/min --limit-burst 10 -m comment --comment "FTP" -j ACCEPT
-A INPUT -p tcp -m tcp --dport ssh -m limit --limit 2/min --limit-burst 2 -m comment --comment "SSH" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8083 -m limit --limit 2/min --limit-burst 2 -m comment --comment "Vesta" -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports http,https -m hashlimit --hashlimit-above 200/min --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name ip-http -j DROP
-A INPUT -p tcp -m tcp -m multiport --dports smtp,smtps,submission -m hashlimit --hashlimit-above 50/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name ip-smtp -j DROP
-A INPUT -p tcp -m tcp -m multiport --dports pop3,pop3s,imap,imaps -m hashlimit --hashlimit-above 30/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name ip-pop -j DROP
-A INPUT -p tcp -m tcp -m multiport --dports http,https -m limit --limit 20/sec --limit-burst 20 -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports pop3,pop3s,imap,imaps -m limit --limit 10/sec --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports smtp,smtps,submission -m limit --limit 10/sec --limit-burst 10 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
Пояснения:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT - принять установленные соединения
-A INPUT -m state --state INVALID -j DROP - отбросить левые пакеты, для которых нет записи в conntrack.
Далее все пакеты можно считать NEW, так как мы уже обработали RELATED,ESTABLISHED и INVALID.
Правила с hashlimit отбрасывают пакеты, если они превышают частоту для отдельного IP.
Правила с limit принимают указанное количество пакетов в единицу времени, остальные пакеты идут на след. правила. В конце концов все лишние пакеты попадают в последнее правило с DROP.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type echo-request -m limit --limit 1/sec -j ACCEPT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -p tcp -m tcp --dport ftp -m limit --limit 10/min --limit-burst 10 -m comment --comment "FTP" -j ACCEPT
-A INPUT -p tcp -m tcp --dport ssh -m limit --limit 2/min --limit-burst 2 -m comment --comment "SSH" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8083 -m limit --limit 2/min --limit-burst 2 -m comment --comment "Vesta" -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports http,https -m hashlimit --hashlimit-above 200/min --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name ip-http -j DROP
-A INPUT -p tcp -m tcp -m multiport --dports smtp,smtps,submission -m hashlimit --hashlimit-above 50/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name ip-smtp -j DROP
-A INPUT -p tcp -m tcp -m multiport --dports pop3,pop3s,imap,imaps -m hashlimit --hashlimit-above 30/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name ip-pop -j DROP
-A INPUT -p tcp -m tcp -m multiport --dports http,https -m limit --limit 20/sec --limit-burst 20 -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports pop3,pop3s,imap,imaps -m limit --limit 10/sec --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports smtp,smtps,submission -m limit --limit 10/sec --limit-burst 10 -j ACCEPT
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
Пояснения:
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT - принять установленные соединения
-A INPUT -m state --state INVALID -j DROP - отбросить левые пакеты, для которых нет записи в conntrack.
Далее все пакеты можно считать NEW, так как мы уже обработали RELATED,ESTABLISHED и INVALID.
Правила с hashlimit отбрасывают пакеты, если они превышают частоту для отдельного IP.
Правила с limit принимают указанное количество пакетов в единицу времени, остальные пакеты идут на след. правила. В конце концов все лишние пакеты попадают в последнее правило с DROP.
Last edited by Deeryo on Thu Mar 06, 2014 1:27 pm, edited 8 times in total.
Re: Настройки Iptables для сервера
Даже не стартует:
Ругается на строчку (11):
Code: Select all
# service iptables start
iptables: Применяются правила межсетевого экрана: Bad argument `limit'
Error occurred at line: 11
Try `iptables-restore -h' or 'iptables-restore --help' for more information.
[СБОЙ ]
Code: Select all
-A INPUT -p tcp -m tcp --dport 21 --limit 10/min --limit-burst 10 -m comment --comment "FTP" -j ACCEPT
Re: Настройки Iptables для сервера
Добавил пропущенный "-m limit"
Re: Настройки Iptables для сервера
Снова только запустил Iptables и сайт недоступен. Проверяю через: 2ip.ru/site-availability/
Только выключаю Iptables и снова сайт доступен...
Для днс порта (53) нужно правила писать?
Только выключаю Iptables и снова сайт доступен...
Для днс порта (53) нужно правила писать?
Re: Настройки Iptables для сервера
Еще раз переписал правила и добавил разрешение udp 53 для dns.
Re: Настройки Iptables для сервера
Спасибо. Теперь вроде все нормально.
Вот такой конфиг в итоге вышел:
Вот такой конфиг в итоге вышел:
Code: Select all
# Firewall configuration written by system-config-firewall
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
# Принять установленные соединения
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# DNS
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
# Входящий в стек протоколов TCP/IP. В основном используется для передачи сообщений об ошибках
-A INPUT -p icmp -m icmp --icmp-type echo-request -m limit --limit 1/sec -j ACCEPT
# Отбросить левые пакеты, для которых нет записи в conntrack
-A INPUT -m state --state INVALID -j DROP
# Далее все пакеты можно считать NEW, так как мы уже обработали RELATED,ESTABLISHED и INVALID
# Правила с hashlimit тоже отбрасывают пакеты, если они превышают частоту для отдельного IP
# Правила с limit принимают указанное количество пакетов в единицу времени, остальные пакеты идут на след. правила
# 21,22,8083
-A INPUT -p tcp -m tcp --dport ftp -m limit --limit 10/min --limit-burst 10 -m comment --comment "FTP" -j ACCEPT
-A INPUT -p tcp -m tcp --dport ssh -m limit --limit 2/min --limit-burst 2 -m comment --comment "SSH" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8083 -m limit --limit 2/min --limit-burst 2 -m comment --comment "Vesta" -j ACCEPT
# 80,443
-A INPUT -p tcp -m tcp -m multiport --dports http,https -m hashlimit --hashlimit-above 200/min --hashlimit-burst 20 --hashlimit-mode srcip --hashlimit-name ip-http -j DROP
# smtp,smtps,submission
-A INPUT -p tcp -m tcp -m multiport --dports smtp,smtps,submission -m hashlimit --hashlimit-above 50/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name ip-smtp -j DROP
# pop3,pop3s,imap,imaps
-A INPUT -p tcp -m tcp -m multiport --dports pop3,pop3s,imap,imaps -m hashlimit --hashlimit-above 30/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name ip-pop -j DROP
# all
-A INPUT -p tcp -m tcp -m multiport --dports http,https -m limit --limit 20/sec --limit-burst 20 -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports pop3,pop3s,imap,imaps -m limit --limit 10/sec --limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp -m multiport --dports smtp,smtps,submission -m limit --limit 10/sec --limit-burst 10 -j ACCEPT
# В конце концов все лишние пакеты попадают в последнее правило с DROP
-A INPUT -j DROP
-A FORWARD -j DROP
COMMIT
Re: Настройки Iptables для сервера
Отлично, проверим в бою так сказать. Я то не тестировал еще