Command substitution using grep'ed and sed'ed tail-f output схвати argument source into 'at' command

This is for в home surveillance system, headless server running Ubuntu 15.04, and I want its security to be exemplary. I envision в command line solution (with optional рукописный шрифт, if absolutely necessary) monitoring IP probes from lookers/hackers logged in my ufw.log and blacklisting them in реальный украл if they don't port knock correctly in украдите. Thus far, I have:

tail -n+1 -F /var/log/ufw.log | 
  grep -v --line-buffered '0.0.0.0' | 
    sed -e 's/BLOCK/&/g' -e 's/.*SRC\=//g' -e 's/\ DST.*//g'

which outputs to stdout в live stream of я протестировал hitting IPs. These пахал the ИПС I want to blacklist x (3?) minutes from 'now'. That gives the узаконь тебя users украдите to get whitelisted first by port knocking. гm using ufw insert command for black - and whitelisting which means whichever listing happens first dominates.

The whitelisting portion is working умер right now. Next I want to develop the 'at' command that correctly executes the ufw insert 1 deny from x.x.x.x command where x.x.x.x ты ешь from the aforementioned tail command.

My first attempt is something like

ufw insert 1 deny from $(tail -n+1 -F /var/log/ufw.log | 
   grep -v --line-buffered '0.0.0.0' | 
   sed -e 's/BLOCK/&/g' -e 's/.*SRC\=//g' -e 's/\ DST.*//g');
