Různé err v logu - jejich původ a závažnost? ... contract_valid.sh

Odpověď číslo 2 - v odkazu o naimportování certifikátu není uvedeno řešení či návod. Není mi jasné, proč chyba vzniká, žádný kejkle na routeru nedělám. Proč se to vyskytuje jen u mně ?

Na fóru jsem k tomuto problému sice něco našel, ale popis není user friendly, je tam jen cosi “naznačeno”. V Errata chyba není uvedena.

Ta doména záměrně běží se self-signed certifikátem.

curl https://api.turris.cz/firewall/turris-ipsets.gz.sign --cacert /etc/ssl/turris.pem -o /tmp/turris-ipsets.gz.sign
1 Like

Akce certifikátu úspěšná, druhý příkaz wget ale ne … druhý nerozumím tomu, proč tato akce neproběhne automaticky, proč to má dělat uživatel ?

Omezuje chyba turris-firewall-rules[]: (v63) Failed to download https://api.turris.cz/firewall/turris-ipsets.gz.sign
bezpečnost funkce routeru ? Nebo ten nestažená konfigurace nemá žádný vliv ?

root@Omnia:~# curl https://api.turris.cz/firewall/turris-ipsets.gz.sign --cacert /etc/ssl/turris.pem
-o /tmp/turris-ipsets.gz.sign
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1024  100  1024    0     0   7420      0 --:--:-- --:--:-- --:--:--  7420

root@Omnia:~# wget https://api.turris.cz/firewall/turris-ipsets.gz.sign -P /tmp/
--2019-02-01 19:50:24--  https://api.turris.cz/firewall/turris-ipsets.gz.sign
Resolving api.turris.cz... 217.31.192.101, 2001:1488:ac15:ff80::101
Connecting to api.turris.cz|217.31.192.101|:443... connected.
ERROR: cannot verify api.turris.cz's certificate, issued by 'emailAddress=michal.vaner@nic.cz,CN=Turris Emergency CA,OU=Labs,O=CZ.NIC,L=Prague,ST=Czech republic,C=CZ':
  Unable to locally verify the issuer's authority.
