Как получить все IP адреса CoudFlare

Очень просто. Воспользоваться официальной информацией с сайта CoudFlare.
https://www.cloudflare.com/ips/

Для автоматизации можно использовать следующий запрос.
Например, этот bash скрипт создаст разрешающий список IPv4 для apache который можно поместить в конфиг или .htaccess

$ curl --silent https://www.cloudflare.com/ips-v4 | xargs
103.21.244.0/22 103.22.200.0/22 103.31.4.0/22 104.16.0.0/12 108.162.192.0/18 131.0.72.0/22 141.101.64.0/18 162.158.0.0/15 172.64.0.0/13 173.245.48.0/20 188.114.96.0/20 190.93.240.0/20 197.234.240.0/22 198.41.128.0/17

Как получить все IP адреса incapsula.com

Отключение wpa_supplicant на VDS или десктопе где нет WiFi

Установка NetworkManager тянет за собой кучу ненужных зависимостей которые часто не нужны и которые нельзя удалить но хочется заблокировать. Одна из них wpa_supplicant.

  663 ?        Ss     2:29 /bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
  666 ?        S      0:03 /usr/sbin/chronyd
  706 ?        Ss     0:16 /usr/sbin/crond -n
  716 tty1     Ss+    0:00 /sbin/agetty --noclear tty1 linux
  749 ?        Ss     0:00 /usr/sbin/wpa_supplicant -u -f /var/log/wpa_supplicant.log -c /etc/wpa_supplicant/wpa_supplicant.conf -u -f /var/log/wpa_supplicant

Остановить
Запретить
И “слить” в /dev/null

systemctl stop wpa_supplicant
systemctl disable wpa_supplicant
systemctl mask wpa_supplicant.service

iptables в RHEL 7 / Centos 7

Centos 7 как вернуть iptables вместо firewalld

Я считал, считаю и буду считать, что iptables в его старом чистом виде больше подходит для серверов чем новомодный firewalld который сначала запихнули в дистрибутивы федоры начиная с 18-й, а теперь ещё и в RHEL7 и Centos 7. Во-первых потому, что firewalld генерирует большое количество бессмысленных правил которые излишне тормозят работу iptables. Я пробежался по цепочке INPUT пустого настроенного по умолчанию firewalld и насчитал там 14!!! пустых переходов! Возможно это гениальное приложение с очень продуманной архитектурой, но вот однозначно ему не место в высоконагруженных системах. Во-вторых читать и понимаеть вывод iptables -nvL без обработки практически невозможно.
В-третьих на серверах нет нужды динамически управлять iptables, а fail2ban при небольших доработках конфигов прекрасно справляется со своей работой.

Поэтому если я устанавливаю сервер на Centos 7, то первым делом я возвращаю iptables.
Continue reading iptables в RHEL 7 / Centos 7

Centos. Unable to create bridge virbr1 Package not installed.

При отключённом ipv6 в centos 6.7 (Final) столкнулся с тем что не запускается сеть и не создаётся бридж.

[root@fileserver ~]# virsh net-start routed
error: Failed to start network routed
error: Unable to create bridge virbr1: Package not installed

В логе

Apr 13 13:41:35 fileserver kernel: bridge: Unknown symbol ipv6_dev_get_saddr

Для исправления нужно в файле disable-ipv6.conf прописать правильную опцию

cat /etc/modprobe.d/disable-ipv6.conf
#install ipv6 /bin/true
options ipv6 disable_ipv6=1

И убрать ipv6 и net-pf-10 если они были добавлены в файл /etc/modprobe.d/blacklist.conf

