Скрипты

BIND и включение всех файлов в папке (include wildcard)

Думаю многие ощутили пользу директивы include в apache, которая позволяет включать все файлы с нужным именем в определенной директории в конфигурационный файл. К сожалению таким же функционалом не может похвастяться директива include из DNS сервера BIND. Решением данной проблемы может быть использование другого DNS сервера, что в большинстве случаев не подходит, или разработка скрипта, который создает отдельный файл с включением определенных файлов в нужной директории и заставляет сервер перечитать конфиг при изменении этого файла. Вот скрипт, который позволяет осуществить задуманное:

Автоматическая синхронизация зон между DNS серверами

Возникла однажды нужда в том, чтобы резервный DNS сервер знал о новых или удаленных зонах с основного сервера. Стандартными средствами BIND задачу не решить, поэтому пришлось нарисовать пару скриптов для ее решения. Первый скрипт парсит конфигурационный файл DNS сервера выуживая оттуда доменные имена, и пишет их в файл. Второй забирает этот файл по http (можно и по ftp), проверяет были ли добавлены/удалены домены, и если были изменения, то пишет новый конфигурационный файл и перезапускает BIND.

Автоматизация загрузки торрентов

  1. #!/bin/sh
  2.  
  3. TORRENTS_DIR="/home/zver/torrents"
  4. RUN_FILE="${TORRENTS_DIR}/running.txt"
  5. LOG_FILE="${TORRENTS_DIR}/ctorrent.log"
  6. DOWNLOADED_DIR="${TORRENTS_DIR}/downloaded"
  7. SAVE_DIR="/home/user"
  8. CTORRENT="/usr/local/bin/ctorrent"
  9.  
  10. if [ ! -x "${CTORRENT}" ]; then
  11.   echo "ctorrent binary not found"
  12.   exit 1
  13. fi
  14.  
  15. if [ ! -d "${DOWNLOADED_DIR}" ]; then
  16.   mkdir -p "$DOWNLOADED_DIR"
  17. fi
  18.  
  19. for trfile in `ls "${TORRENTS_DIR}" | grep -E '\.torrent$'`; do
  20.   if [ -f "${RUN_FILE}" ]; then
  21.     if [ ! -z "`cat "${RUN_FILE}" | grep -F "${trfile}"`" ]; then

Блокирование ip адресов, ломящихся по ssh

  1. #!/bin/sh
  2.  
  3. AUTH_LOG="/var/log/auth.log"
  4. YESTERDAY=`env LC_ALL=en_EN.KOI8-R date -v-1d '+%b %d'`
  5. IPFW_TABLE_NUM="1"
  6. IPFW_TABLE=`ipfw table ${IPFW_TABLE_NUM} list | awk '{ print $1 }'`
  7.  
  8. ip_list=`cat ${AUTH_LOG} | grep "${YESTERDAY}" | grep "sshd" | grep "Invalid user" |\
  9.   awk '{ print $10; }' | egrep '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'`
  10. ip_list_uniq=`printf '%s\n' ${ip_list} | sort | uniq`
  11.  
  12. if [ -z "${ip_list_uniq}" ]; then
  13.   exit 0
  14. fi
  15.  
  16. for ipaddr in ${ip_list_uniq}; do
  17.   repeat_count=`printf '%s\n' ${ip_list} | grep "${ipaddr}" | wc -l`

Сбор статистики SMART

  1. #!/bin/sh
  2.  
Подписка на RSS - Скрипты