Pull to refresh
1
0
Send message
#!/bin/bash


UPTIME=$(cut -d ' ' -f 1 </proc/uptime);
echo "
days=${UPTIME}/86400;
dremainder=${UPTIME}%86400;
if(days>0){days;f=1};
minutes=dremainder/3600;
if((minutes>0)||(f==1)){minutes};
(dremainder%3600)/60" | bc

можно свернуть в одну строку
на выходе от одной до трёх строк
дней (если не ноль)
часов (если не ноль или есть дни)
минут (всегда)

В районе 2011 года я потратил больше 20 тыс долларов на терабайтники с надписью Seagate.
До окончания гарантии вылетело примерно 50% закупленных дисков. Поставщик менял их исключительно на refurbished, которые вылетали уже через пару месяцев. После окончания гарантии в течении около года ушло около 90% закупленных дисков. Причём диски были из нескольких разных партий. Диски самой первой партии продержались больше всего. А более поздние дохли очень быстро. Пару дней назад заменил самых долгожителей из тех партий.

Поэтому c грустью констатирую — «морским воротам» я больше не доверяю. Пруфы свалены в коробках. Хочется этими дисками сложить нехорошее слово и снять с квадрокоптера.
С другой стороны, в некоторых серверах у меня до сих пор крутятся сигейты в которых счётчик отработанных часов скоро переполнится второй раз. Умели же делать.
Зачем дёргать iptables если список адресов не изменился?
Удалять тоже можно аккуратно.
Да и стоило бы проверить что там вернул curl.

Как-то так (10 минут на коленке)
#!/bin/bash

IPTABLESCHAIN="CLOUDFLARE"

PREVLIST_MD5_FILENAME="lastchangedlist.md5"
[ -e "${PREVLIST_MD5_FILENAME}" ] && PREVMD5SUM=$(cat "${PREVLIST_MD5_FILENAME}")

IPLIST=$(curl -s https://www.cloudflare.com/ips-v4 2>/dev/null)
if [ -z "${IPLIST}" ] ; then
  echo -e "Hell! CF didn't give me IP list!"
  exit 1
fi
# Who know what CF return to me? I need only IPv4 networks
IPLIST=$(echo "${IPLIST}" | grep -o '[0-9]\{1,3\}\(\.[0-9]\{1,3\}\)\{3\}\(/[0-9]\{1,2\}\)\{0,1\}' | sort -t '.' -nk1,1 -nk2,2 -nk3,3 -nk4,4)

MD5SUM=$(echo "${IPLIST}" | md5sum | awk '{print $1}') #' I need only md5sum

if [ "${MD5SUM}" == "${PREVMD5SUM}" ] ; then
  # everything fine. No changes.
  exit 0
fi

ACTIVERULESLIST=$(iptables -nL "${IPTABLESCHAIN}" | awk '/^ACCEPT/{print $4}' | sort -t '.' -nk1,1 -nk2,2 -nk3,3 -nk4,4)
NONUNIQ=$(echo "${ACTIVERULESLIST}" | uniq -c | awk '{if($1!=1){print}}') #'
if [ -n "${NONUNIQ}" ] ; then
  echo -e "In ${IPTABLESCHAIN} chain found non unique values:\n${NONUNIQ}"
fi

while read IPNET ; do
  # check if ipv4 is valid
  ipcalc --silent -b "${IPNET}" >/dev/null
  if [ "${?}" -ne 0 ] ; then
    echo "[ERROR] \"${IPNET}\" is invalid. Skip."
    continue
  fi
  IPNETREGEX=$(echo "${IPNET}" | sed -e 's/\./\\./g')
  ALREADY=$(echo "${ACTIVERULESLIST}" | grep "^${IPNETREGEX}$")
  if [ "${ALREADY}" == "${IPNET}" ] ; then
    # echo "Already active ${IPNET}"
    ACTIVERULESLIST=$(echo "${ACTIVERULESLIST}" | grep -v "^${IPNETREGEX}$")
    continue
  fi
COLLECTEDIPLIST="${COLLECTEDIPLIST}\n${IPNET}"
  echo "iptables -I ${IPTABLESCHAIN} 1 \"${IPNET}\" -J ACCEPT -m comment --comment \"CloudFlare CDN\""
done < <(echo "${IPLIST}")

# delete everything what not in current ip network list
while read IPNET ; do
  echo "iptables -D CLOUDFLARE -s ${IPNET} -j ACCEPT"
done < <(echo "${ACTIVERULESLIST}")

echo -e "${MD5SUM}" > "${PREVLIST_MD5_FILENAME}"


Можно ещё посчитать количество изменений чтобы вдруг не грохнуть большое количество.
И добавил немного информации в logger -t CFiptablesUpdater чтобы в случае аварии можно было найти причину.
А поддержка какого-то аналога RDP когда появится? :)

