Пишу баш скрипт, нужна помощь

tnAnGel

Проверенные
Сообщения
1,239
Реакции
910
Баллы
8,265
Делаю свой скрипт на баше по статье с хабра:
Я за основу беру tcpdump, а не netstat как на хабре
И этот скрипт
Код:
#!/bin/bash
BLOCKDB="ips.txt"
IPS=$(grep -Ev "^#" $BLOCKDB)
for i in $IPS
do
iptables -A INPUT -s $i -j DROP

В нем не не понятно только -Ev "^#" и вместо "" - '' должно же быть по идее? Смотрел тут пример


Из этого материала и дополнительного чтения у меня вышло вот это:
Код:
#!/bin/bash
tcpdump -v -n -w attack.log dst port 443 -c 5000
tcpdump -nr attack.log |awk '{print $3}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' |sort |uniq -c |sort -rn  > /tmp/ips.txt
BLOCKDB="/tmp/ips.txt"
$BLOCKDB | awk '{if $1>10}' |grep -oE '[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}' > /tmp/dropip.txt
IPS="/tmp/dropip.txt"
for i in $IPS do ipset -A dropip $i

upload_2016-11-27_17-59-13.png

Были ошибки как с правами, так и с переносом строк. На винде - \r\n а на юникс - \n
Это все решил, но теперь с синтаксисом проблемы, помогите мне

Smalesh, Hope, Exile
 
Нет особого смысла настраивать скрипты и правила на iptables. Сам думал замутить, но многие говорили я барашка.
Мол никаких ресурсов не хватит содержать данный файрвол и есть куда более рациональные решения на эту тему.

Как вариант что-то похожее:
Код:
#!/bin/sh

# Находим все соединения на все порты и записываем их в файл ddos.iplist
netstat -ntu | awk '{print $5}' | cut -d: -f1 | egrep -o '([0-9.]{2,4}){4}' | egrep -v "^127.0.0.1|исключить ип|исключить ип|исключить ип" | sort | uniq -c | sort -nr > /usr/local/ddos/ddos.iplist

# создаем DROP правила (не выдавать ответа сервера на запросы забаненых) для IP с количеством подключений более 50 и добавляем их в файл
awk '{if ($1 > 55) {print "/sbin/iptables -A INPUT -s " $2 " -j DROP"; print "/sbin/iptables -A INPUT -d " $2 " -j DROP";}}' /usr/local/ddos/ddos.iplist >> /usr/local/ddos/iptables_ban.sh

# запускаем скрипт бана IP атакующих
bash /usr/local/ddos/iptables_ban.sh

# Очищаем скрипт, который производит бан
cat /dev/null > /usr/local/ddos/iptables_ban.sh

Но лучше настраивать правила а не скриптами :)
 
YaHZ, iptables только нагружаем, я ipset использую. Т.е. в iptables "ссылка" на лист ipset идет. 1 запись куда удобнее
Я не понимаю как работает netstat. Он в момент смотрит соединения или какой-то определенный промежуток времени? Из-за этого я и не хочу его использовать.
upload_2016-11-27_18-22-21.png

У меня проблема в 5той строке и в 8 которой нет. В 5той строке я понимаю, что должен быть print для вывода, но в тоже время думаю, что он не обязателен. Я не знаю где тут синтаксическая ошибка, как по мне вся строка огромная синтаксическая ошибка...
Еще есть вопрос, запись в файл методом > /tmp/ips.txt перезаписывают полностью файл с 0 или добавляют значения? Я считаю, что полностью перезаписывают с 0, но хочу уточнить это
 
maxbel969696, Прейди на BLAZINGFAST и не какой атаки не будет, всего 300р в месяц и всё в шоколаде.
Чем эти скрипты писать итд
 
enver, иди на[А по щам?]

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

Да и за что там платить CDN + js прокладка...И на прокладке выезжают при такой атаке
 
maxbel969696, Прейди на BLAZINGFAST и не какой атаки не будет, всего 300р в месяц и всё в шоколаде.
Чем эти скрипты писать итд
Такие решения созданы для людей которые не понимают и не хотят понимать. Лучше всё настроить и заточить под себя, и умнее станешь и сервак не упадёт.
А данные сервисы защищают только 80, 443 порт. Защищать нужно весь сервер вообще, как я считаю.
 
awk '{if ($1 > 55) {print "/sbin/iptables -A INPUT -s " $2 " -j DROP"; print "/sbin/iptables -A INPUT -d " $2 " -j DROP";}}' /usr/local/ddos/ddos.iplist >> /usr/local/ddos/iptables_ban.sh
тогда получается в моем случае
awk '{if ($1 > 55) {print "ipset -A dropip " $2 ";}}' /tmp/ips.txt >> /tmp/dropip.txt

Верная логика? Опять синтаксис...
upload_2016-11-27_18-46-45.png
 
Я за основу беру tcpdump, а не netstat как на хабре
Мне не понятна мотивация.

Ошибка, по-моему ясно пишет, 5-я строка - не может создать файл в /tmp
Далее - все, что не попадает в path, для крона пишется с полными (абсолютными или относительными) путями.

На правах PS: скрипт служит для автоматизации действия. ТС не понимает что ему нужно и не желает понимать. На этом откланяюсь.
И еще
Лучше всё настроить и заточить под себя, и умнее станешь и сервак не упадёт.
Серебряной пули не существует. Стоит лишь немного изменить вектор атаки и вся настройка летит коту под хвост. Для общего развития.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу