aktueller Umbaustatus
This commit is contained in:
127
basic_setup/awsiam.sh
Executable file
127
basic_setup/awsiam.sh
Executable file
@@ -0,0 +1,127 @@
|
||||
#!/bin/bash
|
||||
# awsiam.sh - Erstellt einen IAM-Benutzer für Amazon SES mit SMTP-Zugangsdaten
|
||||
|
||||
# Überprüfen, ob die Domain-Variable gesetzt ist
|
||||
if [ -z "$DOMAIN_NAME" ]; then
|
||||
echo "Fehler: DOMAIN_NAME ist nicht gesetzt."
|
||||
echo "Bitte setzen Sie die Variable mit: export DOMAIN_NAME='IhreDomain.de'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Konfiguration
|
||||
AWS_REGION=${AWS_REGION:-"us-east-2"}
|
||||
USER_NAME="${DOMAIN_NAME//./-}-ses-user" # Ersetzt Punkte durch Bindestriche für validen IAM-Username
|
||||
NODE_SCRIPT_PATH="./generate_ses_smtp_password.js"
|
||||
OUTPUT_FILE="${DOMAIN_NAME//./_}_ses_credentials.txt" # Sichere Dateibenennung
|
||||
|
||||
# Prüfen, ob das Node.js-Script existiert
|
||||
if [ ! -f "$NODE_SCRIPT_PATH" ]; then
|
||||
echo "Fehler: Das Node.js-Script '$NODE_SCRIPT_PATH' wurde nicht gefunden."
|
||||
echo "Bitte stelle sicher, dass das Script im angegebenen Pfad existiert."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "=== IAM-Benutzer für SES SMTP-Zugang erstellen ==="
|
||||
echo "Domain: $DOMAIN_NAME"
|
||||
echo "Region: $AWS_REGION"
|
||||
echo "IAM-Benutzername: $USER_NAME"
|
||||
|
||||
# --------------------------
|
||||
# IAM-User erstellen
|
||||
# --------------------------
|
||||
echo "Erstelle IAM-User: $USER_NAME"
|
||||
aws iam create-user --user-name $USER_NAME
|
||||
|
||||
# Benutzerdefinierte Policy für SES-Sendeberechtigungen erstellen
|
||||
POLICY_NAME="${USER_NAME}-SendRawEmailPolicy"
|
||||
POLICY_DOCUMENT='{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Action": "ses:SendRawEmail",
|
||||
"Resource": "*"
|
||||
}
|
||||
]
|
||||
}'
|
||||
|
||||
echo "Erstelle benutzerdefinierte Policy für SES SendRawEmail"
|
||||
POLICY_ARN=$(aws iam create-policy \
|
||||
--policy-name $POLICY_NAME \
|
||||
--policy-document "$POLICY_DOCUMENT" \
|
||||
--query 'Policy.Arn' \
|
||||
--output text)
|
||||
|
||||
echo "Hänge Policy an: $POLICY_ARN"
|
||||
aws iam attach-user-policy \
|
||||
--user-name $USER_NAME \
|
||||
--policy-arn $POLICY_ARN
|
||||
|
||||
# Access Key und Secret Key für den User erstellen
|
||||
echo "Erstelle Access Key für den User: $USER_NAME"
|
||||
KEY_OUTPUT=$(aws iam create-access-key --user-name $USER_NAME)
|
||||
|
||||
# Keys ausgeben und in Variablen speichern
|
||||
echo "Zugriffsschlüssel wurden erstellt. Bitte sicher aufbewahren:"
|
||||
echo "$KEY_OUTPUT" | jq .
|
||||
|
||||
ACCESS_KEY=$(echo "$KEY_OUTPUT" | jq -r .AccessKey.AccessKeyId)
|
||||
SECRET_KEY=$(echo "$KEY_OUTPUT" | jq -r .AccessKey.SecretAccessKey)
|
||||
|
||||
echo "ACCESS_KEY: $ACCESS_KEY"
|
||||
echo "SECRET_KEY: $SECRET_KEY"
|
||||
|
||||
echo "WICHTIG: Speichere den Secret Key jetzt, da er später nicht mehr abgerufen werden kann!"
|
||||
|
||||
# --------------------------
|
||||
# SMTP Passwort generieren
|
||||
# --------------------------
|
||||
echo -e "\nGeneriere SMTP-Passwort für Region $AWS_REGION..."
|
||||
|
||||
# Führe das Node.js-Script aus, um das SMTP-Passwort zu generieren
|
||||
SMTP_PASSWORD=$(node "$NODE_SCRIPT_PATH" "$SECRET_KEY" "$AWS_REGION")
|
||||
|
||||
# Prüfen, ob die Ausführung erfolgreich war
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Fehler bei der Generierung des SMTP-Passworts. Bitte überprüfe das Node.js-Script."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# SMTP-Benutzername ist der Access Key
|
||||
SMTP_USERNAME="$ACCESS_KEY"
|
||||
|
||||
# Ausgabe der SMTP-Anmeldeinformationen
|
||||
echo -e "\nSMTP-Anmeldeinformationen für Amazon SES in Region $AWS_REGION:"
|
||||
echo "--------------------------------------------------------------"
|
||||
echo "SMTP-Server: email-smtp.$AWS_REGION.amazonaws.com"
|
||||
echo "SMTP-Port: 587 (TLS) oder 465 (SSL)"
|
||||
echo "SMTP-Benutzername: $SMTP_USERNAME"
|
||||
echo "SMTP-Passwort: $SMTP_PASSWORD"
|
||||
|
||||
# Speichere die Anmeldeinformationen in einer Datei
|
||||
echo -e "\nSpeichere SMTP-Anmeldeinformationen in $OUTPUT_FILE"
|
||||
cat > "$OUTPUT_FILE" << EOF
|
||||
DOMAIN_NAME: $DOMAIN_NAME
|
||||
SMTP-Server: email-smtp.$AWS_REGION.amazonaws.com
|
||||
SMTP-Port: 587 (TLS) oder 465 (SSL)
|
||||
SMTP-Benutzername: $SMTP_USERNAME
|
||||
SMTP-Passwort: $SMTP_PASSWORD
|
||||
|
||||
IAM-Benutzer: $USER_NAME
|
||||
Access Key ID: $ACCESS_KEY
|
||||
Secret Access Key: $SECRET_KEY
|
||||
EOF
|
||||
|
||||
chmod 600 "$OUTPUT_FILE" # Nur für den Besitzer lesbar machen
|
||||
|
||||
# Format für .env-Datei
|
||||
echo -e "\nFür .env-Datei:"
|
||||
echo "AWS_SES_SMTP_USERNAME=$SMTP_USERNAME"
|
||||
echo "AWS_SES_SMTP_PASSWORD=$SMTP_PASSWORD"
|
||||
echo "AWS_SES_SMTP_HOST=email-smtp.$AWS_REGION.amazonaws.com"
|
||||
echo "AWS_SES_SMTP_PORT=587"
|
||||
|
||||
echo -e "\nHinweise:"
|
||||
echo "1. Die SMTP-Anmeldeinformationen wurden in $OUTPUT_FILE gespeichert."
|
||||
echo "2. Verwenden Sie diese SMTP-Anmeldeinformationen in Ihrer E-Mail-Anwendung oder Ihrem E-Mail-Server."
|
||||
echo "3. Der IAM-Benutzer hat nur die Berechtigung, E-Mails über SES zu senden."
|
||||
85
basic_setup/awss3.sh
Executable file
85
basic_setup/awss3.sh
Executable file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
# awss3.sh - Erstellt einen S3-Bucket für Amazon SES E-Mail-Speicherung
|
||||
|
||||
# Überprüfen, ob die Domain-Variable gesetzt ist
|
||||
if [ -z "$DOMAIN_NAME" ]; then
|
||||
echo "Fehler: DOMAIN_NAME ist nicht gesetzt."
|
||||
echo "Bitte setzen Sie die Variable mit: export DOMAIN_NAME='IhreDomain.de'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Konfiguration
|
||||
AWS_REGION=${AWS_REGION:-"us-east-2"}
|
||||
EMAIL_PREFIX=${EMAIL_PREFIX:-"emails/"}
|
||||
S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}')
|
||||
|
||||
echo "=== S3 Bucket Configuration für $DOMAIN_NAME ==="
|
||||
echo "Region: $AWS_REGION"
|
||||
echo "Bucket-Name: $S3_BUCKET_NAME"
|
||||
echo "E-Mail-Präfix: $EMAIL_PREFIX"
|
||||
|
||||
# ------------------------
|
||||
# S3 Bucket erstellen
|
||||
# ------------------------
|
||||
echo "S3 Bucket erstellen..."
|
||||
aws s3api create-bucket \
|
||||
--bucket ${S3_BUCKET_NAME} \
|
||||
--region ${AWS_REGION} \
|
||||
--create-bucket-configuration LocationConstraint=${AWS_REGION}
|
||||
|
||||
# Öffentlichen Zugriff blockieren
|
||||
echo "Öffentlichen Zugriff blockieren..."
|
||||
aws s3api put-public-access-block \
|
||||
--bucket ${S3_BUCKET_NAME} \
|
||||
--public-access-block-configuration "BlockPublicAcls=true,IgnorePublicAcls=true,BlockPublicPolicy=true,RestrictPublicBuckets=true"
|
||||
|
||||
# Lebenszyklus-Konfiguration hinzufügen
|
||||
echo "Lebenszyklus-Konfiguration hinzufügen (E-Mails werden nach 90 Tagen gelöscht)..."
|
||||
aws s3api put-bucket-lifecycle-configuration \
|
||||
--bucket ${S3_BUCKET_NAME} \
|
||||
--lifecycle-configuration '{
|
||||
"Rules": [
|
||||
{
|
||||
"ID": "DeleteOldEmails",
|
||||
"Status": "Enabled",
|
||||
"Expiration": {
|
||||
"Days": 90
|
||||
},
|
||||
"Filter": {
|
||||
"Prefix": ""
|
||||
}
|
||||
}
|
||||
]
|
||||
}'
|
||||
|
||||
echo "S3 Bucket Policy hinzufügen für SES-Zugriff..."
|
||||
aws s3api put-bucket-policy \
|
||||
--bucket ${S3_BUCKET_NAME} \
|
||||
--policy '{
|
||||
"Version": "2012-10-17",
|
||||
"Statement": [
|
||||
{
|
||||
"Effect": "Allow",
|
||||
"Principal": {
|
||||
"Service": "ses.amazonaws.com"
|
||||
},
|
||||
"Action": [
|
||||
"s3:PutObject",
|
||||
"s3:GetBucketLocation",
|
||||
"s3:ListBucket"
|
||||
],
|
||||
"Resource": [
|
||||
"arn:aws:s3:::'${S3_BUCKET_NAME}'",
|
||||
"arn:aws:s3:::'${S3_BUCKET_NAME}'/*"
|
||||
]
|
||||
}
|
||||
]
|
||||
}'
|
||||
|
||||
echo "S3 Bucket $S3_BUCKET_NAME wurde erfolgreich erstellt und konfiguriert."
|
||||
echo "Bucket-ARN: arn:aws:s3:::$S3_BUCKET_NAME"
|
||||
|
||||
# Exportiere Variablen für andere Scripte
|
||||
echo
|
||||
echo "Für die Verwendung in den anderen Scripten setzen Sie:"
|
||||
echo "export S3_BUCKET_NAME=$S3_BUCKET_NAME"
|
||||
155
basic_setup/awsses.sh
Executable file
155
basic_setup/awsses.sh
Executable file
@@ -0,0 +1,155 @@
|
||||
#!/bin/bash
|
||||
# awsses.sh - Konfiguriert Amazon SES für eine Domain und erstellt eine Receipt Rule
|
||||
|
||||
# Überprüfen, ob die Domain-Variable gesetzt ist
|
||||
if [ -z "$DOMAIN_NAME" ]; then
|
||||
echo "Fehler: DOMAIN_NAME ist nicht gesetzt."
|
||||
echo "Bitte setzen Sie die Variable mit: export DOMAIN_NAME='IhreDomain.de'"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Überprüfen, ob S3_BUCKET_NAME gesetzt ist
|
||||
if [ -z "$S3_BUCKET_NAME" ]; then
|
||||
echo "Warnung: S3_BUCKET_NAME ist nicht gesetzt."
|
||||
echo "Wird automatisch aus DOMAIN_NAME generiert, verwenden Sie idealerweise zuerst awss3.sh."
|
||||
S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}')
|
||||
echo "Generierter Bucket-Name: $S3_BUCKET_NAME"
|
||||
fi
|
||||
|
||||
# Konfiguration
|
||||
AWS_REGION=${AWS_REGION:-"us-east-2"}
|
||||
EMAIL_PREFIX=${EMAIL_PREFIX:-""}
|
||||
RULE_NAME="store-$(echo "$DOMAIN_NAME" | tr '.' '-')-to-s3"
|
||||
|
||||
echo "=== SES Konfiguration für $DOMAIN_NAME ==="
|
||||
echo "Region: $AWS_REGION"
|
||||
echo "S3 Bucket: $S3_BUCKET_NAME"
|
||||
echo "Receipt Rule Name: $RULE_NAME"
|
||||
|
||||
# ------------------------
|
||||
# SES Domain-Identität erstellen
|
||||
# ------------------------
|
||||
echo "SES Domain-Identität erstellen..."
|
||||
IDENTITY_RESULT=$(aws sesv2 create-email-identity \
|
||||
--email-identity ${DOMAIN_NAME} \
|
||||
--region ${AWS_REGION})
|
||||
|
||||
echo "Identity erstellt. Überprüfen Sie die DNS-Einträge für die Domain-Verifizierung."
|
||||
echo "$IDENTITY_RESULT" | jq .
|
||||
|
||||
# DKIM-Signierung aktivieren
|
||||
echo "DKIM-Signierung aktivieren..."
|
||||
aws sesv2 put-email-identity-dkim-attributes \
|
||||
--email-identity ${DOMAIN_NAME} \
|
||||
--signing-enabled \
|
||||
--region ${AWS_REGION}
|
||||
|
||||
# Mail-From-Domain konfigurieren
|
||||
echo "Mail-From-Domain konfigurieren..."
|
||||
aws sesv2 put-email-identity-mail-from-attributes \
|
||||
--email-identity ${DOMAIN_NAME} \
|
||||
--mail-from-domain "mail.${DOMAIN_NAME}" \
|
||||
--behavior-on-mx-failure USE_DEFAULT_VALUE \
|
||||
--region ${AWS_REGION}
|
||||
|
||||
# Überprüfen, ob der Rule Set existiert, sonst erstellen
|
||||
echo "Überprüfe oder erstelle Receipt Rule Set..."
|
||||
RULESET_EXISTS=$(aws ses describe-receipt-rule-sets --region ${AWS_REGION} | jq -r '.RuleSets[] | select(.Name == "bizmatch-ruleset") | .Name')
|
||||
|
||||
if [ -z "$RULESET_EXISTS" ]; then
|
||||
echo "Receipt Rule Set 'bizmatch-ruleset' existiert nicht, wird erstellt..."
|
||||
aws ses create-receipt-rule-set --rule-set-name "bizmatch-ruleset" --region ${AWS_REGION}
|
||||
else
|
||||
echo "Receipt Rule Set 'bizmatch-ruleset' existiert bereits."
|
||||
fi
|
||||
|
||||
# Receipt Rule erstellen
|
||||
echo "Receipt Rule für E-Mail-Empfang erstellen..."
|
||||
aws ses create-receipt-rule --rule-set-name "bizmatch-ruleset" --rule '{
|
||||
"Name": "'"${RULE_NAME}"'",
|
||||
"Enabled": true,
|
||||
"ScanEnabled": true,
|
||||
"Actions": [{
|
||||
"S3Action": {
|
||||
"BucketName": "'"${S3_BUCKET_NAME}"'",
|
||||
"ObjectKeyPrefix": "'"${EMAIL_PREFIX}"'"
|
||||
}
|
||||
}],
|
||||
"TlsPolicy": "Require",
|
||||
"Recipients": ["'"${DOMAIN_NAME}"'"]
|
||||
}' --region ${AWS_REGION}
|
||||
|
||||
# Prüfen, ob der Rule Set aktiv ist
|
||||
ACTIVE_RULESET=$(aws ses describe-active-receipt-rule-set --region ${AWS_REGION} | jq -r '.Metadata.Name')
|
||||
|
||||
if [ "$ACTIVE_RULESET" != "bizmatch-ruleset" ]; then
|
||||
echo "Aktiviere Rule Set 'bizmatch-ruleset'..."
|
||||
aws ses set-active-receipt-rule-set --rule-set-name "bizmatch-ruleset" --region ${AWS_REGION}
|
||||
else
|
||||
echo "Rule Set 'bizmatch-ruleset' ist bereits aktiv."
|
||||
fi
|
||||
|
||||
# ------------------------
|
||||
# Lambda-Funktion mit SES verknüpfen
|
||||
# ------------------------
|
||||
echo "Verknüpfe Lambda-Funktion 'ses-to-sqs' mit SES..."
|
||||
|
||||
# Lambda ARN ermitteln
|
||||
LAMBDA_ARN=$(aws lambda get-function \
|
||||
--function-name ses-to-sqs \
|
||||
--region ${AWS_REGION} \
|
||||
--query 'Configuration.FunctionArn' \
|
||||
--output text)
|
||||
|
||||
if [ -z "$LAMBDA_ARN" ]; then
|
||||
echo "FEHLER: Lambda-Funktion 'ses-to-sqs' nicht gefunden!"
|
||||
echo "Bitte zuerst Lambda-Funktion deployen."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Lambda ARN: $LAMBDA_ARN"
|
||||
|
||||
# SES Permission für Lambda hinzufügen (falls noch nicht vorhanden)
|
||||
echo "Füge SES-Berechtigung zur Lambda-Funktion hinzu..."
|
||||
aws lambda add-permission \
|
||||
--function-name ses-to-sqs \
|
||||
--statement-id "AllowSESInvoke-${DOMAIN_NAME//./}" \
|
||||
--action "lambda:InvokeFunction" \
|
||||
--principal ses.amazonaws.com \
|
||||
--source-account $(aws sts get-caller-identity --query Account --output text) \
|
||||
--region ${AWS_REGION} 2>/dev/null || echo "Permission bereits vorhanden"
|
||||
|
||||
# Receipt Rule UPDATE: Lambda Action hinzufügen
|
||||
echo "Aktualisiere Receipt Rule mit Lambda Action..."
|
||||
aws ses update-receipt-rule --rule-set-name "bizmatch-ruleset" --rule '{
|
||||
"Name": "'"${RULE_NAME}"'",
|
||||
"Enabled": true,
|
||||
"ScanEnabled": true,
|
||||
"Actions": [
|
||||
{
|
||||
"S3Action": {
|
||||
"BucketName": "'"${S3_BUCKET_NAME}"'",
|
||||
"ObjectKeyPrefix": "'"${EMAIL_PREFIX}"'"
|
||||
}
|
||||
},
|
||||
{
|
||||
"LambdaAction": {
|
||||
"FunctionArn": "'"${LAMBDA_ARN}"'",
|
||||
"InvocationType": "Event"
|
||||
}
|
||||
}
|
||||
],
|
||||
"TlsPolicy": "Require",
|
||||
"Recipients": ["'"${DOMAIN_NAME}"'"]
|
||||
}' --region ${AWS_REGION}
|
||||
|
||||
echo "✅ Lambda-Funktion erfolgreich mit SES verknüpft!"
|
||||
|
||||
echo "SES-Konfiguration für $DOMAIN_NAME abgeschlossen."
|
||||
echo
|
||||
echo "WICHTIG: Überprüfen Sie die Ausgabe oben für DNS-Einträge, die Sie bei Ihrem DNS-Provider setzen müssen:"
|
||||
echo "1. DKIM-Einträge (3 CNAME-Einträge)"
|
||||
echo "2. MAIL FROM MX und TXT-Einträge"
|
||||
echo "3. SPF-Eintrag (TXT): v=spf1 include:amazonses.com ~all"
|
||||
echo
|
||||
echo "Nach dem Setzen der DNS-Einträge kann es bis zu 72 Stunden dauern, bis die Verifizierung abgeschlossen ist."
|
||||
160
basic_setup/cloudflareDns.sh
Executable file
160
basic_setup/cloudflareDns.sh
Executable file
@@ -0,0 +1,160 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Cloudflare API-Konfiguration
|
||||
# Setze deine API-Schlüssel und Zone-ID als Umgebungsvariablen oder ersetze sie direkt
|
||||
|
||||
# CF_ZONE_ID="1b7756cee93ed8ba8c05bdc3cb0a5da8" # Die Zone-ID deiner Domain bei Cloudflare
|
||||
AWS_REGION="us-east-2" # AWS-Region
|
||||
if [ -z "$DOMAIN_NAME" ]; then
|
||||
echo "Fehler: DOMAIN_NAME ist nicht gesetzt."
|
||||
echo "Bitte setzen Sie die Variable mit: export DOMAIN_NAME='IhreDomain.de'"
|
||||
exit 1 # Skript mit Fehlercode beenden
|
||||
fi
|
||||
# Überprüfen, ob der erforderliche API-Token gesetzt ist
|
||||
if [ -z "$CF_API_TOKEN" ]; then
|
||||
echo "Fehler: Bitte setze CF_API_TOKEN als Umgebungsvariable oder im Skript."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Zone ID basierend auf Domain-Namen abrufen
|
||||
echo "Zone ID für $DOMAIN_NAME abrufen..."
|
||||
ZONE_RESPONSE=$(curl -s -X GET "https://api.cloudflare.com/client/v4/zones?name=$DOMAIN_NAME" \
|
||||
-H "Authorization: Bearer $CF_API_TOKEN" \
|
||||
-H "Content-Type: application/json")
|
||||
|
||||
# Überprüfen, ob die Antwort erfolgreich war
|
||||
if [ "$(echo $ZONE_RESPONSE | jq -r '.success')" != "true" ]; then
|
||||
echo "Fehler beim Abrufen der Zone ID:"
|
||||
echo $ZONE_RESPONSE | jq .
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Zone ID extrahieren
|
||||
CF_ZONE_ID=$(echo $ZONE_RESPONSE | jq -r '.result[0].id')
|
||||
|
||||
# Überprüfen, ob eine Zone ID gefunden wurde
|
||||
if [ -z "$CF_ZONE_ID" ] || [ "$CF_ZONE_ID" = "null" ]; then
|
||||
echo "Keine Zone ID für $DOMAIN_NAME gefunden. Bitte stelle sicher, dass die Domain bei Cloudflare registriert ist."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Zone ID für $DOMAIN_NAME: $CF_ZONE_ID"
|
||||
|
||||
# Hilfsfunktion für DNS-Einträge anlegen
|
||||
create_dns_record() {
|
||||
local TYPE=$1
|
||||
local NAME=$2
|
||||
local CONTENT=$3
|
||||
local PROXIED=$4
|
||||
local TTL=$5
|
||||
local PRIORITY=$6 # Neu: MX-Priority
|
||||
|
||||
# Standardwerte für Proxied und TTL setzen, falls nicht angegeben
|
||||
if [ -z "$PROXIED" ]; then
|
||||
PROXIED="false"
|
||||
fi
|
||||
|
||||
if [ -z "$TTL" ]; then
|
||||
TTL=3600 # 1 Stunde
|
||||
fi
|
||||
|
||||
echo "Erstelle $TYPE-Eintrag für $NAME mit Inhalt $CONTENT..."
|
||||
|
||||
# Json Payload vorbereiten abhängig vom Record-Typ
|
||||
local JSON_DATA=""
|
||||
|
||||
if [ "$TYPE" = "MX" ]; then
|
||||
# Bei MX-Einträgen müssen wir die Priority separat angeben
|
||||
if [ -z "$PRIORITY" ]; then
|
||||
PRIORITY=10 # Standard-Priority, falls nicht angegeben
|
||||
fi
|
||||
|
||||
JSON_DATA="{
|
||||
\"type\": \"$TYPE\",
|
||||
\"name\": \"$NAME\",
|
||||
\"content\": \"$CONTENT\",
|
||||
\"ttl\": $TTL,
|
||||
\"priority\": $PRIORITY,
|
||||
\"proxied\": $PROXIED
|
||||
}"
|
||||
elif [ "$TYPE" = "TXT" ]; then
|
||||
# Bei TXT-Einträgen müssen wir sicherstellen, dass der Inhalt in Anführungszeichen steht
|
||||
# Aber Anführungszeichen innerhalb von JSON müssen escaped werden
|
||||
# Wir entfernen zuerst alle vorhandenen Anführungszeichen und fügen sie dann korrekt hinzu
|
||||
CONTENT=$(echo "$CONTENT" | sed 's/"//g')
|
||||
|
||||
JSON_DATA="{
|
||||
\"type\": \"$TYPE\",
|
||||
\"name\": \"$NAME\",
|
||||
\"content\": \"\\\"$CONTENT\\\"\",
|
||||
\"ttl\": $TTL,
|
||||
\"proxied\": $PROXIED
|
||||
}"
|
||||
else
|
||||
# Für alle anderen Record-Typen (z.B. CNAME)
|
||||
JSON_DATA="{
|
||||
\"type\": \"$TYPE\",
|
||||
\"name\": \"$NAME\",
|
||||
\"content\": \"$CONTENT\",
|
||||
\"ttl\": $TTL,
|
||||
\"proxied\": $PROXIED
|
||||
}"
|
||||
fi
|
||||
|
||||
# API-Aufruf an Cloudflare
|
||||
curl -s -X POST "https://api.cloudflare.com/client/v4/zones/$CF_ZONE_ID/dns_records" \
|
||||
-H "Authorization: Bearer $CF_API_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data "$JSON_DATA" | jq .
|
||||
}
|
||||
|
||||
# DKIM-Einträge abrufen und bei Cloudflare eintragen
|
||||
echo "DKIM-Tokens abrufen von AWS SES..."
|
||||
DKIM_TOKENS=$(aws ses get-identity-dkim-attributes \
|
||||
--identities ${DOMAIN_NAME} \
|
||||
--region ${AWS_REGION} \
|
||||
--query "DkimAttributes.\"${DOMAIN_NAME}\".DkimTokens" \
|
||||
--output text)
|
||||
|
||||
# Überprüfen, ob DKIM-Tokens abgerufen wurden
|
||||
if [ -z "$DKIM_TOKENS" ]; then
|
||||
echo "Fehler: Konnte DKIM-Tokens nicht abrufen. Ist die Domain bei AWS SES verifiziert?"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Domain-Verifizierungstoken abrufen
|
||||
VERIFICATION_TOKEN=$(aws ses get-identity-verification-attributes \
|
||||
--identities ${DOMAIN_NAME} \
|
||||
--region ${AWS_REGION} \
|
||||
--query "VerificationAttributes.\"${DOMAIN_NAME}\".VerificationToken" \
|
||||
--output text)
|
||||
|
||||
# DKIM-Einträge anlegen
|
||||
echo "DKIM-Einträge anlegen bei Cloudflare..."
|
||||
for TOKEN in ${DKIM_TOKENS}; do
|
||||
create_dns_record "CNAME" "${TOKEN}._domainkey.${DOMAIN_NAME}" "${TOKEN}.dkim.amazonses.com" "false" 3600
|
||||
done
|
||||
|
||||
# Domain-Verifizierungs-TXT-Eintrag anlegen
|
||||
echo "Domain-Verifizierungs-TXT-Eintrag anlegen bei Cloudflare..."
|
||||
create_dns_record "TXT" "_amazonses.${DOMAIN_NAME}" "${VERIFICATION_TOKEN}" "false" 3600
|
||||
|
||||
# MX-Einträge anlegen
|
||||
echo "MX-Einträge anlegen bei Cloudflare..."
|
||||
create_dns_record "MX" "${DOMAIN_NAME}" "inbound-smtp.${AWS_REGION}.amazonaws.com" "false" 3600 10
|
||||
create_dns_record "MX" "mail.${DOMAIN_NAME}" "feedback-smtp.${AWS_REGION}.amazonses.com" "false" 3600 10
|
||||
|
||||
# CNAME für mail.{Domain} anlegen
|
||||
echo "CNAME für mail.${DOMAIN_NAME} anlegen bei Cloudflare..."
|
||||
create_dns_record "CNAME" "imap.${DOMAIN_NAME}" "${DOMAIN_NAME}" "false" 3600
|
||||
|
||||
# SPF-Eintrag anlegen
|
||||
echo "SPF-Eintrag anlegen bei Cloudflare..."
|
||||
create_dns_record "TXT" "mail.${DOMAIN_NAME}" "v=spf1 include:amazonses.com ~all" "false" 3600
|
||||
|
||||
# DMARC-Eintrag anlegen
|
||||
echo "DMARC-Eintrag anlegen bei Cloudflare..."
|
||||
create_dns_record "TXT" "_dmarc.${DOMAIN_NAME}" "v=DMARC1; p=quarantine; pct=100; rua=mailto:postmaster@${DOMAIN_NAME}" "false" 3600
|
||||
|
||||
echo "DNS-Einrichtung abgeschlossen."
|
||||
echo "Es kann bis zu 72 Stunden dauern, bis AWS SES die Domain verifiziert hat."
|
||||
38
basic_setup/setup_email_domain.sh
Executable file
38
basic_setup/setup_email_domain.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/bin/bash
|
||||
# setup_email_domain.sh - Ein Wrapper-Script, das alle drei Skripte in der richtigen Reihenfolge ausführt
|
||||
|
||||
# Überprüfen, ob die Domain-Variable gesetzt ist
|
||||
if [ -z "$1" ]; then
|
||||
echo "Fehler: Keine Domain angegeben."
|
||||
echo "Verwendung: ./setup_email_domain.sh domain.de [region]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
DOMAIN_NAME=$1
|
||||
AWS_REGION=${2:-"us-east-2"}
|
||||
|
||||
# Variablen exportieren
|
||||
export DOMAIN_NAME
|
||||
export AWS_REGION
|
||||
|
||||
echo "=== AWS E-Mail-Infrastruktur für $DOMAIN_NAME einrichten ==="
|
||||
echo "AWS-Region: $AWS_REGION"
|
||||
echo
|
||||
|
||||
# Skripte nacheinander ausführen
|
||||
echo "1. S3-Bucket erstellen..."
|
||||
./awss3.sh
|
||||
echo
|
||||
|
||||
echo "2. SES-Konfiguration einrichten..."
|
||||
export S3_BUCKET_NAME=$(echo "$DOMAIN_NAME" | tr '.' '-' | awk '{print $0 "-emails"}')
|
||||
./awsses.sh
|
||||
echo
|
||||
|
||||
echo "3. IAM-Benutzer und SMTP-Zugangsdaten erstellen..."
|
||||
./awsiam.sh
|
||||
echo
|
||||
|
||||
echo "=== Setup abgeschlossen ==="
|
||||
echo "Alle Schritte wurden abgeschlossen. Bitte überprüfen Sie die Ausgaben der einzelnen Skripte."
|
||||
echo "Vergessen Sie nicht, die benötigten DNS-Einträge für Ihre Domain zu setzen, um die SES-Verifizierung abzuschließen."
|
||||
Reference in New Issue
Block a user