Как получить альтернативные имена доменов сертификата

Опция -ext позволяет получить секцию X509v3 Subject Alternative Name

openssl x509 -noout -ext subjectAltName

Пример сертификата википедии

echo | openssl s_client -connect wikipedia.org:443 2>/dev/null | openssl x509 -noout -ext subjectAltName
X509v3 Subject Alternative Name: 
    DNS:*.wikipedia.org, DNS:wikimedia.org, DNS:mediawiki.org, DNS:wikibooks.org, DNS:wikidata.org, DNS:wikinews.org, DNS:wikiquote.org, DNS:wikisource.org, DNS:wikiversity.org, DNS:wikivoyage.org, DNS:wiktionary.org, DNS:wikimediafoundation.org, DNS:w.wiki, DNS:wmfusercontent.org, DNS:*.m.wikipedia.org, DNS:*.wikimedia.org, DNS:*.m.wikimedia.org, DNS:*.planet.wikimedia.org, DNS:*.mediawiki.org, DNS:*.m.mediawiki.org, DNS:*.wikibooks.org, DNS:*.m.wikibooks.org, DNS:*.wikidata.org, DNS:*.m.wikidata.org, DNS:*.wikinews.org, DNS:*.m.wikinews.org, DNS:*.wikiquote.org, DNS:*.m.wikiquote.org, DNS:*.wikisource.org, DNS:*.m.wikisource.org, DNS:*.wikiversity.org, DNS:*.m.wikiversity.org, DNS:*.wikivoyage.org, DNS:*.m.wikivoyage.org, DNS:*.wiktionary.org, DNS:*.m.wiktionary.org, DNS:*.wikimediafoundation.org, DNS:*.wmfusercontent.org, DNS:wikipedia.org

И более чистый вариант

echo | openssl s_client -connect wikipedia.org:443 2>/dev/null | openssl x509 -noout -ext subjectAltName | grep -o 'DNS:[^,]\+' | cut -d':' -f2
*.wikipedia.org
wikimedia.org
mediawiki.org
wikibooks.org
wikidata.org
wikinews.org
wikiquote.org
wikisource.org
wikiversity.org
wikivoyage.org
wiktionary.org
wikimediafoundation.org
w.wiki
wmfusercontent.org
*.m.wikipedia.org
*.wikimedia.org
*.m.wikimedia.org
*.planet.wikimedia.org
*.mediawiki.org
*.m.mediawiki.org
*.wikibooks.org
*.m.wikibooks.org
*.wikidata.org
*.m.wikidata.org
*.wikinews.org
*.m.wikinews.org
*.wikiquote.org
*.m.wikiquote.org
*.wikisource.org
*.m.wikisource.org
*.wikiversity.org
*.m.wikiversity.org
*.wikivoyage.org
*.m.wikivoyage.org
*.wiktionary.org
*.m.wiktionary.org
*.wikimediafoundation.org
*.wmfusercontent.org
wikipedia.org

Определение нескольких IP на интерфейсе

Опция ARPCHECK отключает проверку что айпи уже используется. И ускоряет подъём интерфейса
Для первого айпи используются опции без числового индекса

IPADDR
NETMASK
ARPCHECK

для второго и следующего нужно использовать индекс 2-N

IPADDR2
NETMASK2
ARPCHECK2

пример реального файла /etc/network-scripts/ifcfg-eth1

DEVICE="eth1"
TYPE="Ethernet"
MTU="1500"
ONBOOT="yes"
HWADDR="00:21:E2:43:ED:B3"
BOOTPROTO="static"
IPADDR="192.168.222.200"
NETMASK="255.255.255.0"
ARPCHECK="no"
IPADDR2="172.16.22.1"
NETMASK2="255.255.255.0"
ARPCHECK2="no"
IPADDR3="172.16.88.200"
NETMASK3="255.255.255.0"
ARPCHECK3="no"
NM_CONTROLLED="no"
IPV6INIT="no"

pvcreate Can’t open /dev/sda exclusively. Mounted filesystem?

[root@localhost client]# pvcreate /dev/sda
  Can't open /dev/sda exclusively.  Mounted filesystem?
  Can't open /dev/sda exclusively.  Mounted filesystem?

[root@localhost client]# mount | grep /dev/sda
[root@localhost client]# 

[root@localhost client]# fuser -m -v /dev/sda1
[root@localhost client]#

[root@localhost client]# cat /proc/mdstat 
Personalities : 
md127 : inactive sda[0](S)
      1875243352 blocks super 1.2

[root@localhost client]# mdadm --stop /dev/md127
mdadm: stopped /dev/md127

