がべーじこれくしょん

技術系とかいろいろ

ICTSC2021 夏の陣 参加記

昨年に引き続き、今年も「トラコン」ことICTトラブルシューティングコンテスト(ICTSC)2021 夏の陣に「mis1yakudo」として参加してきました。

一昨年に初参加したときは「VyOSってなんぞ」というレベルだったのが、確実に成長を感じてます。

追記(2021/8/31):チームでの最終獲得点数は、3100ptでした

以下は解いた問題のメモ。

やったこと

僕の仕事は専門系(k8sやネットワークなど)以外の雑多な問題を倒す係だったので、ひたすら手がついてない問題を点数の低い方から倒していきました。

1日目

以下たぶん手を付けた順(記憶が正しければ)

頑固なindex.html

再起動すると復活するindex.htmlくんを除霊するお仕事です。

最初はnginxくんのせいかと思いましたが、restartをしても変更内容が保持されるので、nginxくんは無実だと判断しました。

タイミングとしてはどう考えてもrebootしたときに復活するので、reboot時にhookされる何かしらのスクリプトが悪さをしていると予想しました。

最初は/etc/profile.d/.bash_profileかと思いましたが、どうもログイン時というより起動時に書き換わってそうな臭いを感じました。

そこで、他にそういうやつがいないかググって見たところsystemd-tmpfilesというどう見ても怪しいやつがいることがわかりました。

追記(2021/8/31):今考えたら、profile.d以外に起動時書き換え系のデーモンを知らなかったので、/home/etc脳死grepしたことを思い出しました。時間があるときはgrepするのがベスト

実際、犯人は/etc/tmpfiles.d/ictsc.confだったので、この設定をコメントアウトすることで無事除霊ができました。

止まらない

問題からCtrl+Cによるシグナルが送信されてなさそうな臭いを感じる。

Makefileを見るといつも脳死で打ってるinteractive系オプション(-it)がなかったので、これを追加して解決

Webサーバーが立ち上がらない

闇pyenv

systemに直入れしてたのにpyenvで環境が切り替わったことが直接の原因。たぶん解決策はいくつかあるが面倒くさいのでsystemに戻すことで解決。

ssh繋がらなくなっちゃった…

こういうときはverboseオプションをつけてログを見よう

user@prob51-ssh-client:~/.ssh$ ssh -v 172.16.0.1
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f  31 Mar 2020
debug1: Reading configuration data /home/user/.ssh/config
debug1: /home/user/.ssh/config line 1: Applying options for 172.16.0.1
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/home/user/.ssh/mux-user@172.16.0.1:22" does not exist
debug1: Connecting to 172.16.0.1 [172.16.0.1] port 22.
debug1: Connection established.
debug1: identity file /home/user/.ssh/id_rsa type -1
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type -1
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: identity file /home/user/.ssh/id_ecdsa type -1
debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/user/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/user/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/user/.ssh/id_ed25519 type -1
debug1: identity file /home/user/.ssh/id_ed25519-cert type -1
debug1: identity file /home/user/.ssh/id_ed25519_sk type -1
debug1: identity file /home/user/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/user/.ssh/id_xmss type -1
debug1: identity file /home/user/.ssh/id_xmss-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.0
debug1: match: OpenSSH_8.0 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 172.16.0.1:22 as 'user'
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: (no match)
Unable to negotiate with 172.16.0.1 port 22: no matching key exchange method found. Their offer: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1

何やら鍵交換アルゴリズムに関して文句を言われてる。ググるとclient側から使用する鍵交換アルゴリズムを指定できるっぽい

user@prob51-ssh-client:~/.ssh$ diff -u ~/.ssh/config.orig ~/.ssh/config
--- /home/user/.ssh/config.orig 2021-08-28 12:12:51.865136824 +0900
+++ /home/user/.ssh/config      2021-08-28 12:16:02.741852658 +0900
@@ -2,4 +2,4 @@
   ControlMaster auto
   ControlPath ~/.ssh/mux-%r@%h:%p
   ControlPersist 10
-  KexAlgorithms diffie-hellman-group1-sha1
+  KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group14-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1

ひとまずこれでdone…

と思いきやまだ繋がらない。サーバー側の/etc/ssh/sshd_configを見ると、なぜかDenyUsersに今まさにログインしようとしてるユーザーがいるので、除外する。

これでいけるか…と思ったら以下のエラー。

user@prob51-ssh-client:~$ ssh 172.16.0.1
user@172.16.0.1's password: 
mux_client_request_session: session request failed: Session open refused by peer
Failed to connect to new control master

sshのセッション関連かなと思い、server側の/etc/ssh/sshd_configを見に行くと、MaxSessionsが0になってました。これを1にして無事解決。

[user@prob51-ssh-server ~]$ sudo diff -u /etc/ssh/sshd_config.orig /etc/ssh/sshd_config
--- /etc/ssh/sshd_config.orig   2021-08-28 12:24:56.499355499 +0900
+++ /etc/ssh/sshd_config        2021-08-28 12:25:09.182916154 +0900
@@ -46,9 +46,9 @@
 PermitRootLogin yes
 #StrictModes yes
 #MaxAuthTries 6