[root@fileserver modprobe.d]# virsh net-start routed
Network routed started
[root@fileserver modprobe.d]# virsh net-list --all
Name                 State      Autostart     Persistent
--------------------------------------------------
default              inactive   no            yes
routed               active     no            yes
Apr 13 13:46:26 fileserver kernel: NET: Registered protocol family 10
Apr 13 13:46:26 fileserver kernel: lo: Disabled Privacy Extensions
Apr 13 13:46:26 fileserver kernel: ADDRCONF(NETDEV_UP): eth1: link is not ready
Apr 13 13:46:26 fileserver kernel: tun0: Disabled Privacy Extensions
Apr 13 13:46:26 fileserver kernel: Bridge firewalling registered
Apr 13 13:46:26 fileserver kernel: device virbr1-nic entered promiscuous mode
Apr 13 13:46:26 fileserver kernel: virbr1: starting userspace STP failed, starting kernel STP

OpenVPN как не принять предложение сервера о настройке интерфейсов

В повседневной работе я пользуюсь десятками включённых VPN клиентов. Эти клиенты соединяются с разными серверами, а серверы имеют разные настройки. Так например у меня возникала ситуация когда нужный мне роут пробрасывался через TUN интерфейс который PUSH-ился с сервера. Если бы сервер использовал только я стоило бы перенастроить только сервер чтобы это исправить. Однако сервером пользуются и другие люди и там этот PUSH необходим. Сначала я руками переписывал роут и забывал до следующего переподключения. Но последнее время часто приходилось переподключаться и вечное переписывание роута стало раздражать. В документации к OpenVPN написано что в настройках с недавнего времени появился ключ который поможет клиенту отвергнуть то что ему предлагает сервер.
Continue reading OpenVPN как не принять предложение сервера о настройке интерфейсов

Windows 10 BestCrypt BSOD и перезагрузка при размонтировании криптодиска

При размонтировании шифрованного диска выдавалось сообщение о том, что с диска открыты какие-то файлы и его размонтирование может привести к потере несохранённых данных открытых файлов. После согласия пользователя с размонтированием система входила в долгое ожидание и через минуту уходила в BSOD (синий экран смерти) и перезагружалась в соответствии с настройками. Ситуация повторялась в 9-ти случаях из 10-ти. Windows 10 работала в виртуальной машине KVM. Другие аналогичные инсталяции работали под VMWare и проблем не создавали.
Continue reading Windows 10 BestCrypt BSOD и перезагрузка при размонтировании криптодиска

Обновление ssh и очередное отключение устаревших алгоритмов

Время идёт и постепенно старые алгоритмы шифрования становятся небезопасными. Разрабочики софта конечно же постепенно их отключают. Но для админа-то обычно это просиходит внезапно и ой как не вовремя и становится чертовски неприятным сюрпризом, особенно если обновления накатываются атоматически. Так обновление на Fedora 23 подарило мне пару незабываемых часов когда я не мог достучаться на большую часть серверов которыми управляю. Казалось бы что обновление openssl, openssh в любом виде должно стать красной тряпкой, но пока что стереотип поведения не сложился. И последнее обновление openssh.i686 7.2p1-2.fc23, openssh-server.i686 7.2p1-2.fc23, openssh-clients.i686 7.2p1-2.fc23 снова подарило неожиданный сюрприз в виде невозможности залогиниться на клиентский mikrotik.

[user001@localhost ~]$ ssh root@192.168.88.1
ssh_dispatch_run_fatal: Connection to 192.168.88.1 port 22: DH GEX group out of range

И как обычно бывает в свежих случаях гугл и яндекс не показали ничего интересного.
— Упс, сказал я и полез в мануал.
Continue reading Обновление ssh и очередное отключение устаревших алгоритмов

sudoers: проверка синтаксиса