[root@localhost client]# cat /proc/mdstat 
Personalities : 
unused devices: <none>

[root@localhost client]# mdadm --zero-superblock /dev/sda
[root@localhost client]#

Fortigate 200E перезагрузка неактивной ноды в HA кластере

Первое нам нужно получить индекс слейва

FW01 # get system ha status | grep 'HA operating index'
Master: FG200E4Q35301575, HA operating index = 0
Slave : FG200E4Q35320506, HA operating index = 1

В нашем случае “HA operating index = 1”
Теперь нужно войти на этот слейв.
username в данном случае имя пользователя которым будем логиниться.
он имеет права рута.

FW01 # execute ha manage 1 username
Warning: Permanently added '[169.254.0.2]:44422' (ED25519) to the list of known hosts.
username@169.254.0.2's password:
FW02 #

Теперь мы находимся на слейве и можем его перегрузить

FW02 # execute reboot
This operation will reboot the system !
Do you want to continue? (y/n)Connection to 169.254.0.2 closed by remote host.
Connection to 169.254.0.2 closed.

Через пару минут слейв будет загружен.

gitlab push -> jenkins build

При настройке автоматического билда из gitlab в jenkins я столкнулся с двумя проблемами.
Первая проблема связана с настройками gitlab
при попытке вызвать url Test->push – выдаёт ошибку 500.
Проблема решается включением опции https://your.git.lab/admin/application_settings
Outbound requests -> [v] Allow requests to the local network from hooks and services

Вторая проблема

Connection: close
Date: Sun, 07 Jul 2019 11:52:52 GMT
X-Content-Type-Options: nosniff
Cache-Control: must-revalidate,no-cache,no-store
Content-Type: text/html;charset=iso-8859-1
Content-Length: 415
Server: Jetty(9.4.z-SNAPSHOT)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 403 No valid crumb was included in the request</title>
</head>
<body><h2>HTTP ERROR 403</h2>
<p>Problem accessing /job/Autodeploy/job/autobuild/build. Reason:
<pre>    No valid crumb was included in the request</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>

</body>
</html>

Для подавления этой проблемы нужно отключить защиту от CSRF/XSRF
https://your.jenkins.site/configureSecurity/
CSRF Protection -> [ ] Prevent Cross Site Request Forgery exploits

iscsiadm: No portals found

Iscsi клиент с адреса 10.5.252.5 пытается соединиться с сервером 10.5.4.58 но упорно не видит target который со стороны сервера является вторым target (первый таргет работает с другим клиентом).

Забегая вперёд поясню – проблема в правах доступа.
Одиночный IPv4 адрес в ACL нужно записывать без префикса подсетки /32

Для тех кто хочет понять процесс поиска проблемы опишу немного деталей:

1) selinux временно переключён в Permissive.

[root@localhost server]# setenforce 0
[root@localhost server]# getenforce 
Permissive

2) iptables принимает входящие соединения на tcp порт 3260

[root@localhost server]# iptables -nvL INPUT | grep 3260
   91 46412 ISCSI      tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:3260 

[root@localhost server]# iptables -nvL ISCSI
Chain ISCSI (1 references)
 pkts bytes target     prot opt in     out     source               destination         
   77  4484 ACCEPT     all  --  bond0  *       10.5.0.0/16          0.0.0.0/0           
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0           LOG flags 0 level 4 prefix `ISCSI ' 
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 

3) и iscsi сервер tdtd слушает все нужные адреса и интерфейсы

[root@localhost server]# netstat -nlptu | grep tgt
tcp        0      0 0.0.0.0:3260                0.0.0.0:*                   LISTEN      2555/tgtd           
tcp        0      0 :::3260                     :::*                        LISTEN      2555/tgtd           

4) разумеется, между клиентом и сервером есть сетевая связность на уровне tcp и порта 3260.

[root@localhost client]# tcping 10.5.4.58 3260
10.5.4.58 port 3260 open.

Вот что показывает клиент при попытке получить список target с сервера

[root@localhost client]# iscsiadm --mode discoverydb --type sendtargets --portal 10.5.4.58 --discover
iscsiadm: No portals found

А вот настройка ACL со стороны сервера на втором target

[root@localhost server]# tgtadm --op show --mode target
...
...
...
    ACL information:
        10.5.252.5/32

И кажется что всё ок так как tcpdump показывает двухстороннюю коммуникацию между клиентом и сервером.
Но клиент упорно не видит target.
Запускаем tcpdump на сервере (можно и на клиенте) и после этого на клиенте запускаем команду discover:

[root@localhost server]# tcpdump -nn -i bond0 port 3260
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bond0, link-type EN10MB (Ethernet), capture size 65535 bytes
06:42:45.595466 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [S], seq 1277547255, win 64240, options [mss 1366,sackOK,TS val 2794562310 ecr 0,nop,wscale 7], length 0
06:42:45.595500 IP 10.5.4.58.3260 > 10.5.252.5.34770: Flags [S.], seq 2558380001, ack 1277547256, win 18280, options [mss 9152,sackOK,TS val 2387301250 ecr 2794562310,nop,wscale 7], length 0
06:42:45.613325 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [.], ack 1, win 502, options [nop,nop,TS val 2794562328 ecr 2387301250], length 0
06:42:45.614251 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [P.], seq 1:49, ack 1, win 502, options [nop,nop,TS val 2794562328 ecr 2387301250], length 48
06:42:45.614274 IP 10.5.4.58.3260 > 10.5.252.5.34770: Flags [.], ack 49, win 143, options [nop,nop,TS val 2387301269 ecr 2794562328], length 0
06:42:45.616822 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [P.], seq 49:309, ack 1, win 502, options [nop,nop,TS val 2794562329 ecr 2387301250], length 260
06:42:45.616845 IP 10.5.4.58.3260 > 10.5.252.5.34770: Flags [.], ack 309, win 152, options [nop,nop,TS val 2387301271 ecr 2794562329], length 0
06:42:45.616973 IP 10.5.4.58.3260 > 10.5.252.5.34770: Flags [P.], seq 1:193, ack 309, win 152, options [nop,nop,TS val 2387301271 ecr 2794562329], length 192
06:42:45.635230 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [.], ack 193, win 501, options [nop,nop,TS val 2794562349 ecr 2387301271], length 0
06:42:45.637398 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [P.], seq 309:357, ack 193, win 501, options [nop,nop,TS val 2794562350 ecr 2387301271], length 48
06:42:45.637889 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [P.], seq 357:373, ack 193, win 501, options [nop,nop,TS val 2794562350 ecr 2387301271], length 16
06:42:45.637955 IP 10.5.4.58.3260 > 10.5.252.5.34770: Flags [.], ack 373, win 152, options [nop,nop,TS val 2387301292 ecr 2794562350], length 0
06:42:45.638005 IP 10.5.4.58.3260 > 10.5.252.5.34770: Flags [P.], seq 193:241, ack 373, win 152, options [nop,nop,TS val 2387301292 ecr 2794562350], length 48
06:42:45.659009 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [.], ack 241, win 501, options [nop,nop,TS val 2794562371 ecr 2387301292], length 0
06:42:45.661256 IP 10.5.252.5.34770 > 10.5.4.58.3260: Flags [R.], seq 373, ack 241, win 501, options [nop,nop,TS val 2794562372 ecr 2387301292], length 0
^C
15 packets captured
15 packets received by filter
0 packets dropped by kernel

Заглянув внутрь пакетов видно что спрашивает клиент и что ему отвечает сервер.

[root@localhost server]# tcpdump -nn -xX -i bond0 port 3260

Из увиденного понятно, что сервер не посылает клиенту списка target.
На другом рабочем target в содержимом одного из последних пакетов видно открытым текстом имя target переданного сервером:

09:45:42.163005 IP 10.5.4.58.3260 > 10.5.252.5.38630: Flags [P.], seq 193:317, ack 373, win 152, options [nop,nop,TS val 2398277817 ecr 2805538873], length 124
	0x0000:  4500 00b0 8ee5 4000 4006 9719 0a05 043a  E.....@.@......:
	0x0010:  0a05 fc05 0cbc 96e6 5bc2 5f01 eb86 52a3  ........[._...R.
	0x0020:  8018 0098 14ec 0000 0101 080a 8ef2 d0b9  ................
	0x0030:  a739 2039 2480 0000 0000 0049 0000 0000  .9.9$......I....
	0x0040:  0000 0000 0000 0001 ffff ffff 0000 0001  ................
	0x0050:  0000 0002 0000 0002 0000 0000 0000 0000  ................
	0x0060:  0000 0000 5461 7267 6574 4e61 6d65 3d69  ....TargetName=i
	0x0070:  716e 2e32 3031 352d 3132 2e63 6f6d 2e76  qn.2015-12.com.v
	0x0080:  6473 3a69 7363 7369 6469 736b 3200 5461  ds:iscsidisk2.Ta
	0x0090:  7267 6574 4164 6472 6573 733d 3130 2e35  rgetAddress=10.5
	0x00a0:  2e34 2e35 383a 3332 3630 2c31 0000 0000  .4.58:3260,1....

Из этого можно предположить что сервер не считает клиента авторизованным для какой либо информации о target

Для дебага на втором target, который не появляется на клиенте, добавляем в ACL все адреса:

[root@localhost server]# tgtadm --lld iscsi --mode target --op bind --tid 2 --initiator-address=ALL

Клиент увидел второй target!

[root@localhost client]# iscsiadm --mode discoverydb --type sendtargets --portal 10.5.4.58 --discover
10.5.4.58:3260,1 iqn.2015-12.com.vds:iscsidisk2

Убираем доступ со всех адресов из ACL. Убираем и адрес с префиксом. И добавляем только адрес одного клиента без префикса.

[root@localhost server]# tgtadm --lld iscsi --mode target --op unbind --tid 2 --initiator-address=ALL
[root@localhost server]# tgtadm --lld iscsi --mode target --op unbind --tid 2 --initiator-address=10.5.252.5/32
[root@localhost server]# tgtadm --lld iscsi --mode target --op unbind --tid 2 --initiator-address=10.5.252.5
[root@localhost server]# tgtadm --op show --mode target
...
...
...
    ACL information:
        10.5.252.5

Готово.

sshd – запрет вывода о последнем успешном логине и количестве неуспешных логинов

Для средств автоматизации которые выделяют терминал на удалённом сервере бывает необходимо запретить вывод сообщения следующего вида:

Last failed login: Thu Jun 27 04:49:56 EDT 2019 from 206.189.129.131 on ssh:notty
There were 752 failed login attempts since the last successful login.
Last login: Wed Jun 26 11:44:44 2019 from 22.158.126.144

Запретить можно двумя способами, для индивидуально для определённых пользователей и глобально для системы.

Запрет только для выбратнного пользователя username:

touch /home/username/.hushlogin

Запрет глобально для всей системы:
Отредактируйте файл /etc/ssh/sshd_config

PrintLastLog no
systemctl restart httpd

ПРЕДУПРЕЖДЕНИЕ!
Опция PrintLastLog не работает в Match секциях.
Опция работает только глобально! Тоесть её нельзя использовать для пользователя или группы.

Запрет разрешения ipv6 адресов в bind

/etc/sysconfig/named

OPTIONS="-4"

/etc/named.conf

filter-aaaa-on-v4 yes;

и в зависимости что вы используете

# systemctl list-unit-files | grep named
named-chroot-setup.service                    static
named-chroot.service                          enabled
named-setup-rndc.service                      static
named.service                                 disabled

перезапустить named-chroot (в моём случае)

systemctl restart named-chroot

или просто named (у меня он запрещён, привожу для примера)

systemctl restart named

Доступ к системным “шарам” или домашним папкам пользователей через сеть

Чтобы из сети добраться до системной “шары” Windows при включённом UAC нужно добавить (изменить) в реестр параметр

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"LocalAccountTokenFilterPolicy"=dword:00000001

Настройка статических iproute2 правил в Centos7

Я предпочитаю давать таблице своё уникальное имя. Когда таблиц много это позволяет легче ориентировaться.

[root@server /] # cat /etc/iproute2/rt_tables
#
# reserved values
#
255	local
254	main
253	default
0	unspec
#
# local
#
#1	inr.ruhep

# здесь добавить таблицу с уникальным ID и именем
102	directroute

После определения имени таблицы добавим файл /etc/sysconfig/network-scripts/route-vlan707
где vlan707 – имя интерфейса на котором определён IP и к которому будет привязан маршрут.
У меня это vlan.

[root@server /] # cat /etc/sysconfig/network-scripts/route-vlan707
# добавить route2 маршруты для directroute
# таблица directroute определена в /etc/iproute2/rt_tables
109.122.38.249/32 dev vlan707table directroute
default via 109.122.38.193 dev vlan707table directroute

Во втором файле определяем правило

[root@server /] # cat /etc/sysconfig/network-scripts/rule-vlan707
# add route2 rule for direct routing
from 109.122.38.249/32 lookup directroute

Тепер чтобы правила попали в таблицу маршрутизации необходимо “передёрнуть” интерфейс

ifdown vlan707 && ifup vlan707

Либо перезапустить систему. В результате получим следующее:

[root@server /] # ip route show table directroute
default via 109.122.38.193 dev vlan707
109.122.38.249 dev vlan707scope link

[root@server /] # ip rule show all
0:	from all lookup local
32765:	from 109.122.38.249 lookup directroute
32766:	from all lookup main
32767:	from all lookup default