-MaxSessions 0
+MaxSessions 1
 #AllowUsers
-DenyUsers toor administrator administrateur admin adm test guest info mysql user oracle
+DenyUsers toor administrator administrateur admin adm test guest info mysql oracle
 
 #PubkeyAuthentication yes

iscsi問題

こういうやつはログを見よう

user@iscsi-initiator:~$ sudo iscsiadm -m node --login -p 192.168.18.2
Logging in to [iface: default, target: iqn.2021-07.192.168.18.2:target, portal: 192.168.18.2,3260] (multiple)
iscsiadm: Could not login to [iface: default, target: iqn.2021-07.192.168.18.2:target, portal: 192.168.18.2,3260].
iscsiadm: initiator reported error (24 - iSCSI login failed due to authorization failure)
iscsiadm: Could not log into all portals

認証が上手く行ってなさそうで、ググった結果からtargetのACLに問題がありそうな臭いを嗅ぎ取る。

user@iscsi-initiator:~$ sudo cat /etc/iscsi/initiatorname.iscsi 
## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator.  The InitiatorName must be unique
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
InitiatorName=iqn.2021-07.192.168.18.1:initiator

ACLを確認しに行くと、initiatorの識別子をミスっている。

user@iscsi-target:~$ sudo targetcli ls
o- / ......................................................................................................................... [...]
...
  o- iscsi ............................................................................................................ [Targets: 1]
  | o- iqn.2021-07.192.168.18.2:target ................................................................................... [TPGs: 1]
  |   o- tpg1 ............................................................................................... [no-gen-acls, no-auth]
  |     o- acls .......................................................................................................... [ACLs: 1]
  |     | o- iqn.2021-07.192.168.18.11:initiator .................................................................. [Mapped LUNs: 1]
  |     |   o- mapped_lun0 ............................................................................... [lun0 fileio/disk01 (rw)]
  |     o- luns .......................................................................................................... [LUNs: 1]
  |     | o- lun0 ............................................. [fileio/disk01 (/var/lib/iscsi_disks/disk01.img) (default_tg_pt_gp)]
  |     o- portals .................................................................................................... [Portals: 1]
  |       o- 0.0.0.0:3260 ..................................................................................................... [OK]
...

なので、正しい名前で登録し直しましょう。

user@iscsi-target:~$ sudo targetcli
/> cd /iscsi/iqn.2021-07.192.168.18.2:target/tpg1/acls/iqn.2021-07.192.168.18.11:initiator/
/iscsi/iqn.20....11:initiator> get auth
AUTH CONFIG GROUP
=================
mutual_password=
----------------
The mutual_password auth parameter.
mutual_userid=
--------------
The mutual_userid auth parameter.
password=ictsc2021
------------------
The password auth parameter.
userid=user
-----------
The userid auth parameter.

認証情報がわかったので、正しい名前で登録しなおします。

user@iscsi-target:~$ sudo targetcli
/> cd /iscsi/iqn.2021-07.192.168.18.2:target/tpg1/acls
/iscsi/iqn.20...get/tpg1/acls> cd iqn.2021-07.192.168.18.1:initiator/
/iscsi/iqn.20....1:initiator> set auth userid=user
/iscsi/iqn.20....11:initiator> set auth password=ictsc2021

user@iscsi-target:~$ systemctl enable rtslib-fb-targetctl

あとはinitiator側からログインする

user@iscsi-initiator:~$ sudo iscsiadm -m node --login
Logging in to [iface: default, target: iqn.2021-07.192.168.18.2:target, portal: 192.168.18.2,3260] (multiple)
Login to [iface: default, target: iqn.2021-07.192.168.18.2:target, portal: 192.168.18.2,3260] successful.

user@iscsi-initiator:~$ lsblk | grep -E "(NAME|sda)"
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0    5G  0 disk

キャッシュサーバー

/etc/resolv.confを書き換えるなというお達し。自動生成だからファイル本体を書き換えずにやれ、ということかと思ったら、間接的に書き換えるのも×。

ifcfgをいじるかと思ったけどこれも違う。

完全に詰まってしまったので、諦めて他のチームメイトに投げたら知らない間に解いてた。こわい。

L or R

ログを見る

