iptables/firewall дырка + не оптимально
iptables/firewall дырка + не оптимально
Файрвол у вас настроен крайне странно и не оптимально...
1. -A INPUT -p tcp -m tcp --sport 21 -j ACCEPT
такого рода правила открывают доступ на ЛЮБОЙ порт инициированные с порта 21 (например) с ЛЮБОГО хоста в интернете! Это дырень размером с планету... (в конце сообщения скрипт, подтверждающий это)
2. -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
Это правило должно стоять как можно выше. У вас же оно в самом низу. 99% пакетов попадают именно под это правило.
3. -A INPUT -s X.X.X.X/32 -j ACCEPT и аналогичное для локалхоста
Эти правила тоже надо ставить как можно выше, т.к. исходя из настроек панели весь трафик даже между nginx и apache идет через внешний интерфейс - дак вот его путь надо минимизировать, а не ставить после проверки всех правил с портами.
Вот тут diff текущего и того, что надо бы сделать...
Скрипт теста обхода iptables:
Фикс не сложный - могу сделать pull-request.
1. -A INPUT -p tcp -m tcp --sport 21 -j ACCEPT
такого рода правила открывают доступ на ЛЮБОЙ порт инициированные с порта 21 (например) с ЛЮБОГО хоста в интернете! Это дырень размером с планету... (в конце сообщения скрипт, подтверждающий это)
2. -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
Это правило должно стоять как можно выше. У вас же оно в самом низу. 99% пакетов попадают именно под это правило.
3. -A INPUT -s X.X.X.X/32 -j ACCEPT и аналогичное для локалхоста
Эти правила тоже надо ставить как можно выше, т.к. исходя из настроек панели весь трафик даже между nginx и apache идет через внешний интерфейс - дак вот его путь надо минимизировать, а не ставить после проверки всех правил с портами.
Вот тут diff текущего и того, что надо бы сделать...
Code: Select all
root@vsh01:~# iptables-save > iptables.txt
root@vsh01:~# diff -up iptables.txt iptables-new.txt
--- iptables.txt 2016-01-24 22:20:32.230995408 +0300
+++ iptables-new.txt 2016-01-24 22:21:45.064172243 +0300
@@ -8,6 +8,9 @@
:fail2ban-VESTA - [0:0]
:fail2ban-ssh - [0:0]
:vesta - [0:0]
+-A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
+-A INPUT -s X.X.X.X/32 -j ACCEPT
+-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 22 -j fail2ban-ssh
-A INPUT -p tcp -m tcp --dport 8083 -j fail2ban-VESTA
-A INPUT -p tcp -m multiport --dports 25,465,587,2525,110,995,143,993 -j fail2ban-MAIL
@@ -22,25 +25,6 @@
-A INPUT -p tcp -m multiport --dports 143,993 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8083 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
--A INPUT -s X.X.X.X/32 -j ACCEPT
--A INPUT -s 127.0.0.1/32 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 20 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 21 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 22 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 25 -j ACCEPT
--A INPUT -p udp -m udp --sport 53 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 80 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 443 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 110 -j ACCEPT
--A INPUT -p udp -m udp --sport 123 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 143 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 3306 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 5432 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 8080 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 8433 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 8083 -j ACCEPT
--A INPUT -p tcp -m tcp --sport 12000:12100 -j ACCEPT
--A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A fail2ban-MAIL -j RETURN
-A fail2ban-SSH -j RETURN
-A fail2ban-VESTA -j RETURN
Скрипт теста обхода iptables:
Code: Select all
root@vsh02:~# cat iptables-test.php
<?php
$localip = 'LOCAL IP';
$localport = LOCAL PORT (one of listed with parameters --sport) (for example 8080);
$remoteip = 'REMOTE IP - жертва';
$remoteport = REMOTE PORT, который не открыт там с помощью iptables;
// Создаём новый сокет
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// Привязываем адрес источника
socket_bind($sock, $localip, $localport);
// Соединяемся с адресом назначения
$r = socket_connect($sock, $remoteip, $remoteport);
var_dump($r);
// Закрываем сокет
socket_close($sock);
Фикс не сложный - могу сделать pull-request.
Re: iptables/firewall дырка + не оптимально
Все хорошо только тут обсуждения,
надо https://bugs.vestacp.com/ добавить вашу " iptables/firewall дырка".
надо https://bugs.vestacp.com/ добавить вашу " iptables/firewall дырка".
Re: iptables/firewall дырка + не оптимально
подтверждаю - сделано криво
iptables -N ban
iptables -A INPUT -j ban
при ддос если добавить цепочку ban и в нее добавлять скриптом ддос ip - то правило не работает
выше установленные правила игнорят эту новую цепочку ban
https://bugs.vestacp.com/responses/prob ... faervollom
видимо правила iptables продумывал не специалист - поэтому приходится сносить faerwall
iptables -N ban
iptables -A INPUT -j ban
при ддос если добавить цепочку ban и в нее добавлять скриптом ддос ip - то правило не работает
Code: Select all
iptables -A ban -s 79.141.160.23 -j DROP
https://bugs.vestacp.com/responses/prob ... faervollom
видимо правила iptables продумывал не специалист - поэтому приходится сносить faerwall
Last edited by logger on Fri Jan 29, 2016 6:29 am, edited 2 times in total.
Re: iptables/firewall дырка + не оптимально
Занятно замечание.Scorcher wrote:Файрвол у вас настроен крайне странно и не оптимально...
Фикс не сложный - могу сделать pull-request.
Пулл или баг (bugs.vestacp.com) было бы отлично.
Естественно потестируем и добавим, если все ок.
Re: iptables/firewall дырка + не оптимально
все замечания из темы проверю.
сделаю PR.
сделаю PR.
Re: iptables/firewall дырка + не оптимально
Тут у вас две фундаментальные ошибки:logger wrote:подтверждаю - сделано криво
iptables -N ban
iptables -A INPUT -j ban
при ддос если добавить цепочку ban и в нее добавлять скриптом ддос ip - то правило не работаетвыше установленные правила игнорят эту новую цепочку banCode: Select all
iptables -A ban -s 79.141.160.23 -j DROP
https://bugs.vestacp.com/responses/prob ... faervollom
видимо правила iptables продумывал не специалист - поэтому приходится сносить faerwall
* при реальном DDoS файерволы не помогают - скорее проблема в каналах до вашей железки проявится. Если вы просто про большой поток HTTP запросов - то можно закрываться как фаерволом, так и на уровне nginx.
* если я правильно понял вашу потребность, то она достигается таким образом:
iptables -N ban # создает цепочку ban
iptables -F ban # сбрасывает содержимое цепочки ban
iptables -A ban -s 0.0.0.0/0 -j RETURN # добавить в конец цепочки ban правило возврата из цепочки, чтобы трафик проходил к следующим правилам и цепочкам
iptables -I INPUT -j ban # добавляем в НАЧАЛО цепочки INPUT переход в цепочку ban
после этого можете добавлять (-I) или удалять (-D) правила из цепочки ban и все будет работать:
iptables -I ban -s 79.141.160.23/32 -j DROP
iptables -D ban -s 79.141.160.23/32 -j DROP
Т.е. надо иметь фундаментальные понятия о том как работает firewall и не путать -I и -A в частности.
PS: PR сделал. https://github.com/serghey-rodin/vesta/pull/657 для общих целей подойдет. Но я конечно всегда настраиваю с учетом интерфейсов и точного контроля того что приходит... Но тут тяжко, особенно кроссплатформенно это делать.