LINUX.ORG.RU
ФорумAdmin

Што за херня с IPTABLES?

 ,


0

2

Доброй ночи.

Столкнулся с необычным явлением. Не работают iptables на родном серваке.

На скриншоте перед вами - лог апача одного из доменов. К которому вполне успешно обращается IP-адрес, который должен дропаться согласно правилам.

https://imgur.com/a/MVgTp

Я конечно прочитал про цепочки, про -I -A ключи, но здесь не так много правил, чтобы они друг друга перекрывали.

[root@example domains]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
DROP       all  --  host99-100-dynamic.183-80-r.retail.telecomitalia.it  anywhere            
DROP       all  --  87.69.175.227        anywhere            
DROP       all  --  mx-ll-180.183.100-99.dynamic.3bb.co.th  anywhere            
DROP       all  --  host99-100-dynamic.183-80-r.retail.telecomitalia.it  anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain fail2ban-MAIL (0 references)
target     prot opt source               destination         

Chain fail2ban-SSH (0 references)
target     prot opt source               destination         

Chain fail2ban-VESTA (0 references)
target     prot opt source               destination         

Chain vesta (0 references)
target     prot opt source               destination

Согласно DROP all  — 87.69.175.227 anywhere - он должен дропаться. Но не дропается.

CentOS 6.9

ЧЯДНТ ?


1. А у вас апач прямо на этом же хосте крутиться где и правила iptables прописаны? Никаких контейнеров виртуалок? И так же к нему больше нет никаких других маршрутов?
2. iptables-save в студию.

anc ★★★★★
()
Ответ на: комментарий от anc

По первому пункту не дописал пояснение, оно у вас может быть в цепочке FORWARD.

anc ★★★★★
()
Ответ на: комментарий от targitaj

Не вижу проблем. Может ТС хочет запретить только 1, 2, 3 хоста, имеет место быть и такое. Понимаю что притянуто за уши, но в рамках задачи описанное должно работать для варианта локальных процессов.

anc ★★★★★
()

Отвечаю сразу оптом, чтоб не раздувать тред.

Вот например IP, который пришлось заблокировать средствами nginx'a, и который все равно попадает в лог:

root@10gbps:/var/log/apache2/domains# tail -n 3  tamilgun.fun.error.log 
2017/09/17 13:29:39 [error] 13002#13002: *50767 access forbidden by rule, client: 101.167.71.251, server: tamilgun.fun, request: "POST / HTTP/1.1", host: "tamilgun.fun"
2017/09/17 13:29:39 [error] 13002#13002: *50768 access forbidden by rule, client: 101.167.71.251, server: tamilgun.fun, request: "POST / HTTP/1.1", host: "tamilgun.fun"
2017/09/17 13:29:39 [error] 13002#13002: *50768 access forbidden by rule, client: 101.167.71.251, server: tamilgun.fun, request: "POST / HTTP/1.1", host: "tamilgun.fun"

101.167.71.251 присутствует в цепочке. И DROP и REJECT (справедливости ради, этот адрес добавлял не я, а fail2ban, но да пофигу)

root@10gbps:/var/log/apache2/domains# iptables -L -vn
Chain INPUT (policy DROP 79 packets, 3556 bytes)
 pkts bytes target     prot opt in     out     source               destination         
 247K   45M fail2ban-WEB  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
    0     0 DROP       all  --  *      *       101.167.71.251       0.0.0.0/0           
    0     0            all  --  *      *       36.71.109.34         0.0.0.0/0           
 1036  157K fail2ban-VESTA  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8083
    1    40 fail2ban-MAIL  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 25,465,587,2525,110,995,143,993
