iptables/firewall дырка + не оптимально
Posted: Sun Jan 24, 2016 7:58 pm
Файрвол у вас настроен крайне странно и не оптимально...
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.