user@router:~$ cat /var/log/freeradius/radius.log.1
Wed Aug 25 23:48:10 2021 : Info: Debugger not attached
Wed Aug 25 23:48:10 2021 : Info: systemd watchdog is disabled
Wed Aug 25 23:48:16 2021 : Info: rlm_ldap: libldap vendor: OpenLDAP, version: 20449
Wed Aug 25 23:48:16 2021 : Error: rlm_ldap (ldap): Bind with cn=admin,dc=2021-summer,dc=ictsc,dc=net to ldap://localhost:389 failed: Can't contact LDAP server
Wed Aug 25 23:48:16 2021 : Error: rlm_ldap (ldap): Opening connection failed (0)
Wed Aug 25 23:48:16 2021 : Error: /etc/freeradius/3.0/mods-enabled/ldap[8]: Instantiation failed for module "ldap"
Wed Aug 25 23:48:26 2021 : Info: Debugger not attached
Wed Aug 25 23:48:26 2021 : Info: systemd watchdog is disabled
Wed Aug 25 23:48:36 2021 : Info: rlm_ldap: libldap vendor: OpenLDAP, version: 20449
Wed Aug 25 23:48:36 2021 : Warning: Please use tls_min_version and tls_max_version instead of disable_tlsv1
Wed Aug 25 23:48:36 2021 : Warning: Please use tls_min_version and tls_max_version instead of disable_tlsv1_2
Wed Aug 25 23:48:36 2021 : Info: Loaded virtual server <default>
Wed Aug 25 23:48:36 2021 : Warning: Ignoring "sql" (see raddb/mods-available/README.rst)
Wed Aug 25 23:48:36 2021 : Info: Loaded virtual server default
Wed Aug 25 23:48:36 2021 : Info:  # Skipping contents of 'if' as it is always 'false' -- /etc/freeradius/3.0/sites-enabled/inner-tunnel:336
Wed Aug 25 23:48:36 2021 : Info: Loaded virtual server inner-tunnel
Wed Aug 25 23:48:36 2021 : Info: Ready to process requests

LDAPにつなぎにいけてないのでネットワーク問題か…?と思ったが何もわからない。

user@router:~$ sudo netstat -anp | grep slapd
tcp        0      0 0.0.0.0:389             0.0.0.0:*               LISTEN      498/slapd           
tcp6       0      0 :::389                  :::*                    LISTEN      498/slapd           
tcp6       0      0 ::1:389                 ::1:45628               ESTABLISHED 498/slapd           
tcp6       0      0 ::1:389                 ::1:45626               ESTABLISHED 498/slapd           
tcp6       0      0 ::1:389                 ::1:45630               ESTABLISHED 498/slapd           
tcp6       0      0 ::1:389                 ::1:45632               ESTABLISHED 498/slapd           
tcp6       0      0 ::1:389                 ::1:45624               ESTABLISHED 498/slapd           
unix  2      [ ACC ]     STREAM     LISTENING     18986    498/slapd            /var/run/slapd/ldapi
unix  2      [ ]         DGRAM                    18837    498/slapd

普通に動いてるしなんだ…?

RADIUSもわからないので終了。

2日目

1日目と違う問題がくると構えてたら1日目と同じだった。なのでRADIUS問を続行

L or R

チームメイトに聞いたら「なんでローテートされた方のログ見てるんですか?」と言われて泣いた。

設定ファイルを書き換えて、stderrにauth関連のログが吐かれるようにしてもらうと何やら怪しそうなログが。

Aug 29 10:29:28 router freeradius[6923]: Sun Aug 29 10:29:28 2021 : Info: Ready to process requests
Aug 29 10:46:19 router freeradius[6923]: Sun Aug 29 10:46:19 2021 : Auth: (7)   Login incorrect (mschap: FAILED: No NT/LM-Password.  Cannot perform authentication): [adam/<via Auth-Type = eap>] (from client switch port 0 via TLS tunnel)
Aug 29 10:46:19 router freeradius[6923]: Sun Aug 29 10:46:19 2021 : Auth: (8) Login incorrect (eap_peap: The users session was previously rejected: returning reject (again.)): [adam/<via Auth-Type = eap>] (from client switch port 0 cli 76-83-C9-9B-FB-89)

NT/LMってなんぞと思ったら某窓関連らしい。調べてみるとPEAP(EAP-MSCHAPv2)で使えるパスワード形式は、平文かNTハッシュ形式だけらしい。

面倒くさいので平文で保存すれば解決するだろうと思い実行。(ここでPassword Policy Overlayで平文保存されるようにしなければならないと思い2時間くらい溶かしたがデフォルトで平文保存だったらしい、悲しすぎる)

f:id:musaprg:20210830104534p:plain

client1,2のwpa_supplicant.confからパスワードとusernameを取得。これをもとにldapのクエリを書く。

user@router:~$ cat addPassword.ldif 
dn: uid=adam,ou=Users,dc=2021-summer,dc=ictsc,dc=net
changetype: modify
add: userPassword
userPassword: 9F41SdevdByRHRAf

dn: uid=eve,ou=Users,dc=2021-summer,dc=ictsc,dc=net
changetype: modify
add: userPassword
userPassword: NtNJiBAeHadeUNOb

user@router:~$ sudo ldapadd -x -D "cn=admin,dc=2021-summer,dc=ictsc,dc=net" -W -H ldapi:/// -f addPassword.ldif

その後client1,2でhostapd系を全部再起動したのち、wpa_supplicantを実行

sudo wpa_supplicant -B -D wired -i eth1 -c ./wpa_supplicant.conf

FreeRADIUSのログには認証成功してそうなログが流れる。でもpingが通らない。なぜ??????

よく原因がわからないまま時間が来てしまったのでダメ元submitしました。合ってるかは結果くるまでわからない……

全体を通して

普通に社会人になってもやりたいなあ、でもISUCONと違って業務に寄ってる関係上、社会人が無双するゲームになっちゃいそうな気がして悩ましい…

おまけ

トラコンごはん情報です

1日目

2日目