Когда вы редактируете файл /etc/sudoers или создаёте подключаемые к нему файлы в каталоге /etc/sudoers.d/* то неплохо бы сразу проверить синтаксис. Если вы редактируете sudoers в его редакторе visudo то он автоматически проверит синтаксис при сохранении. А если как я больше пользуетесь mcedit то после редактирования sudoers можно выполнить проверку указав ключ:

[root@d01 sudoers.d]# visudo -c
/etc/sudoers: parsed OK
/etc/sudoers.d/zabbix_sudo: parsed OK

Как видите синтаксис проверился вместе со вложением /etc/sudoers.d/zabbix_sudo.

Но на боевом сервере, где sudo активно используется системой мониторинга или каким либо скриптом из crontab, не стоит проводить правку файла по-живому. Для этого его можно скопировать в другое место и там редактировать. А после редактирования проверить всё той же командой но с дополнительным ключом:

[root@d01 sudoers.d]# visudo -cf /root/sudoers.new
/root/sudoers.new: parsed OK

После этого его можно смело копировать на место боевого файла. Не забудтре однако правильно поставить права 440 для владелеца и группы root:root.

Почему копипастить команды с web сразу в терминал это глупость?

Потому что bash/sh терминал выполнит команду если в ней будет перевод строки.

Во-первых когда команда набирается руками происходит запоминание, сначала вы внимательно читаете команду, затем вводите ту часть которую запомнили, затем дальше читаете и снова вводите. Работают глаза, голова и руки. Запоминается эффективнее.

Во-вторых вместе с командой можно скопипастить чужой зловредный код. Не верите?
Выделите код который приведён ниже скопируйте и затем вставьте в тектовый редактор. После этого вы всегда будете копипастить код через редактор, а короткие команды будете набирать руками.
Continue reading Почему копипастить команды с web сразу в терминал это глупость?

Однострочный скрипт вывода smart информации по нескольким дискам в виде таблицы

Буквы дисков нужно задать в операторе echo -e “a\nb”.

# for idx in `echo -e "a\nb"` ; do smartctl -A /dev/sd$idx | sed -n '/^ID#/,/^$/p' | sed -e '/^ID#/d;s/^./'"$idx "'&/g'; done | sed -e '/^[ \t]*$/d' | awk '{disks[$1]=$1;keys[$3]=$2$3;valuelen=length($11);keylen=length($3);if(valuelen>maxvaluelen){maxvaluelen=valuelen}if(keylen>maxkeylen){maxkeylen=keylen};VALUES[$1,$3]=$11}END{printf("\n%-"maxkeylen"s","NAME");for(disk in disks){printf(" %"maxvaluelen"s",toupper("SD"disk))};for(key in keys){printf("\n%-"maxkeylen"s",key); for(disk in disks){printf(" %"maxvaluelen"s", VALUES[disk,key])}};printf("\n")}'

NAME                       SDA    SDB
Spin_Retry_Count             0      0
Seek_Error_Rate              0      0
Start_Stop_Count           101     21
Multi_Zone_Error_Rate        0      0
Offline_Uncorrectable        0      0
Spin_Up_Time              9216  10183
Power_Cycle_Count           95     12
Calibration_Retry_Count      0      0
Load_Cycle_Count        199966 111455
Reallocated_Sector_Ct        0      0
Raw_Read_Error_Rate          3      0
Current_Pending_Sector       0      0
Reallocated_Event_Count      0      0
Power_On_Hours            9259  11992
Temperature_Celsius         27     23
UDMA_CRC_Error_Count         0      0
Power-Off_Retract_Count     33      7

Одним движением руки этот скрипт преобразуется в вывод информации, например по 8-ми дискам в RAID контроллере 3ware.

for idx in `seq 0 7` ; do smartctl -A /dev/twa0 -d 3ware,$idx | sed -n '/^ID#/,/^$/p' | sed -e '/^ID#/d;s/^./'"$idx "'&/g'; done | sed -e '/^[ \t]*$/d' | awk '{disks[$1]=$1;keys[$3]=$2$3;valuelen=length($11);keylen=length($3);if(valuelen>maxvaluelen){maxvaluelen=valuelen}if(keylen>maxkeylen){maxkeylen=keylen};VALUES[$1,$3]=$11}END{printf("\n%-"maxkeylen"s","NAME");for(disk in disks){printf(" %"maxvaluelen"s",toupper("p:"disk))};for(key in keys){printf("\n%-"maxkeylen"s",key); for(disk in disks){printf(" %"maxvaluelen"s", VALUES[disk,key])}};printf("\n")}'