1330K 1895M fail2ban-SSH  tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
  30M   30G ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
 909K   55M ACCEPT     all  --  *      *       185.59.223.72        0.0.0.0/0           
   85  5100 ACCEPT     all  --  *      *       127.0.0.1            0.0.0.0/0           
   80  4308 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:22
 922K   45M ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 80,443
    3   140 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 21,12000:12100
    0     0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 25,465,587,2525
    1    40 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 110,995
    0     0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 143,993
   21  1036 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            multiport dports 3306,5432
   92  5476 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            tcp dpt:8083
    1    28 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 650K packets, 415M bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain fail2ban-MAIL (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    1    40 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-SSH (1 references)
 pkts bytes target     prot opt in     out     source               destination         
1330K 1895M RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-VESTA (1 references)
 pkts bytes target     prot opt in     out     source               destination         
 1036  157K RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-WEB (1 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     all  --  *      *       101.167.71.251       0.0.0.0/0            reject-with icmp-port-unreachable
 247K   45M RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain fail2ban-ssh (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 RETURN     all  --  *      *       0.0.0.0/0            0.0.0.0/0           

Chain vesta (0 references)
 pkts bytes target     prot opt in     out     source               destination         
root@10gbps:/var/log/apache2/domains# 

root@10gbps:/var/log/apache2/domains# iptables-save
# Generated by iptables-save v1.4.21 on Sun Sep 17 13:33:30 2017
*filter
:INPUT DROP [106:4652]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [851829:551515553]
:fail2ban-MAIL - [0:0]
:fail2ban-SSH - [0:0]
:fail2ban-VESTA - [0:0]
:fail2ban-WEB - [0:0]
:fail2ban-ssh - [0:0]
:vesta - [0:0]
-A INPUT -p tcp -m multiport --dports 80,443 -j fail2ban-WEB
-A INPUT -s 101.167.71.251/32 -j DROP
-A INPUT -s 36.71.109.34/32
-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
-A INPUT -p tcp -m tcp --dport 22 -j fail2ban-SSH
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 185.59.223.72/32 -j ACCEPT
-A INPUT -s 127.0.0.1/32 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 21,12000:12100 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 25,465,587,2525 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 110,995 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 143,993 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 3306,5432 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8083 -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A fail2ban-MAIL -j RETURN
-A fail2ban-SSH -j RETURN
-A fail2ban-VESTA -j RETURN
-A fail2ban-WEB -s 101.167.71.251/32 -j REJECT --reject-with icmp-port-unreachable
-A fail2ban-WEB -j RETURN
-A fail2ban-ssh -j RETURN
COMMIT
# Completed on Sun Sep 17 13:33:30 2017

anc, никаких контейнеров и виртуалок. Сетевой интерфейс единственный, с белым IP. Все крутится на одном и том же сервере. targitaj, на 80-й порт приходит куча POST-запросов, которые убивают ресурсы сервера. Само собой что мантра «ставь nginx» не сработает, поскольку nginx и так стоит, но ресурсы убиваются не им, а PHP, который работает кагбе через Апач. Мантра «чистый nginx с php-fpm» тоже не сработает, поскольку ну откроется несколько тысяч процессов, пока все 96 гб мозгов не закончатся, вдобавок при этом не работает Jwpalyer. В общем только бан. Ну и плюс меня распирает интерес, поскольку в интернете все так просто, хуле там: iptables -A INPUT -s IP-ADDRESS -j DROP и всьо работает. Авотхер.

vblats
() автор топика

Ты уверен, что нгинкс и апач пишут в лог именно адрес клиента, а не какой-нибудь X-Forwarded-For? Сними дамп трафика через tcpdump -s 0 в такой момент и рассмотри внимательно в wireshark.

Deleted
()
Ответ на: комментарий от vblats

Вообще все верно, должно работать.

anc ★★★★★
()
Ответ на: комментарий от Deleted

Ты уверен, что нгинкс и апач пишут в лог именно адрес клиента, а не какой-нибудь X-Forwarded-For? Сними дамп трафика через tcpdump -s 0 в такой момент и рассмотри внимательно в wireshark.

Тоже вариант.

Можно еще так. Что бы быть уверенным что действительно работает. Прописать какой-нибудь свой клиентский ip и проверить. Только предупреждаю!!! обязательно должен быть и еще один ip с которого потом можно обратиться.

anc ★★★★★
()

Да нихрена сука не работает. А должно. Дабы отвязаться от логов, сделал в индексном файле это:

function getUserIP()
{
    $client  = @$_SERVER['HTTP_CLIENT_IP'];
    $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
    $remote  = $_SERVER['REMOTE_ADDR'];

    if(filter_var($client, FILTER_VALIDATE_IP))
    {
        $ip = $client;
    }
    elseif(filter_var($forward, FILTER_VALIDATE_IP))
    {
        $ip = $forward;
    }
    else
    {
        $ip = $remote;
    }

    return $ip;
}
$rm=$_SERVER['REQUEST_METHOD'];
$ru=$_SERVER['REQUEST_URI'];
$ip=getUserIP();
if (($rm=="POST")and (($ru=="/")or($ru=="/?"))       )
{
$f=fopen("log.txt","a+");
fwrite($f,"$ip\n");
fclose($f);
exit();
}

Нагребается список айпих.

Чищу iptables следующими командами:

iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

После чего добавляю айпишник командами

iptables -A INPUT -s <IP> -j LOG --log-prefix "DDOSer detected: "
iptables -A INPUT -s <IP> -j DROP

Были у меня мысли по поводу всяких HTTP_X_FORWARDED_FOR. Но nginx вполне себе deny эти же адреса, что я дропаю в iptables.

Вроде как должно срать в лог. Но не срет. За блокирование вообще молчу. iptables -Lvn показывает 0 bytes для каждой цепочки. Штоэта???

vblats
() автор топика
Последнее исправление: vblats (всего исправлений: 1)
Ответ на: комментарий от vblats

Уже писал выше, повторю:
iptables -I INPUT -s ОДИН_ИЗ_ВАШИХ_КЛИЕНТСКИХ_IP -j DROP
Если не работает, то разбираемся с вашей ситуацией. Если все равно работает, могли и порутовать.

anc ★★★★★
()
Ответ на: комментарий от anc

Если все равно работает, могли и порутовать.

Я скорее поставлю на то, что ТС не в курсе существования mod_realip и/или mod_rpaf, и просто не может разобраться в конфигурации веб-серверов.

Deleted
()
Ответ на: комментарий от Deleted

Исключено. Во-первых, в инет смотрит nginx, во-вторых, используется Cloudflare, в связи с чем нжинксовый ngx_http_realip_module настроен на прием реальных IP с него.

Хотя в чем-то вы правы, скорее всего я просто слишком доверяю логам нжинкса.

vblats
() автор топика
Ответ на: комментарий от vblats

используется Cloudflare, в связи с чем нжинксовый ngx_http_realip_module настроен на прием реальных IP с него.

Лол, ну вот и ответ. iptables не видит ip реальных клиентов, а только ip cloudflare. Блокируй нгинксом или через .htaccess

Deleted
()
Ответ на: комментарий от Deleted

Да. Об этом я как-то не подумал. Спасибо за подсказку!

Та до жопы эти блокирования. Порой количество инстансов нжинкса доходит до десяти тысяч. Файл еррор_лога (я настроил чтоб нжинкс туда срал когда обрабатывает deny) забивается до гигабайта за 20 минут. При таком количестве обращений - уже нжинкс затыкается.

Про .htaccess и говорить не буду.

Хотя за CDN спасибо!

vblats
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.