The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Правила iptables для веб-сервера"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Информационная безопасность (Linux iptables, ipchains / Linux)
Изначальное сообщение [ Отслеживать ]

"Правила iptables для веб-сервера"  +/
Сообщение от cssua (ok) on 07-Сен-13, 03:40 
Здравствуйте.

Перечитав много информации на эту тему в интернете удалось составить набор правил для веб сервера. Хочется услышать ваши замечания и советы.
Наиболее не уверен в блоке Deny synflood, а именно в этих tcp-flags, видел примеры где их позволяют с лимитом в 1 секунду, поэтому не знаю как будет правильно.
Также есть сомнение по Deny DoS http|s, видел реализации с использованием limit - limit-burst, тут также не знаю как лучше будет.
Сами правила:

#!/bin/bash

#Clear all#
iptables -F
iptables -t nat -F
iptables -t mangle -F

iptables -X
iptables -t nat -X
iptables -t mangle -X

#Deny all#
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT    

#Allow local interface#                                                
iptables -A INPUT -i lo -j ACCEPT

#Blacklist#
iptables -A INPUT -s 10.0.0.0/8       -j DROP                                
iptables -a INPUT -s 192.0.0.1/24     -j DROP                                
iptables -A INPUT -s 169.254.0.0/16   -j DROP                                
iptables -A INPUT -s 172.16.0.0/12    -j DROP                                
iptables -A INPUT -s 224.0.0.0/4      -j DROP                                
iptables -A INPUT -d 224.0.0.0/4      -j DROP                                
iptables -A INPUT -s 240.0.0.0/5      -j DROP                                
iptables -A INPUT -d 240.0.0.0/5      -j DROP                                
iptables -A INPUT -s 0.0.0.0/8        -j DROP                                
iptables -A INPUT -d 0.0.0.0/8        -j DROP                                
iptables -A INPUT -d 239.255.255.0/24 -j DROP                                
iptables -A INPUT -d 255.255.255.255  -j DROP

#Whitelist#
iptables -A INPUT -s 1.2.3.4 -j ACCEPT

#Deny invalid#
iptables -A INPUT   -m state --state INVALID -j DROP                            
iptables -A FORWARD -m state --state INVALID -j DROP                            
iptables -A OUTPUT  -m state --state INVALID -j DROP

#Deny synflood#
iptables -A INPUT -p tcp -m tcp --tcp-flags ALL ACK,RST,SYN,FIN -j DROP
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN -j DROP                
iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
iptables -A INPUT -m state --state NEW -p tcp -m tcp --syn -m recent --name SYNFLOOD --set                        
iptables -A INPUT -m state --state NEW -p tcp -m tcp --syn -m recent --name SYNFLOOD --update --seconds 1 --hitcount 60 -j DROP

#Deny tcp without syn#
iptables -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP

#Deny ICMP#
iptables -I INPUT -p icmp -f -j DROP

#Deny SFTP brut#
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --name SFTP_BRUTE --set
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --name SFTP_BRUTE --update --seconds 30 --hitcount 3 -j DROP

#Deny DoS http|s#
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 15 --hitcount 20 -j DROP
iptables -I INPUT -p tcp --dport 443 -m state --state NEW -m recent --update --seconds 15 --hitcount 20 -j DROP

#Allow rel, estb#
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Rules#
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

#Allow logs#
iptables -N LOGGING                                                
iptables -A INPUT -j LOGGING                                                 
iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 6    
iptables -A LOGGING -j DROP                                        

Также вопрос как их использовать, раньше делал файлик .sh и запускал, также добавлял его в
/etc/rc.local для автозапуска. Сегодня узнал о iptables save, iptables restart, как теперь всё это использовать?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Правила iptables для веб-сервера"  +/
Сообщение от cssua (ok) on 07-Сен-13, 03:47 
> iptables -A INPUT -p tcp --dport 80 -m limit --limit 50/minute --
> 200 -j ACCEPT
> iptables -A INPUT -p tcp --dport 443 -m limit --limit 25/minute --limit-burst
> 100 -j ACCEPT

Лишние (забыл удалить).

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Правила iptables для веб-сервера"  +/
Сообщение от 1 (??) on 07-Сен-13, 19:31 
а разве в

#Allow rel, estb#
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

#Rules#
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT

2-4 правила не явлются частным случаем первого? (т.е. не нужны, хотя вроде начало соединения...)

в начало ставил бы как раз то на что больше трафика придется а это должно быть:
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

затем whitelist
затем правила по убыванию вероятного трафика по началу соединения
iptables -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
#Deny SFTP brut#
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --name SFTP_BRUTE --set
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --name SFTP_BRUTE --update --seconds 30 --hitcount 3 -j DROP

#Deny DoS http|s#
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 15 --hitcount 20 -j DROP
iptables -I INPUT -p tcp --dport 443 -m state --state NEW -m recent --update --seconds 15 --hitcount 20 -j DROP

а потом уже весь остальной дроп по адресам blacklist
и в конце
iptables -A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -j ACCEPT
остальное дропать:
iptables -A INPUT -j DROP

я бы поступил так, если ошибаюсь обьясните пож-та в чем.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру