Написать выходную копию команды «Найти» в цикле в файл

  1. Файл называется /etc/hosts.deny, а не host.deny

  2. Не все службы используют tcp-wrappers. sshd, например, не использует их по умолчанию. Не использует их и apache.

  3. Вы можете использовать iptables, чтобы блокировать все пакеты от 117.25.128/24, например:

     iptables -I INPUT -s 117.25.128.0/24 -j DROP
    
  4. Еще лучше использовать fail2ban для мониторинга файла журнала (например, access.log и/или error.log apache) и автоматического блокирования IP-адресов, пытающихся атаковать ваш сервер.

  5. Из описания пакета debian fail2ban:

    Fail2ban отслеживает файлы журналов (например, /var/log/auth.log, /var/log/apache/access.log) и временно или постоянно запрещает адреса, подверженные сбоям, путем обновления существующих правил брандмауэра.

    Fail2ban позволяет легко указать различные действия, которые необходимо предпринять, например, запретить IP с помощью правил iptables или hosts.deny, или просто отправить уведомление по электронной почте.

    По умолчанию он поставляется с выражениями фильтрации для различных служб (sshd, apache, qmail, proftpd, sasl и т.д.), но конфигурация может быть легко расширить для мониторинга любого другого текстового файла. Все фильтры и действия задаются в конфигурационных файлах, таким образом fail2ban может быть использован для использования с различными файлами и брандмауэрами.

3
13.07.2018, 15:48
1 ответ

Команды, которые вы показали , должны , как говорит terdon , работать.

Альтернатива, избавляющая отtee:

rm -f /drives/d/matched_subdirs.txt
while IFS= read -r pathname; do
    find "$pathname" -name '*Bop*' -print \
        -exec sh -c 'printf "%s\n" "$@" >>matched' sh {} +
done <dirlist

Это позволит findраспечатать найденные пути для просмотра, а затем использовать встроенный сценарий оболочки для их записи в файл результатов.

Меня немного беспокоит то, что вы собираетесь делать с путями в выходном файле. Если вы собираетесь использовать их для зацикливания позже, лучше сделать это непосредственно из find. В противном случае у вас были бы проблемы со странными именами файлов, содержащими встроенные символы новой строки.


В комментариях вы говорите , что собираетесь использовать найденные пути в цикле для запуска rsync. Вызов rsyncдля каждого пути был бы очень медленным, и вам лучше сделать это с помощью rsyncнапрямую:

while IFS= read -r pathname; do
    rsync -avR --include='*/' --include='*Bop*' --exclude='*' --prune-empty-dirs "$pathname" target
done <dirlist

Здесь dirlist— это файл с вашими директориями.

Пример:

$ tree
.
|-- dirlist
`-- source
    |-- a
    |   |-- dir-1
    |   |   |-- somefile_Bop_here
    |   |   `-- someotherfile
    |   |-- dir-2
    |   |   |-- somefile_Bop_here
    |   |   `-- someotherfile
    |   `-- dir-3
    |       |-- somefile_Bop_here
    |       `-- someotherfile
    |-- b
    |   |-- dir-1
    |   |   |-- somefile_Bop_here
    |   |   `-- someotherfile
    |   |-- dir-2
    |   |   |-- somefile_Bop_here
    |   |   `-- someotherfile
    |   `-- dir-3
    |       |-- somefile_Bop_here
    |       `-- someotherfile
    `-- c
        |-- dir-1
        |   |-- somefile_Bop_here
        |   `-- someotherfile
        |-- dir-2
        |   |-- somefile_Bop_here
        |   `-- someotherfile
        `-- dir-3
            |-- somefile_Bop_here
            `-- someotherfile

13 directories, 19 files
$ cat dirlist
source/a
source/b/dir-2

(рабочий цикл здесь)

$ tree target
target
`-- source
    |-- a
    |   |-- dir-1
    |   |   `-- somefile_Bop_here
    |   |-- dir-2
    |   |   `-- somefile_Bop_here
    |   `-- dir-3
    |       `-- somefile_Bop_here
    `-- b
        `-- dir-2
            `-- somefile_Bop_here

7 directories, 4 files

Я решил использовать-R(--relative). Без него я бы получил

target
|-- a
|   |-- dir-1
|   |   `-- somefile_Bop_here
|   |-- dir-2
|   |   `-- somefile_Bop_here
|   `-- dir-3
|       `-- somefile_Bop_here
`-- dir-2
    `-- somefile_Bop_here
2
27.01.2020, 21:25

Теги

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