LINUX.ORG.RU
ФорумAdmin

Все очень плохо с iptables (у меня)

 , , ,


0

4

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

Бьет именно по веб-серверу. Так как при отключении httpd атака прекращается. Но в логах сервера про него ничего нет ни в логе запросов, ни в логе ошибок.

Попытался вывести в системный лог информацию про этот IP, но в messages про него ни слова. Ощущение такое, что он в фильтрацию INPUT не попадает в принципе.

OS CentOS 6.3 iptables в данный момент выглядит так (ddos-deflate добавляет IP в список, но безрезультатно):

Last login: Sun Jan 17 01:16:52 2016 from 31.162.212.154
[nox@localhost ~]$ sudo cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.7 on Sun Jan 17 03:04:30 2016
*raw
:PREROUTING ACCEPT [2277109:507515632]
:OUTPUT ACCEPT [3936599:5509460419]
COMMIT
# Completed on Sun Jan 17 03:04:30 2016
# Generated by iptables-save v1.4.7 on Sun Jan 17 03:04:30 2016
*mangle
:PREROUTING ACCEPT [2277168:507524177]
:INPUT ACCEPT [2277132:507522353]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3936651:5509467907]
:POSTROUTING ACCEPT [3936651:5509467907]
COMMIT
# Completed on Sun Jan 17 03:04:30 2016
# Generated by iptables-save v1.4.7 on Sun Jan 17 03:04:30 2016
*nat
:PREROUTING ACCEPT [33267:1990319]
:POSTROUTING ACCEPT [14956:944599]
:OUTPUT ACCEPT [14956:944599]
COMMIT
# Completed on Sun Jan 17 03:04:30 2016
# Generated by iptables-save v1.4.7 on Sun Jan 17 03:04:30 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3032:452966]
-A INPUT -s 104.27.136.19/32 -j DROP 
-A INPUT -s 104.27.137.19/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -m limit --limit 10/min -j LOG --log-prefix "IPT: " --log-level 7 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 195.54.14.212/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 104.28.12.18/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 104.28.13.18/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 195.229.107.51/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 195.229.107.51/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 195.229.107.51/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 195.229.107.51/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 195.229.107.51/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 195.229.107.51/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 195.229.107.51/32 -j DROP 
-A INPUT -s 195.229.107.51/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 51.254.47.226/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 51.254.47.226/32 -j DROP 
-A INPUT -s 159.253.0.23/32 -j DROP 
-A INPUT -s 193.200.241.21/32 -j DROP 
-A INPUT -s 159.253.0.23/32 -j DROP 
-A INPUT -s 104.28.21.17/32 -j DROP 
-A INPUT -s 195.54.14.212/32 -j DROP 
-A INPUT -s 188.120.41.7/32 -j DROP 
-A INPUT -s 5.189.173.155/32 -j DROP 
-A INPUT -s 45.35.80.18/32 -j DROP 
-A INPUT -s 188.120.40.114/32 -j DROP 
-A INPUT -s 192.227.227.18/32 -j DROP 
-A INPUT -s 77.222.113.36/32 -j DROP 
-A INPUT -s 77.222.112.198/32 -j DROP 
-A INPUT -s 217.118.83.219/32 -j DROP 
-A INPUT -s 217.118.83.196/32 -j DROP 
-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 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 -j REJECT --reject-with icmp-host-prohibited 
-A FORWARD -j REJECT --reject-with icmp-host-prohibited 
COMMIT
# Completed on Sun Jan 17 03:04:30 2016


Видимо, меня атаковали по ipv6

Вот такую картину выдал netstat

[nox@localhost ~]$ netstat -ntu
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State      
tcp        0      0 195.54.14.212:80            87.98.182.151:42032         SYN_RECV    
tcp        0      0 195.54.14.212:80            51.254.201.213:19698        SYN_RECV    
tcp        0      0 195.54.14.212:80            211.123.208.17:19153        SYN_RECV    
tcp        0      0 195.54.14.212:45323         64.233.164.27:25            TIME_WAIT   
tcp        0      0 195.54.14.212:22            31.162.212.154:52838        ESTABLISHED 
tcp        0     48 195.54.14.212:22            31.162.212.154:54623        ESTABLISHED 
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:33709 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:54172 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:33743 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:43448 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:35479 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:32993 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:59265 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:49903 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:60631 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:42301 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:47551 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:35860 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:41059 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:60306 CLOSE_WAIT  
tcp      426      0 ::ffff:195.54.14.212:80     ::ffff:193.200.241.21:58917 CLOSE_WAIT  

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

Не работал с ddos-deflate, но, судя по описанию, он опирается на вывод netstat. Вот и смотрите, что у вас происходит с сокетами netstat и состояние http сервера в /proc/PID/fd.

Возможно, что к вам разом приходит такой объём коннектов, что ddos-deflate не успевает срегировать, как уже все подключения к серверу заняты, а таймаут на соединение большой.

И чудес не бывает, если у вас ″-j LOG″ ничего не пишет в логи, значит ″-j DROP″ перед ним для этого ip-адреса срабатывает.

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

Проблема в том, что -j LOG не срабатывал и пока был первым в списке. ddos-deflate - это простенький скрипт, который при превышении некоторого числа соединений исполняет iptables -I INPUT -s <ip-адрес нарушителя> -j DROP

А вот в netstat обнаружилась интересная картина! Честно говоря, я первый раз вижу IPv6 в работе на собственном сервере.

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

Так как при отключении httpd атака прекращается.

-j REJECT --with-icmp-unreachable?

gh0stwizard ★★★★★
()
Последнее исправление: gh0stwizard (всего исправлений: 1)

Уверен, что тебя атакуют снаружи? Возможно ты подцепил нечто через дырявую cms и инициируется всё это безобразие на твоём сервере.

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

Смотри процессы, анализируй выхлоп tcpdump, всё как обычно. Я траблшутил как то, возможно, похожую проблему, канал к серверу просто лежал, оказалось, что сервер подцепил инициатор от ботнета через старый-дырявый phpmyadmin.

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

Из процессов все забивает httpd. Можешь подсказать, по каким признакам tcpdump ты трояна выловил?

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

Чем дальше в лес, тем толще партизаны

Установка ip6tables не помогла. Зато теперь я чуть лучше знаком с отображением IPv4 в IPv6.

Спасибо за мысль King_Carlo - о том, что пакеты могут идти с моей стороны. Немного полюбовавшись на кучу открытых соединений веб-сервера с ::ffff:193.200.241.21 в netstat, выполнил

iptables -I OUTPUT -d 193.200.241.21 -j DROP

Результата - ноль. 400 соединений 193.200.241.21 в netstat, и сервер еле дышит. А вот tcpdump -n -i ethX port 80 очень озадачил!

В нем - ни строчки(!) про 193.200.241.21, и просто дикий обмен пакетами с 193.200.241.219! Заблокировал входящие пакеты с 193.200.241.219, и все разом закончилось.

Теперь пытаюсь понять: 1) 193.200.241.219 умудрялся при фильтрации iptables выдавать себя за 193.200.241.21? Подскажите, по каким ключевым словам копать? 2) 193.200.241.219 слал к apache какие-то особенные запросы, заставляя веб-сервер отвечать флудом на 193.200.241.21? Как понять? Разве эту ситуацию не должен был предотвратить mod_security? 3) У меня на веб-сервере эксплойт, который по сигналу с 193.200.241.219 начинает творить непотребства? Как поймать?

Akella
() автор топика
Ответ на: Чем дальше в лес, тем толще партизаны от Akella

Надо было записать дамп пакетов в файл и потом поизучать, что именно слал 193.200.241.219. Это вобще были tcp пакеты на 80 порт или какой-нибудь тунель?

mky ★★★★★
()

Немного не в тему, но всеже стоит использовать ipset вместо того, чтобы вписывать вагоны правил.

алгоритм.

создаешь новый ipset, например, banned ips.

затем создаешь правило в iptables, которое блокирует все что есть в banned ips.

после этого, тебе нужно только добавлять/убирать адреса в ipset. правила в iptables останутся без изменении.

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