Page 1 of 6

Настройки Iptables для сервера

Posted: Mon Mar 03, 2014 11:26 pm
by belka2007
Было бы очень хорошо если бы разработчики Vesta или тот кто хорошо разбирается написали конфиги Iptables для серверов с их панелькой.

У меня например установлена панель с таким набором:
- Nginx frontend web server
- Apache application web server
- Bind DNS server
- Exim mail server
- Dovecot IMAP and POP3 server
- MySQL database server
- Vsftpd FTP server

Конфиг по умолчанию не подходит:

Code: Select all

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
На просторах этого форума нашел еще конфиг один от пользователя "demian":

Code: Select all

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16807:31509796]
-A INPUT -i lo -j ACCEPT 
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -m recent --rcheck --seconds 6000 --name BLOCK --rsource -j DROP 
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -m hashlimit --hashlimit-above 2/min --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP 
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --rcheck --seconds 6000 --name BLOCK --rsource -j DROP 
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit-above 2/min --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP 
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT 
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT 
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP 
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT 
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -j DROP 
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT 
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP 
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Но с ним у меня тоже возникли проблемы, бывает закрывает доступ к shh. Может есть и другие...

Пробовал еще такой:

Code: Select all

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 8083 -j ACCEPT 
-A INPUT -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
Через время блокируется доступ к сайтам.

Хотелось бы все таки, чтоб кто-то толковый написал конфиги нормальные.
Думаю много пользователей будет вам благодарно)

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 6:17 am
by demian
добавление в мое правило неблокиремых IP адресов
после правила RELATED,ESTABLISHED вставит строку с вашим IP

Code: Select all


-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s xxx.xxx.xxx.xxx/32 -m comment --comment "<any text>" -j ACCEPT 

ЗЫ:
1. правила обработки новых соединенй на ssh/ftp допускают 2 попытки подключения в минуту, мгновенная блокировка на 100 минут
2. правила обработки новых подключений http/https допускают 10 подключений в секунду с одного IP привышение притормаживает последующие конекты на 100 секунд
3. несколько правил зашиты от флуда

ЗЫЫ:

для зашиты других портов можете самостоятельно копировать правила ssh/ftp(зашита от брутфорса), http/https(ограничение количества подключений), или использовать правило полной блокировки порта(не забудьте вставить строку со своим ip),

Code: Select all

## блокировка доступа к панели vesta
-A INPUT -p tcp -m tcp --dport 8083 -j DROP 
правило должно располагаться перед правилом, в любом другом месте, я обычно располагаю по мере возрастания портов, для удобства чтения и просмотра статистики

Code: Select all

-A INPUT -j REJECT --reject-with icmp-host-prohibited
to imperio: разместите уже на своей how to странице )), а вообще можно дополнить конфиг различными правилами вплоть до блокировки доступа к phpmyadmin или к разделам сайтов... блокировки через iptables наиболее действены, т.к. не пропускают конекты до остальных служб, тем самым снимая лишнюю нагрузку с сервера

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 11:12 am
by belka2007
Спасибо.
Поменял у себя на такой:

Code: Select all

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16807:31509796]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 00.00.00.00 -m comment --comment "Exception text 1" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -m recent --rcheck --seconds 6000 --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -m hashlimit --hashlimit-above 2/min --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --rcheck --seconds 6000 --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit-above 2/min --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8083 -m state --state NEW -m recent --rcheck --seconds 300 --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 8083 -m state --state NEW -m hashlimit --hashlimit-above 5/min --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Вместо 00.00.00.00 мой ip.

Так будет нормально?

И еще хотел спросить, что делаю строки:

Code: Select all

-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
С остальным вроде более менее понятно...))

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 2:49 pm
by demian
00.00.00.00/32 - Ваш IP, маска сети /32 = 255.255.255.255 - жесткое указание на 1 IP

если управляете хостингом только Вы нет смысла порт 8083 проверять на новые конекты... и проверять попытки брутфорса проще просто дропать остальные конекты... но дело Ваше... правило имеет место быть.

несколько правил зашиты от флуда по парно:
первые два sync-flood attack
вторые - tcp flood
третьи - icmp flood