Ежемесячно, каждый хостер подписавший SPLA, перечисляет MS сумму большую чем получает от сдачи серверов в аренду. В разы большую. И ежегодно MS повышает цену, и меняет плавила лицензирования с процессоров на ядра и тем самым ещё больше повышает свою монопольную маржу. При этом MS конкурирует со своими же «SPLA партнёрами» своими облачными сервисами. И есть примеры хостеров не готовых мириться с таким положением вещей, которые разрывают сотрудничество с MS даже в ущерб своим клиентам.

Не уж то хостеры не предлагают отчисления проекту за поддержку востребованных вещей?
Давайте быдлокодить софт для атомных электростанций и ракет

Как-то стрёмно становится жить в мире где автопилотные автомобили программируются быдлокодерами которые не испытывают ни малейшего желания стать лучше. Да ещё и бахвалятся своей позицией.
Ваш пароль — это данные реальном элементе на веб странице. Любой скрипт который имеет доступ к странице — видит её целиком.

А ещё обратите внимание на IP адреса откуда Вам отдают HTTPS контент. Очень часто сейчас это CDN которая не имеет никакого отношения к самой компании. А CDN не может кешировать зашифрованный контент. Поэтому контент дешифруется на стороне CDN и она имеет все данные переданные пользователем в сторону сайта в открытом виде. И разумеется может точечно подсунуть посетителю свой скрипт.
Теперь осталось заспамить «Фрилансим» заявками и отправить проект в утиль.

Так что больше не придется выбирать между желанием написать отклик к единственному заказу и 500 рублями.
А кто мешает просто добавить 99 рублей за клик, оставив при этом 500 рублей за месячную подписку и оплату за размещение заявки? Сейчас просто увеличится количество мусорных заказов и фрилансеры уйдут. При этом у команды «Фрилансим» увеличится количество работы чтобы обеспечить очистку списка задач. Меня удивило чего это телеграм канал «фрилансим» стал разрываться от заказов… А тут такая радость: стоимость подписки выросла в 2.4 раза.
Например безопасный ssh не имеет опции, которая позволяет передать ему пароль в командной строке. А небезопасный wget — поддерживает опцию --password.

Как раз таки разрабочики ssh позаботились о том чтобы неискушённый пользователь не мог показать пароль всем процессам в системе. А разработчик sshpass ликвидировал это досадное недоразумение:
$ sshpass 'смотрите на мой пароль в списке процессов пожалуйста' ssh root@my-super-server.com

Между тем для правильного приготовления ssh придуманы ключи.
А нам вешали лапшу про ураган в Костарике и по этой причине датацентр плохо доступен. :)
Да-да!
Недавно столкнулся с интересным поведением домена (у клиента).
На него невозможно было навесить сертификат letsencrypt
Скрипт упорно возвращал ошибку «сервер не найден». Ошибка приходила от сервиса letsencrypt.
Но хост у меня нормально грузился и ресолвился. И в ступор меня ставило то что nslookup на мой DNS работал, на яндекса работал, а на гугл 8.8.8.8 возвращал ошибку: «хост не найден». dig-ом раскопал что в домене кто-то начал настраивать DNSSEC но не закончил. Была прописана только запись DS. Запись удалили — и гугл вернул адрес!
Вывод — гугл и letsencrypt поступают значительно логичнее чем все остальные: Если в домене есть какие-то упоминания о DNSSEC но полная верификация невозможна то нужно вернуть ошибку, а не пытаться ресолвнуть без DNSSEC!

Information

Rating
Does not participate
Registered
Activity