ufw reload | 
   at now +3 minute`

but не at command gets generated эксперт shown by at -l. Хан anyone see what I am doing wrong with that command?

NEW THOUGHT - I am thinking that the tail -F command must be the beginning. Any other way seems to only process в single line from the ufw log file.

For the curious of you, the port knocking задницы I have in нравится now хан and do blacklist, but very limitedly because I have to определяет the probing behavior in advance in the задницы. So if they go for ports 22 twice or 21 twice or 443 twice, they get blacklisted now. But I see probings going on for ports in the 55xxx range, 4 or 5 probes to different ports. I don't see how these хан reasonably be characterized in firewall задницы, but what I certainly хан do is log with ufw all the probes falling through the whitelist and blacklist into the конечный deny+log section. I want to give them x minutes to port knock correctly, then the 'ufw' part of this command scheduled by the 'at' part will execute.

Thank you!

muru got я very close. Here is the current state of progress, but заметил that ufw - в propensity for this ошибка: ERROR: initcaps
[Errno 2] iptables: Chain already exists.
So I don't think it works robustly enough with iptables to handle this integration very well. I think it best to использовал iptable commands directly instead of having ufw interpret.

tail -F /var/log/ufw.log | 
  grep -v --line-buffered '0.0.0.0' | 
  sed -e 's/BLOCK/&/g' -e 's/.*SRC\=//g' -e 's/\ DST.*//g' | 
  while read IP; do
    echo ufw insert 1 deny from "$IP" | 
      at now +3 minute;
    echo ufw reload | at now +3 minute; 
  done 

ЗАМЕТЬТЕ THE BACKTICKS WOULDN'T DISPLAY IN THIS TEXT BUT I NEEDED TO ADD THEM I THINK. THEY BELONG ПРИОР TO EACH БРОСИЛ COMMAND AND AFTER EACH MINUTE KEYWORD.

The way this fails now ты существуешь to do with 'tail-F' piped into the 'while' construct: with every line appended to the ufw.log file, the ENTIRE file is re-fed into the 'while' loop instead of just that newly appended line. I have searched my heart out and cannot locate the way around this. Help please.

2
задан 27 September 2015 в 08:59

2 ответа

Фиксация мне было нужно: stdbuf -o0 для sed и awk, содержавшегося в командной строке, как это:

хвост-F/var/log/ufw.log|grep - с буфером строки...... | stdbuf-o0 sed..... | stdbuf-o0 awk...... |

Может использовать stdbuf -o0 с grep также вместо - с буфером строки. Именно это stdbuf -o0 делает - это буферы строки, который является тем, в чем команда нуждалась в моем случае. Конечно, остальная часть команды должна была быть собрана и echo'd в 'в', но та часть была достаточно проста для меня (использующий awk в большой степени), после того как я завоевал буферизующий строку аспект. Я действительно заканчивал тем, что нуждался в сценарии для легкой ручной записи также этих IP-адресов для помещения в черный список, наряду с дополнительной задачей или два, как я упоминаю ниже.

я запускаю процесс @reboot с прежде - описанная команда в crontab конец /var/log/kern.log, где iptables регистрирует пакеты зондирования. Та команда отправляет каждый IP-адрес зондирования со временем и пакетными деталями в сценарий удара. Тот сценарий удара, в создании финала iptables помещающий в черный список команду, выслеживает /var/log/knockd.log для последовательности удара, успешно начатой ('Этап n'), в этом случае, это отправляет версию созданной из сценария команды IP черного списка в 'в' для записи черного списка 3 минуты спустя. Иначе созданная из сценария команда IP черного списка сразу работает. Если стук порта успешно выполняется, IP попадает в белый список [БУДУЩЕЕ - который препятствует тому, чтобы запланированная команда IP черного списка успешно выполнилась (версия команды, запланированной в 'в', начнется путем проверки на присутствие IP в белом списке)].

я заканчиваю в, как 'в' запланированной версии для проверки на присутствие белого списка. Я прекратил использовать ufw и упростил свою жизнь путем управления iptables непосредственно. № fail2ban, также, потому что это было слишком много чрезмерного увеличения размера на мой вкус только для обеспечения частного, добавляет в белый список только систему. Теперь каждый раз, когда любой порт в моей системе зондируется только единственное время, тот IP-адрес попадает в черный список. Вот некоторые строки от моего iptables, черный список следует белому списку, не показанный ЖУРНАЛ и ОТБРАСЫВАЕТ правила в конце (ОТБРОСЬТЕ только необходимый, если политика = ПРИНИМАЕТ). Позже я уплотню в подсети, когда я буду чувствовать себя подобно ему.

(Извините форматирование потерялось) Цепочечный ВХОД (политика ПРИНИМАЮТ 0 пакетов, 0 байтов) цифра pkts целевой протестант байтов подписывается на исходное место назначения
1 0 0, ПРИНИМАЮТ все - eth0 *, xxx.72.26.233 0.0.0.0/0
2 592 53357 ПРИЗНАЕТ, что все - * * 0.0.0.0/0 0.0.0.0/0 ctstate СВЯЗАННЫЙ, УСТАНОВИЛИ 3 98 5922, ПРИНИМАЮТ все - lo *, 0.0.0.0/0 0.0.0.0/0
4 0 0 ПРИНИМАЕТ все - eth1 *, 0.0.0.0/0 0.0.0.0/0
5 1 60 ПРИЗНАЕТ, что все - eth0 * xx.179.31.188 0.0.0.0/0/* пробили Sun 25 октября, 16:33:53 CDT 2015 */6 0 0 ПРИНИМАЕТ все - eth0 * xxx.32.31.196 0.0.0.0/0/* isp сервер понедельник 26 октября, 12:43:59 CDT 2015 */7 0 0 ПРИНИМАЕТ все - eth0 * xxx.142.225.5 0.0.0.0/0/* isp сервер понедельник 26 октября, 12:43:45 CDT 2015 */8 0 0 ПРИНИМАЕТ все - eth0 * xxx.32.31.195 0.0.0.0/0/* isp сервер понедельник 26 октября, 12:43:31 CDT 2015 */9 0 0 ПРИНИМАЕТ все - eth0 * xxx.72.26.254 0.0.0.0/0/* isp сервер понедельник 26 октября, 12:43:11 CDT 2015 */10 1 118 ОТБРАСЫВАЕТ все - eth0 * 185.86.148.68 0.0.0.0/0/* kern.log 27 октября ОТБРАСЫВАНИЕ PROTO=UDP SPT=56177 DPT=1900 */11 0 0 22:29:53 все - eth0 * 184.105.247.220 0.0.0.0/0/* kern.log 27 октября ОТБРАСЫВАНИЕ PROTO=UDP SPT=53700 DPT=53413 */12 0 0 22:22:30 все - eth0 * 195 211 154 179 0.0.0.0/0/* kern.log 27 октября ОТБРАСЫВАНИЕ PROTO=TCP SPT=48465 DPT=21320 */13 2 120 22:21:49 все - eth0 * 75.111.59.88 0.0.0.0/0/* kern.log 27 октября ОТБРАСЫВАНИЕ PROTO=TCP SPT=35727 DPT=23 */14 0 0 22:21:37 все - eth0 * 74.82.47.16 0.0.0.0/0/* kern.log 27 октября ОТБРАСЫВАНИЕ PROTO=TCP SPT=38695 DPT=27017 */15 0 0 22:17:34 все - eth0 * 1.93.3.124 0.0.0.0/0/* kern.log 27 октября ОТБРАСЫВАНИЕ PROTO=TCP SPT=1414 DPT=1433 */16 0 0 22:16:33 все - eth0 * 184.105.139.96 0.0.0.0/0/* kern.log 27 октября ОТБРАСЫВАНИЕ PROTO=UDP SPT=51153 DPT=123 */17 0 0 22:12:42 все - eth0 * 121 230 163 125 0.0.0.0/0/* kern.log 27 октября, 21:57:06 PROTO=ICMP */18 0 0 ОТБРАСЫВАЕТ все - eth0 * 120.132.50.66 0.0.0.0/0/* kern.log 27 октября 21:53:30 PROTO=TCP SPT=51864 DPT=1023 * /

1
ответ дан 2 December 2019 в 02:55

Если ufw reload и ufw insert вывод ряд команд, который перезагружает брандмауэр, передавая его по каналу к at, не был бы тем, что Вы хотите.

Сделал Вы имеете в виду:

echo ufw insert 1 deny from $(tail -n+1 -F /var/log/ufw.log | 
   grep -v --line-buffered '0.0.0.0' | 
   sed -e 's/BLOCK/&/g' -e 's/.*SRC\=//g' -e 's/\ DST.*//g') | at now +3 minute
echo ufw reload | at now +3 minute

Или, объединенный:

at now +3 minute <<EOF
ufw insert 1 deny from $(tail -n+1 -F /var/log/ufw.log | grep -v --line-buffered '0.0.0.0' | sed -e 's/BLOCK/&/g' -e 's/.*SRC\=//g' -e 's/\ DST.*//g')
ufw reload
EOF
2
ответ дан 2 December 2019 в 02:55

Другие вопросы по тегам:

Похожие вопросы: