Cerbot erstellt kein Zertifikat

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
_ash
Beiträge: 1196
Registriert: 13.05.2005 12:35:02

Cerbot erstellt kein Zertifikat

Beitrag von _ash » 14.09.2022 16:27:01

Ich möchte für eine Domain ein LetsEncrypt SSL Zertifikat erstellen. Das funktioniert aber leider nicht. Auf dem Server ist kein Webserver installiert, daher verwende ich die Standalone Variante. Hier der Aufruf:

Code: Alles auswählen

# certbot certonly --standalone -d may.domain.de
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Requesting a certificate for may.domain.de
Performing the following challenges:
http-01 challenge for may.domain.de
Waiting for verification...
Challenge failed for domain may.domain.de
http-01 challenge for may.domain.de
Cleaning up challenges
Some challenges have failed.

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: may.domain.de
   Type:   connection
   Detail: 12.34.56.78: Fetching
   http://may.domain.de/.well-known/acme-challenge/vdWpJqC4bOXNv14bGRnudzEkFhI7nvE7Hsz6AXzjzH0:
   Connection refused

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address. Additionally, please check that
   your computer has a publicly routable IP address and that no
   firewalls are preventing the server from communicating with the
   client. If you're using the webroot plugin, you should also verify
   that you are serving files from the webroot path you provided.
In den Lofgiles steht Folgendes:

Code: Alles auswählen

2022-09-14 16:22:09,377:DEBUG:certbot._internal.error_handler:Calling registered functions
2022-09-14 16:22:09,378:INFO:certbot._internal.auth_handler:Cleaning up challenges
2022-09-14 16:22:09,378:DEBUG:certbot._internal.plugins.standalone:Stopping server at :::80...
2022-09-14 16:22:09,495:DEBUG:certbot._internal.log:Exiting abnormally:
Traceback (most recent call last):
  File "/usr/bin/certbot", line 33, in <module>
    sys.exit(load_entry_point('certbot==1.12.0', 'console_scripts', 'certbot')())
  File "/usr/lib/python3/dist-packages/certbot/main.py", line 15, in main
    return internal_main.main(cli_args)
  File "/usr/lib/python3/dist-packages/certbot/_internal/main.py", line 1413, in main
    return config.func(config, plugins)
  File "/usr/lib/python3/dist-packages/certbot/_internal/main.py", line 1293, in certonly
    lineage = _get_and_save_cert(le_client, config, domains, certname, lineage)
  File "/usr/lib/python3/dist-packages/certbot/_internal/main.py", line 134, in _get_and_save_cert
    lineage = le_client.obtain_and_enroll_certificate(domains, certname)
  File "/usr/lib/python3/dist-packages/certbot/_internal/client.py", line 441, in obtain_and_enroll_certificate
    cert, chain, key, _ = self.obtain_certificate(domains)
  File "/usr/lib/python3/dist-packages/certbot/_internal/client.py", line 374, in obtain_certificate
    orderr = self._get_order_and_authorizations(csr.data, self.config.allow_subset_of_names)
  File "/usr/lib/python3/dist-packages/certbot/_internal/client.py", line 421, in _get_order_and_authorizations
    authzr = self.auth_handler.handle_authorizations(orderr, best_effort)
  File "/usr/lib/python3/dist-packages/certbot/_internal/auth_handler.py", line 91, in handle_authorizations
    self._poll_authorizations(authzrs, max_retries, best_effort)
  File "/usr/lib/python3/dist-packages/certbot/_internal/auth_handler.py", line 180, in _poll_authorizations
    raise errors.AuthorizationError('Some challenges have failed.')
certbot.errors.AuthorizationError: Some challenges have failed.
2022-09-14 16:22:09,497:ERROR:certbot._internal.log:Some challenges have failed.
Und so sieht meine Firewall aus:

Code: Alles auswählen

# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N DOCKER
-N DOCKER-ISOLATION-STAGE-1
-N DOCKER-ISOLATION-STAGE-2
-N DOCKER-USER
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p icmp -m state --state NEW -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 20200 -j ACCEPT
-A INPUT -i ens3 -p udp -m state --state NEW,ESTABLISHED -m udp --dport 1194 -j ACCEPT
-A INPUT -i ens3 -p udp -m state --state ESTABLISHED -m udp --sport 53 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED -m tcp --sport 53 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED -m tcp --sport 80 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED -m tcp --sport 443 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: "
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -s 10.89.0.0/24 -i tun0 -o ens3 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FORWARD_denied: "
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --sport 20200 -j ACCEPT
-A OUTPUT -o ens3 -p udp -m state --state ESTABLISHED -m udp --sport 1194 -j ACCEPT
-A OUTPUT -o ens3 -p udp -m state --state NEW,ESTABLISHED -m udp --dport 53 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 53 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 80 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 443 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_OUTPUT_denied: "
-A OUTPUT -j REJECT --reject-with icmp-port-unreachable
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
In der Annahme, dass Certbot die Verbindung initiiert, sollten Port 80 und 443 offen sein.

Jemand eine Idee, warum das nicht geht?

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Cerbot erstellt kein Zertifikat

Beitrag von jeff84 » 14.09.2022 16:33:23

Dein IPtables akzeptiert keine neuen Verbindungen auf Port 80, sondern nur welche im State ESTABLISHED. Oder übersehe ich da gerade etwas?

Benutzeravatar
bluestar
Beiträge: 2336
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Cerbot erstellt kein Zertifikat

Beitrag von bluestar » 14.09.2022 16:39:47

_ash hat geschrieben: ↑ zum Beitrag ↑
14.09.2022 16:27:01
In der Annahme, dass Certbot die Verbindung initiiert, sollten Port 80 und 443 offen sein.
Die Annahme ist nicht 100% korrekt, zuerst baut Certbot eine Verbindung zu LetsEncrypt auf, danach baut LetsEncrypt eine Verbindung zu dem zu verifizierenden Web-Server auf.
Von daher schließe ich mich jeff84 an, du müsstest eingehende Verbindungen auf Port 80 und 443 erlauben.

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Cerbot erstellt kein Zertifikat

Beitrag von jeff84 » 14.09.2022 16:42:38

bluestar hat geschrieben: ↑ zum Beitrag ↑
14.09.2022 16:39:47
Die Annahme ist nicht 100% korrekt, zuerst baut Certbot eine Verbindung zu LetsEncrypt auf, danach baut LetsEncrypt eine Verbindung zu dem zu verifizierenden Web-Server auf.
Von daher schließe ich mich jeff84 an, du müsstest eingehende Verbindungen auf Port 80 und 443 erlauben.
Ach jetzt verstehe ich, wie die Annahme gemeint war, ja.
Auf TCP-Verbindungsebene ist das eine neue Verbindung, die der Verifizierungsserver von außen in Richtung Certbot aufbaut. Das wird zwar von Certbot ausgehend mit nem API-Call getriggert, ist aber nicht die gleiche TCP-Verbindung.

_ash
Beiträge: 1196
Registriert: 13.05.2005 12:35:02

Re: Cerbot erstellt kein Zertifikat

Beitrag von _ash » 14.09.2022 18:32:41

Ich habe Verbindungen auf Port 80 und 443 jetzt zugelassen:

Code: Alles auswählen

# iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -s 127.0.0.0/8 ! -i lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p icmp -m state --state NEW -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p icmp -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 20200 -j ACCEPT
-A INPUT -i ens3 -p udp -m state --state NEW,ESTABLISHED -m udp --dport 1194 -j ACCEPT
-A INPUT -i ens3 -p udp -m state --state ESTABLISHED -m udp --sport 53 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state ESTABLISHED -m tcp --sport 53 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --sport 80 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --sport 443 -j ACCEPT
-A INPUT -i tun0 -j ACCEPT
-A INPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_INPUT_denied: "
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i tun0 -j ACCEPT
-A FORWARD -s 10.89.0.0/24 -i tun0 -o ens3 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -m limit --limit 3/min -j LOG --log-prefix "iptables_FORWARD_denied: "
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --sport 20200 -j ACCEPT
-A OUTPUT -o ens3 -p udp -m state --state ESTABLISHED -m udp --sport 1194 -j ACCEPT
-A OUTPUT -o ens3 -p udp -m state --state NEW,ESTABLISHED -m udp --dport 53 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 53 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 80 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 443 -j ACCEPT
-A OUTPUT -o tun0 -j ACCEPT
-A OUTPUT -m limit --limit 3/min -j LOG --log-prefix "iptables_OUTPUT_denied: "
-A OUTPUT -j REJECT --reject-with icmp-port-unreachable
Allerdings bekomme ich von Certbot den gleichen Fehler. Ideen?

Benutzeravatar
bluestar
Beiträge: 2336
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Cerbot erstellt kein Zertifikat

Beitrag von bluestar » 14.09.2022 19:36:34

_ash hat geschrieben: ↑ zum Beitrag ↑
14.09.2022 18:32:41
Allerdings bekomme ich von Certbot den gleichen Fehler. Ideen?
Zum Testen die Firewall komplett abschalten.

jeff84
Beiträge: 324
Registriert: 15.07.2009 13:32:36

Re: Cerbot erstellt kein Zertifikat

Beitrag von jeff84 » 15.09.2022 09:07:59

Dein Problem dürfte sein, dass du ausgehend auch nur auf Zielport 80 zulässt. So eingehende http-Verbindungen haben aber nicht zwangsläufig einen Source-Port von 80, sondern einen recht beliebigen.
Ich handhabe das immer so, dass ich Ein- und Ausgehend alle Verbindungen die ESTABLISHED und RELATED sind zulasse und nur bei neuen Verbindungen (NEW) anhand des Protocols und des Ports entscheide, ob die zugelassen werden.

Also ein

Code: Alles auswählen

-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
relativ weit oben in der Chain. Und dann die anderen Regeln für neue Verbindungen.

Benutzeravatar
bluestar
Beiträge: 2336
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Re: Cerbot erstellt kein Zertifikat

Beitrag von bluestar » 15.09.2022 10:34:37

_ash hat geschrieben: ↑ zum Beitrag ↑
14.09.2022 18:32:41

Code: Alles auswählen

-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --sport 80 -j ACCEPT
-A INPUT -i ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --sport 443 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 80 -j ACCEPT
-A OUTPUT -o ens3 -p tcp -m state --state NEW,ESTABLISHED -m tcp --dport 443 -j ACCEPT
bei INPUT musst du --dport und bei OUTPUT --sport verwenden um Certbot als internen Webserver zu verwenden, alternativ kann ich dir empfehlen auf die DNS-Challenge von LetsEncrypt umzusteigen, damit ist das Handling deutlich einfacher und du musst die Ports von extern nicht öffnen.

Antworten