ЗЫ: вариант блокировки определенных запросов на примере pma я написал в Вашем отдельном теме...

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 3:27 pm
by belka2007
Все таки сайты не доступны становятся сразу при включение iptables. :(
То у меня видно оно кешировало и открывались сразу, а через время блокировались тоже.
Проверил через сервисы онлайн... при включенном iptables сайты не доступны, при выключенном доступны.
Сами IP и панель была доступна.
DNS у меня работают тоже через панель... может в этом проблема и порта для их тоже открывать нужно?

Вот что выдает в статусе (service iptables status):

Code: Select all

Таблица: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
3    ACCEPT     all  --  <00.00.00.00 - moy IP>        0.0.0.0/0           /* Exception text 1 */
4    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21 state NEW recent: CHECK seconds: 6000 name: BLOCK side: source
5    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:21 state NEW limit: above 2/min burst 2 mode srcip recent: SET name: BLOCK side: source
6    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 state NEW recent: CHECK seconds: 6000 name: BLOCK side: source
7    DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 state NEW limit: above 2/min burst 2 mode srcip recent: SET name: BLOCK side: source
8    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:22 flags:0x17/0x02
9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:80 state NEW limit: avg 10/sec burst 100
10   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:443 state NEW limit: avg 10/sec burst 100
11   DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8083 state NEW recent: CHECK seconds: 300 name: BLOCK side: source
12   DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:8083 state NEW limit: above 5/min burst 5 mode srcip recent: SET name: BLOCK side: source
13   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x02 limit: avg 1/sec burst 5
14   DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x02
15   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x04 limit: avg 1/sec burst 5
16   DROP       tcp  --  0.0.0.0/0            0.0.0.0/0           tcp flags:0x17/0x04
17   ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 8 limit: avg 1/sec burst 5
18   DROP       icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 8
19   REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
Может я че делаю не так...
1. Вписал правила в файл /etc/sysconfig/iptables
2. Остановил service iptables stop
3. /sbin/iptables -F - очистил правила
4. /sbin/iptables -F -t nat - очистил правила в таблице nat
5. service iptables status - проверил чтоб не было правил
6. запустил service iptables start

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 4:09 pm
by belka2007
Нашел вроде что для DNS нужен 53 порт.
Может так:

Code: Select all

-A INPUT -p tcp -m tcp --dport 53 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
Хотя закрадывается мысль что для DNS там по хитрому как-то нужно...))

И еще появились вопросы:
- Nginx, Apache (HTTP, HTTPS)___ - порт 80, 443 (учтен в правилах)
- Bind DNS server_______________ - порт 53
- Exim mail server_______________ - порт ?
- Dovecot IMAP and POP3 server__ - порт ?
- MySQL database server_________ - порт ?
- Vsftpd FTP server______________ - порт 21 (учтен в правилах)
- ssh__________________________ - порт 22 (учтен в правилах)
- vesta_________________________ - порт 8083 (учтен в правилах)
Тех что нету в правилах... нужно же тоже учитывать я думаю или нет?

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 6:50 pm
by imperio
to imperio: разместите уже на своей how to странице )), а вообще можно дополнить конфиг различными правилами вплоть до блокировки доступа к phpmyadmin или к разделам сайтов... блокировки через iptables наиболее действены, т.к. не пропускают конекты до остальных служб, тем самым снимая лишнюю нагрузку с сервера
Разместим когда будет wiki - он есть в планах :)
В багтрекере можете оставить подробное предложение по правилам iptables
как вы видите реализацию данной фичи.
Exim mail server_______________ - порт ?
- Dovecot IMAP and POP3 server__ - порт ?
- MySQL database server_________ - порт ?
Вас интересует на каких портах данные службы?

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 7:07 pm
by belka2007
Порты и правила Iptables для:
- Bind DNS server_______________ - порт 53
- Exim mail server_______________ - порт ?
- Dovecot IMAP and POP3 server__ - порт ?
- MySQL database server_________ - порт ?

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 7:30 pm
by imperio
Exim обычно 25 но возможно и 587
Dovecot IMAP and POP3 server 110 также возможно 993
MySQL 3306
А что именно требуется по правилам?

Re: Настройки Iptables для сервера

Posted: Tue Mar 04, 2014 7:52 pm
by belka2007
Ну у меня сейчас прописаны такие правила:

Code: Select all

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [16807:31509796]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s <00.00.00.00 - moy IP> -m comment --comment "Exception text 1" -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -m recent --rcheck --seconds 6000 --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 21 -m state --state NEW -m hashlimit --hashlimit-above 2/min --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m recent --rcheck --seconds 6000 --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 -m state --state NEW -m hashlimit --hashlimit-above 2/min --hashlimit-burst 2 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 22 --tcp-flags FIN,SYN,RST,ACK SYN -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW -m limit --limit 600/min --limit-burst 100 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8083 -m state --state NEW -m recent --rcheck --seconds 600 --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --dport 8083 -m state --state NEW -m hashlimit --hashlimit-above 5/min --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name BLOCK -m recent --set --name BLOCK --rsource -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -j DROP
-A INPUT -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j DROP
-A INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Но при запуске Iptables сайты становятся недоступны. Я думаю это через то что у меня DNS идут через сервер и они не добавлены в правила.
Ну и для остальных хотелось бы узнать нужны ли вообще правила:
- Exim mail server
- Dovecot IMAP and POP3 server
- MySQL database server
Если да, то какие...