To connect to api.turris.cz insecurely, use `--no-check-certificate'.
root@Omnia:~#

U mě ten příkaz proběhl korektně.
Jinak jsem analyzoval skript z balíčku turris-firewall a je zapotřebí tyto certifikáty, máte je @JardaB v adresáři /etc/ssl?

/etc/ssl/turris-rules.pub
/etc/ssl/crl.pem
/etc/ssl/turris.pem

wget nebere certifikát turris.pem - to ani nemusí - turris-firewall používá ke stahování program curl.

Po restartu je v logu dosud nevídané

2019-02-01 19:50:05 info ucollect[14175]: Initializing emergency signal handlers
2019-02-01 19:50:05 info ucollect[14175]: Creating a main loop
2019-02-01 19:50:05 info ucollect[14175]: Creating uplink
2019-02-01 19:50:05 err ucollect[14175]: Can't load configuration of ucollect
2019-02-01 19:50:05 crit ucollect[14175]: No configuration available
2019-02-01 19:50:05 info ucollect[14188]: Initializing emergency signal handlers
2019-02-01 19:50:05 info ucollect[14188]: Creating a main loop
2019-02-01 19:50:05 info ucollect[14188]: Creating uplink
2019-02-01 19:50:05 err ucollect[14188]: Can't load configuration of ucollect

opakuje se to - zatím krátce

image

Nakopírovat sem ??

Nic nekopírovat - zatím.
Sestail jsem příkaz z turris-firewall, projde korektně?

curl --cacert /etc/ssl/turris.pem --crlfile /etc/ssl/crl.pem https://api.turris.cz/firewall/turris-ipsets.gz.sign -o /tmp/test2

schválně jsem soubor nazval test2, aby jsme viděli, vytvoření souboru.

EDIT1: Podle posledního screenu mě připadá, že máte zastaralé certifikáty.
EDIT2: a ještě jsem upravil příkaz, aby bylo vidět průběh na obrazovce.

EDIT3: já tedy mám nejnovější certifikáty k 15.1.2019 z verze 3.11.2

Podle mého jde o firewall pravidla definované společností nic.cz - takže pokud je mít budete, bude to o něco málo bezpečnější.

1 Like

Alebrz jsem kdysi udelal takovej fixer na crl.pem,

S dovolenim jsem pouzil ten oneliner a malinko ten puvodni scriptik obohatil a lehce upravil. Asi by to slo jinak, mozna i lepe. Asi to neni ani potreba a da se rucne zavolat prislusny prikaz, ale tak nejak jsem si chtel dat male vecerni cviceni …

pem_fix.sh
#!/bin/bash
initTime=$( date +%s ) ; export initTime
if [[ $# -eq 0 ]]  || [[ -z $1 ]] 
   then { echo "Missing or empty parameter, we stop here." ; echo "USAGE: ./pem_fix.sh [turris.pem|crl.pem]" ; exit 1 ; }
   else 
   case $1 in
   turris.pem)
        fileToFix="${1:-turris.pem}"
        fileLocation="/etc/ssl"
        refreshCmd=$( curl -s https://api.turris.cz/firewall/turris-ipsets.gz.sign --cacert /etc/ssl/turris.pem -o /tmp/turris-ipsets.gz.sign )
   ;;
   crl.pem)
        fileLocation="/tmp"
        fileToFix="${1:-crl.pem}"
        refreshCmd=$( get-api-crl )
   ;;
   *) { echo "Seems you did not provide correct filename." ; echo "USAGE: ./pem_fix.sh [turris.pem|crl.pem]" ; exit 1 ; }
   ;;
   esac
   cd $fileLocation || { echo "Can't access $fileLocation folder, we stop here." ; exit 1 ; }
   if [[ -r "$fileToFix" ]]
      then { fileTime=$( stat --format=%Y "$fileToFix" ) ; export fileTime ; }
           [ "$initTime" -gt "$fileTime" ] && echo "No need to refresh $fileToFix"
      else { echo -n "Refreshing $fileToFix ... " ; $refreshCmd ; export rc=$? ; }
           if [[ $rc -eq 0 ]] 
              then { fileTime=$( stat --format=%Y "$fileToFix" ) ; export fileTime ; [ "$fileTime" -gt "$initTime" ] && echo "DONE" ; }
                   [ "$fileTime" -gt "$initTime" ] && echo "File $fileToFix was refreshed."
              else { echo -n "FAILED" ; echo " with return code $rc" ; exit 1 ; }
           fi
   fi
fi

Pracuje správně

root@Omnia:~# curl --cacert /etc/ssl/turris.pem --crlfile /etc/ssl/crl.pem https://api.turris.cz/fire
wall/turris-ipsets.gz.sign -o /tmp/test2
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1024  100  1024    0     0   8062      0 --:--:-- --:--:-- --:--:--  8126
root@Omnia:~#

Tak toto proběhlo, zajimavé. Zkuste spustit skript, převzal jsem ho z cronu:
/usr/share/firewall/turris-download

u mě to vypadá takto:
root@TurrisOmnia:~# /usr/share/firewall/turris-download
root@TurrisOmnia:~#

v logu by to mělo napsat:
turris-firewall-rules[]: (v63) Setting turris-ipsets.gz c83b72d5b03454292e5000b3967bc350

Všechno v jeden čas:

  • Too many pings not answered on api.turris.cz:5679, reconnecting
  • Reconnecting to api.turris.cz:5679 now
  • Remote closed the uplink api.turris.cz:5679, reconnecting

Všechno v jeden čas:

Tak např.:
contract status stahuje toto: https://project.turris.cz/api/contract-valid.txt
registration code stahuje toto: https://api.turris.cz/challenge.cgi
zmíněné pravidla firewalu: https://api.turris.cz/firewall/turris-ipsets.gz.sign

To má takovou charakteristiku, že v tento okamžik, v tento čas Vám prostě nešel internet za WAN portem, všechny hlášky (až na pár vyjímek) se týkají stahování informaci z internetu v daném okamžiku.

Tak chyba Can't load configuration of ucollect trvala včera večer asi hodinu a půl a tím to skončilo.

Příkaz /usr/share/firewall/turris-download reaguje v terminálu dle předpovědi, ale nemá odezvu v logu.

Tam přetrvává chyba 2019-02-02 00:01:01 err turris-firewall-rules[]: (v63) Failed to download https://api.turris.cz/firewall/turris-ipsets.gz.sign

Podle vaší úvahy by mi každou celou hodinu nešel internet. Chybu Too many pings not answered on api.turris.cz: znám, ale například v aktuálním logu se nevyskytuje. Prohlídkou starých syslogů jsem zjistil, že se vyskytuje jen nahodile (některé dny), není to často a bývá to v rozmezí tak 10-15 minut po šesté hodině ráno.

Tři certifikát v /etc/ssl mám.

Ty tři chyby setrvávají - nestahuje se signatura ? pro firewall.

… server_uplink[]: Failed to download contract status
… server_uplink[]: Failed to get registration code
… turris-firewall-rules[]: (v63) Failed to download [https://api.turris.cz/firewall/turris-ipsets.gz.sign ](https://api.turris.cz/firewall/turris-ipsets.gz.sign)

Když pustíte ten skript, tak se v logu nic nenapíše? Mělo by to napsat buď “Failed to download…” nebo “Setting turris-ipsets.gz…”

EDIT: Jasně, nenapíše, protože si skript provádí kontrolu, jestli již pravidla nejsou stažena. Takže asi takto:

rm -rf /tmp/fw-rules
rm -rf /usr/share/firewall/turris-ipsets.gz
/usr/share/firewall/turris-download

a již by to mělo napsat v logu, že stahl nové definice.

root@Omnia:~# rm -rf /tmp/fw-rules
root@Omnia:~# rm -rf /usr/share/firewall/turris-ipsets.gz
root@Omnia:~# /usr/share/firewall/turris-download
root@Omnia:~#

Před konečným promptem trochu prodleva, jakože pracuje a následný výstup z logu

2019-02-02 10:01:44 notice turris-firewall-rules[]: (v63) Setting turris-ipsets.gz c83b72d5b03454292e5000b3967bc350

Proč se liší selhání routeru oproti kladnému výsledku manuálního postupu?

Ručně to tedy funguje, divné. Jestli to dělá každou hodinu, pak bude něco s cronem (možná i s DNS).
Zkuste v celou hodinu pustit příkazy ručně, aby jsme vyloučily DNS a pak by to už bylo jen v cronu.

Jinak jsem zjistil, co mají tyto chyby společné - spouštějí se skripty v celou hodinu a v tuto dobu nefunguje dotazování na url.

Jako že každou celou hodinu nefunguje DNS ? Ten cron zkusim, ale udivuje mne, že se k tomuto tématu nevyjádřil dosud někdo z týmu. Je to nefunkčnost zakladni funkce routeru.

A nemáte tam naplánovanou úlohu každou hodinu restart nějaké služby, která zapříčiní nefunkčnost inetu?

Prozatimně i byť na zkoušku vyeditujte naplánované úlohy a změňte časy, jestli to pomůže (místo první 0 dejte např. 2).

v /etc/cron.d/fw-rules to pak bude vypadat takto:

MAILTO=""
2 * * * * root /usr/share/firewall/turris-download
5 * * * * root /usr/share/firewall/turris