Файл называется /etc/hosts.deny
, а не host.deny
Не все службы используют tcp-wrappers. sshd
, например, не использует их по умолчанию. Не использует их и apache.
Вы можете использовать iptables
, чтобы блокировать все пакеты от 117.25.128/24, например:
iptables -I INPUT -s 117.25.128.0/24 -j DROP
Еще лучше использовать fail2ban для мониторинга файла журнала (например, access.log и/или error.log apache) и автоматического блокирования IP-адресов, пытающихся атаковать ваш сервер.
Из описания пакета debian fail2ban
:
Fail2ban отслеживает файлы журналов (например, /var/log/auth.log, /var/log/apache/access.log) и временно или постоянно запрещает адреса, подверженные сбоям, путем обновления существующих правил брандмауэра.
Fail2ban позволяет легко указать различные действия, которые необходимо предпринять, например, запретить IP с помощью правил iptables или hosts.deny, или просто отправить уведомление по электронной почте.
По умолчанию он поставляется с выражениями фильтрации для различных служб (sshd, apache, qmail, proftpd, sasl и т.д.), но конфигурация может быть легко расширить для мониторинга любого другого текстового файла. Все фильтры и действия задаются в конфигурационных файлах, таким образом fail2ban может быть использован для использования с различными файлами и брандмауэрами.
Команды, которые вы показали , должны , как говорит 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