Refactor: Rename services and containers to home-service-proxy

This commit is contained in:
hyungi
2025-12-31 09:59:43 +09:00
commit 07ba73e329
56 changed files with 242109 additions and 0 deletions

23
add-komga-hosts.sh Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/bash
echo "🔧 Komga DNS 설정 추가 중..."
# /etc/hosts에 komga.hyungi.net 추가
if ! grep -q "komga.hyungi.net" /etc/hosts; then
echo "192.168.219.104 komga.hyungi.net" | sudo tee -a /etc/hosts
echo "✅ komga.hyungi.net → 192.168.219.104 추가됨"
else
echo "⚠️ komga.hyungi.net 이미 존재함"
fi
# DNS 캐시 플러시
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
echo "🔄 DNS 캐시 플러시 완료"
echo ""
echo "📋 확인:"
dig komga.hyungi.net | grep -A1 "ANSWER SECTION"

32
archive-backup/cert.pem Normal file
View File

@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIDAjCCAqmgAwIBAgIQX0j/5HufTq45+4leMkBrDDAKBggqhkjOPQQDAjBCMRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEnMCUGA1UEAxMeSFlVTkdJLUhPTUUtQ0Eg
SW50ZXJtZWRpYXRlIENBMB4XDTI1MDgxMTAwMjkxOFoXDTI3MDgxMTAwMzAxOFow
FTETMBEGA1UEAxMKaHl1bmdpLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAKdg4RayoCrBAyQw4Ql4ojQr6cGKO8qmLPwkk026UI1xjoPqXcYya2CF
P0yvSrlsuEGlltBFAwSyYcCiRKQzQ1E7o5PN6wFwYo1eo1BpXbBUQlrwRz3Vd1ZJ
6zWoFka3EbK6Ht4iB6Fp8/PDB7bqDiLXjuBwkQb6YeWn5Ff0kXxaiXsk0VbOjtrr
lPkq/M0COJTp33DVAKsW4CzjsTdSKns1k6xPuh19bIsXA56BpoyVks9YbFN2rx8b
J3jPSXwsipV6QxIeqvbXSwqSxrvUzhansyAQNaHOuJu3ZBpv4EOhqslXi157rVb9
jYFuqBexVd69rPutuzjmbw5X+/JX+H8CAwEAAaOB4jCB3zAOBgNVHQ8BAf8EBAMC
BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBSvyMdI
BvLKmIul2mYiR4YLqLSA7jAfBgNVHSMEGDAWgBQppIFa08rcWrcXiZLeL4g1xvkt
NDAjBgNVHREEHDAaggpoeXVuZ2kubmV0ggwqLmh5dW5naS5uZXQwSQYMKwYBBAGC
pGTGKEABBDkwNwIBAQQFYWRtaW4EKzlOUG5ZdVRYTXBGMHAzemtSdEZRbjl5OEht
T3pRUnVUWm9mRFNJcGV4M28wCgYIKoZIzj0EAwIDRwAwRAIgH3rAfdCvSsjhRuQ/
WVQre2/8bnE5Pdwj/GiQmrrgwhoCIFDntMaqd/2c820gJ+juoeRQwVZkKRPwGQOE
86Fsjnb4
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB4DCCAYagAwIBAgIQNYeMnRkkRCMSymCTYWVHLzAKBggqhkjOPQQDAjA6MRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEfMB0GA1UEAxMWSFlVTkdJLUhPTUUtQ0Eg
Um9vdCBDQTAeFw0yNTA4MTAyMjU2MDVaFw0zNTA4MDgyMjU2MDVaMEIxFzAVBgNV
BAoTDkhZVU5HSS1IT01FLUNBMScwJQYDVQQDEx5IWVVOR0ktSE9NRS1DQSBJbnRl
cm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuqjmRgxRCr7aW
VDEhP2cquiFwdL6QYEHQOsC1L0MFQRcF42oohIST3D+cA4r42KLvUyBmpd+MId1m
R7mwvt2Go2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAd
BgNVHQ4EFgQUKaSBWtPK3Fq3F4mS3i+INcb5LTQwHwYDVR0jBBgwFoAUTzUXQf0o
smHARX+U4pkO2CNNWXIwCgYIKoZIzj0EAwIDSAAwRQIgBXlUO6QZNqJMZLs5q+DB
mJX5mQOKLAX9xve1zDK5XFYCIQDHT1myj9bWHDF5ZKMdzqtQCGNsTxK9x99gxmhn
fFW+3g==
-----END CERTIFICATE-----

13
archive-backup/chain.pem Normal file
View File

@@ -0,0 +1,13 @@
-----BEGIN CERTIFICATE-----
MIIB4DCCAYagAwIBAgIQNYeMnRkkRCMSymCTYWVHLzAKBggqhkjOPQQDAjA6MRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEfMB0GA1UEAxMWSFlVTkdJLUhPTUUtQ0Eg
Um9vdCBDQTAeFw0yNTA4MTAyMjU2MDVaFw0zNTA4MDgyMjU2MDVaMEIxFzAVBgNV
BAoTDkhZVU5HSS1IT01FLUNBMScwJQYDVQQDEx5IWVVOR0ktSE9NRS1DQSBJbnRl
cm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuqjmRgxRCr7aW
VDEhP2cquiFwdL6QYEHQOsC1L0MFQRcF42oohIST3D+cA4r42KLvUyBmpd+MId1m
R7mwvt2Go2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAd
BgNVHQ4EFgQUKaSBWtPK3Fq3F4mS3i+INcb5LTQwHwYDVR0jBBgwFoAUTzUXQf0o
smHARX+U4pkO2CNNWXIwCgYIKoZIzj0EAwIDSAAwRQIgBXlUO6QZNqJMZLs5q+DB
mJX5mQOKLAX9xve1zDK5XFYCIQDHT1myj9bWHDF5ZKMdzqtQCGNsTxK9x99gxmhn
fFW+3g==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,45 @@
-----BEGIN CERTIFICATE-----
MIIDAjCCAqmgAwIBAgIQX0j/5HufTq45+4leMkBrDDAKBggqhkjOPQQDAjBCMRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEnMCUGA1UEAxMeSFlVTkdJLUhPTUUtQ0Eg
SW50ZXJtZWRpYXRlIENBMB4XDTI1MDgxMTAwMjkxOFoXDTI3MDgxMTAwMzAxOFow
FTETMBEGA1UEAxMKaHl1bmdpLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAKdg4RayoCrBAyQw4Ql4ojQr6cGKO8qmLPwkk026UI1xjoPqXcYya2CF
P0yvSrlsuEGlltBFAwSyYcCiRKQzQ1E7o5PN6wFwYo1eo1BpXbBUQlrwRz3Vd1ZJ
6zWoFka3EbK6Ht4iB6Fp8/PDB7bqDiLXjuBwkQb6YeWn5Ff0kXxaiXsk0VbOjtrr
lPkq/M0COJTp33DVAKsW4CzjsTdSKns1k6xPuh19bIsXA56BpoyVks9YbFN2rx8b
J3jPSXwsipV6QxIeqvbXSwqSxrvUzhansyAQNaHOuJu3ZBpv4EOhqslXi157rVb9
jYFuqBexVd69rPutuzjmbw5X+/JX+H8CAwEAAaOB4jCB3zAOBgNVHQ8BAf8EBAMC
BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBSvyMdI
BvLKmIul2mYiR4YLqLSA7jAfBgNVHSMEGDAWgBQppIFa08rcWrcXiZLeL4g1xvkt
NDAjBgNVHREEHDAaggpoeXVuZ2kubmV0ggwqLmh5dW5naS5uZXQwSQYMKwYBBAGC
pGTGKEABBDkwNwIBAQQFYWRtaW4EKzlOUG5ZdVRYTXBGMHAzemtSdEZRbjl5OEht
T3pRUnVUWm9mRFNJcGV4M28wCgYIKoZIzj0EAwIDRwAwRAIgH3rAfdCvSsjhRuQ/
WVQre2/8bnE5Pdwj/GiQmrrgwhoCIFDntMaqd/2c820gJ+juoeRQwVZkKRPwGQOE
86Fsjnb4
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB4DCCAYagAwIBAgIQNYeMnRkkRCMSymCTYWVHLzAKBggqhkjOPQQDAjA6MRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEfMB0GA1UEAxMWSFlVTkdJLUhPTUUtQ0Eg
Um9vdCBDQTAeFw0yNTA4MTAyMjU2MDVaFw0zNTA4MDgyMjU2MDVaMEIxFzAVBgNV
BAoTDkhZVU5HSS1IT01FLUNBMScwJQYDVQQDEx5IWVVOR0ktSE9NRS1DQSBJbnRl
cm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuqjmRgxRCr7aW
VDEhP2cquiFwdL6QYEHQOsC1L0MFQRcF42oohIST3D+cA4r42KLvUyBmpd+MId1m
R7mwvt2Go2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAd
BgNVHQ4EFgQUKaSBWtPK3Fq3F4mS3i+INcb5LTQwHwYDVR0jBBgwFoAUTzUXQf0o
smHARX+U4pkO2CNNWXIwCgYIKoZIzj0EAwIDSAAwRQIgBXlUO6QZNqJMZLs5q+DB
mJX5mQOKLAX9xve1zDK5XFYCIQDHT1myj9bWHDF5ZKMdzqtQCGNsTxK9x99gxmhn
fFW+3g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB4DCCAYagAwIBAgIQNYeMnRkkRCMSymCTYWVHLzAKBggqhkjOPQQDAjA6MRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEfMB0GA1UEAxMWSFlVTkdJLUhPTUUtQ0Eg
Um9vdCBDQTAeFw0yNTA4MTAyMjU2MDVaFw0zNTA4MDgyMjU2MDVaMEIxFzAVBgNV
BAoTDkhZVU5HSS1IT01FLUNBMScwJQYDVQQDEx5IWVVOR0ktSE9NRS1DQSBJbnRl
cm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuqjmRgxRCr7aW
VDEhP2cquiFwdL6QYEHQOsC1L0MFQRcF42oohIST3D+cA4r42KLvUyBmpd+MId1m
R7mwvt2Go2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAd
BgNVHQ4EFgQUKaSBWtPK3Fq3F4mS3i+INcb5LTQwHwYDVR0jBBgwFoAUTzUXQf0o
smHARX+U4pkO2CNNWXIwCgYIKoZIzj0EAwIDSAAwRQIgBXlUO6QZNqJMZLs5q+DB
mJX5mQOKLAX9xve1zDK5XFYCIQDHT1myj9bWHDF5ZKMdzqtQCGNsTxK9x99gxmhn
fFW+3g==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCnYOEWsqAqwQMk
MOEJeKI0K+nBijvKpiz8JJNNulCNcY6D6l3GMmtghT9Mr0q5bLhBpZbQRQMEsmHA
okSkM0NRO6OTzesBcGKNXqNQaV2wVEJa8Ec91XdWSes1qBZGtxGyuh7eIgehafPz
wwe26g4i147gcJEG+mHlp+RX9JF8Wol7JNFWzo7a65T5KvzNAjiU6d9w1QCrFuAs
47E3Uip7NZOsT7odfWyLFwOegaaMlZLPWGxTdq8fGyd4z0l8LIqVekMSHqr210sK
ksa71M4Wp7MgEDWhzribt2Qab+BDoarJV4tee61W/Y2BbqgXsVXevaz7rbs45m8O
V/vyV/h/AgMBAAECggEARSadWAdMbN15MsaO8p7IRM2vsaousbad9z4VLZPAG+/C
dXWqcGv8ONBUKpZxRNJJ/bUv7bPVX2djQ3bG7R/QvArrtfDpGpsX3FgxGNOvRV5K
W8/RXxaGSzwW1QAw095mjXSftB5TELj5dMgqs8NXO8Xa3ZckE8H2GC+ZA02jncAO
v8eVZrDQ/jieNjYfPGIm8JTqOd+B31VJjaw6SDojgCHVeoL6P7OwQhxAspvoaGWm
GA13PFc2NTK5wa4MzD+d+URPn4A9u5e56sE76KuOEP8JB+UeROq6Q3YLyES1TsL4
NqxhjCqMenAO+D/scI3WH04rNeYXzLgCqUvNysS0oQKBgQDGIJVn6Pbw2Fcb2kd2
a5s+kBWhvO5e0JkP4TbbKx44Nh0ikg4nvfcS/dKqn+EXyeu1Q4cXkvte2XJ9xWeQ
aehgZPF7jVil0HMrJ6HA5Fk/h9wsxya9Jcy1VtAE7EJXPTjO9cPockSsYesqB0TM
42htWfFxbTic2wEjKN86bDyP1QKBgQDYRPsl+bcrzeuHintk7KPysaCqol/FOcRD
UH/LJr+KZWsjRE6cv4e2MUkCvTtJUitClW2R7TyfYvXJY8JaT9UbF1zc0BLIL8Gs
96yyF2cSFrUxMB9OG3uvjdEacMX4e+l+DnS8Xrs26pc8LgsaPqnj0X4v8fxrrlbp
ek5LFjalAwKBgATSaDB2OARWj5Aq+NBGACo+oXglO/vswbzkM0yUOREPKBheS5/l
/KxmpwjmCTll/amUsiX9usZtLl8nPcUC/tfRvRrPrteiQhtLxKEILa/hI5enZSb3
U4saSMfF5DtxTv+idZkjps43N9z2/lKqOjFnHfwvt1AB+H4dkYk/dx3dAoGAKQdF
IhoyrsO9CBS0fhwKqlMaaOSvCIqB+kc+RzsNoWLGJYWi6EfJpj3JXRSrN6i3/kS8
6a85Df/HIzKiv2Ffy2juPBHZTlMJChhekdawvhTCwRchCT9bgp2D6uE0HYTccgaq
DMZn++4bTNZrUspKjqbCqrPcsEz9vgNu8P3A1iMCgYAH261vBMFKSsPGINBBjeJc
HGbfRR4EsHoCX98WQ6Ydgt4tyQNc5RNc83IeI6Kq2fwk1cKLRS683bqB2FtK0N72
N+cfvbyxrQOzNR6ECmPbevpLvvGsyoWOQPt9whZQmkKnz/jpcRUoUXvaAxll8TvQ
oPLJI65zpuQxOdTme70Nkw==
-----END PRIVATE KEY-----

32
archive/cert.pem Normal file
View File

@@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIDAjCCAqmgAwIBAgIQX0j/5HufTq45+4leMkBrDDAKBggqhkjOPQQDAjBCMRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEnMCUGA1UEAxMeSFlVTkdJLUhPTUUtQ0Eg
SW50ZXJtZWRpYXRlIENBMB4XDTI1MDgxMTAwMjkxOFoXDTI3MDgxMTAwMzAxOFow
FTETMBEGA1UEAxMKaHl1bmdpLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAKdg4RayoCrBAyQw4Ql4ojQr6cGKO8qmLPwkk026UI1xjoPqXcYya2CF
P0yvSrlsuEGlltBFAwSyYcCiRKQzQ1E7o5PN6wFwYo1eo1BpXbBUQlrwRz3Vd1ZJ
6zWoFka3EbK6Ht4iB6Fp8/PDB7bqDiLXjuBwkQb6YeWn5Ff0kXxaiXsk0VbOjtrr
lPkq/M0COJTp33DVAKsW4CzjsTdSKns1k6xPuh19bIsXA56BpoyVks9YbFN2rx8b
J3jPSXwsipV6QxIeqvbXSwqSxrvUzhansyAQNaHOuJu3ZBpv4EOhqslXi157rVb9
jYFuqBexVd69rPutuzjmbw5X+/JX+H8CAwEAAaOB4jCB3zAOBgNVHQ8BAf8EBAMC
BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBSvyMdI
BvLKmIul2mYiR4YLqLSA7jAfBgNVHSMEGDAWgBQppIFa08rcWrcXiZLeL4g1xvkt
NDAjBgNVHREEHDAaggpoeXVuZ2kubmV0ggwqLmh5dW5naS5uZXQwSQYMKwYBBAGC
pGTGKEABBDkwNwIBAQQFYWRtaW4EKzlOUG5ZdVRYTXBGMHAzemtSdEZRbjl5OEht
T3pRUnVUWm9mRFNJcGV4M28wCgYIKoZIzj0EAwIDRwAwRAIgH3rAfdCvSsjhRuQ/
WVQre2/8bnE5Pdwj/GiQmrrgwhoCIFDntMaqd/2c820gJ+juoeRQwVZkKRPwGQOE
86Fsjnb4
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB4DCCAYagAwIBAgIQNYeMnRkkRCMSymCTYWVHLzAKBggqhkjOPQQDAjA6MRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEfMB0GA1UEAxMWSFlVTkdJLUhPTUUtQ0Eg
Um9vdCBDQTAeFw0yNTA4MTAyMjU2MDVaFw0zNTA4MDgyMjU2MDVaMEIxFzAVBgNV
BAoTDkhZVU5HSS1IT01FLUNBMScwJQYDVQQDEx5IWVVOR0ktSE9NRS1DQSBJbnRl
cm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuqjmRgxRCr7aW
VDEhP2cquiFwdL6QYEHQOsC1L0MFQRcF42oohIST3D+cA4r42KLvUyBmpd+MId1m
R7mwvt2Go2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAd
BgNVHQ4EFgQUKaSBWtPK3Fq3F4mS3i+INcb5LTQwHwYDVR0jBBgwFoAUTzUXQf0o
smHARX+U4pkO2CNNWXIwCgYIKoZIzj0EAwIDSAAwRQIgBXlUO6QZNqJMZLs5q+DB
mJX5mQOKLAX9xve1zDK5XFYCIQDHT1myj9bWHDF5ZKMdzqtQCGNsTxK9x99gxmhn
fFW+3g==
-----END CERTIFICATE-----

13
archive/chain.pem Normal file
View File

@@ -0,0 +1,13 @@
-----BEGIN CERTIFICATE-----
MIIB4DCCAYagAwIBAgIQNYeMnRkkRCMSymCTYWVHLzAKBggqhkjOPQQDAjA6MRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEfMB0GA1UEAxMWSFlVTkdJLUhPTUUtQ0Eg
Um9vdCBDQTAeFw0yNTA4MTAyMjU2MDVaFw0zNTA4MDgyMjU2MDVaMEIxFzAVBgNV
BAoTDkhZVU5HSS1IT01FLUNBMScwJQYDVQQDEx5IWVVOR0ktSE9NRS1DQSBJbnRl
cm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuqjmRgxRCr7aW
VDEhP2cquiFwdL6QYEHQOsC1L0MFQRcF42oohIST3D+cA4r42KLvUyBmpd+MId1m
R7mwvt2Go2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAd
BgNVHQ4EFgQUKaSBWtPK3Fq3F4mS3i+INcb5LTQwHwYDVR0jBBgwFoAUTzUXQf0o
smHARX+U4pkO2CNNWXIwCgYIKoZIzj0EAwIDSAAwRQIgBXlUO6QZNqJMZLs5q+DB
mJX5mQOKLAX9xve1zDK5XFYCIQDHT1myj9bWHDF5ZKMdzqtQCGNsTxK9x99gxmhn
fFW+3g==
-----END CERTIFICATE-----

45
archive/fullchain.pem Normal file
View File

@@ -0,0 +1,45 @@
-----BEGIN CERTIFICATE-----
MIIDAjCCAqmgAwIBAgIQX0j/5HufTq45+4leMkBrDDAKBggqhkjOPQQDAjBCMRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEnMCUGA1UEAxMeSFlVTkdJLUhPTUUtQ0Eg
SW50ZXJtZWRpYXRlIENBMB4XDTI1MDgxMTAwMjkxOFoXDTI3MDgxMTAwMzAxOFow
FTETMBEGA1UEAxMKaHl1bmdpLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
AQoCggEBAKdg4RayoCrBAyQw4Ql4ojQr6cGKO8qmLPwkk026UI1xjoPqXcYya2CF
P0yvSrlsuEGlltBFAwSyYcCiRKQzQ1E7o5PN6wFwYo1eo1BpXbBUQlrwRz3Vd1ZJ
6zWoFka3EbK6Ht4iB6Fp8/PDB7bqDiLXjuBwkQb6YeWn5Ff0kXxaiXsk0VbOjtrr
lPkq/M0COJTp33DVAKsW4CzjsTdSKns1k6xPuh19bIsXA56BpoyVks9YbFN2rx8b
J3jPSXwsipV6QxIeqvbXSwqSxrvUzhansyAQNaHOuJu3ZBpv4EOhqslXi157rVb9
jYFuqBexVd69rPutuzjmbw5X+/JX+H8CAwEAAaOB4jCB3zAOBgNVHQ8BAf8EBAMC
BaAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB0GA1UdDgQWBBSvyMdI
BvLKmIul2mYiR4YLqLSA7jAfBgNVHSMEGDAWgBQppIFa08rcWrcXiZLeL4g1xvkt
NDAjBgNVHREEHDAaggpoeXVuZ2kubmV0ggwqLmh5dW5naS5uZXQwSQYMKwYBBAGC
pGTGKEABBDkwNwIBAQQFYWRtaW4EKzlOUG5ZdVRYTXBGMHAzemtSdEZRbjl5OEht
T3pRUnVUWm9mRFNJcGV4M28wCgYIKoZIzj0EAwIDRwAwRAIgH3rAfdCvSsjhRuQ/
WVQre2/8bnE5Pdwj/GiQmrrgwhoCIFDntMaqd/2c820gJ+juoeRQwVZkKRPwGQOE
86Fsjnb4
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB4DCCAYagAwIBAgIQNYeMnRkkRCMSymCTYWVHLzAKBggqhkjOPQQDAjA6MRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEfMB0GA1UEAxMWSFlVTkdJLUhPTUUtQ0Eg
Um9vdCBDQTAeFw0yNTA4MTAyMjU2MDVaFw0zNTA4MDgyMjU2MDVaMEIxFzAVBgNV
BAoTDkhZVU5HSS1IT01FLUNBMScwJQYDVQQDEx5IWVVOR0ktSE9NRS1DQSBJbnRl
cm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuqjmRgxRCr7aW
VDEhP2cquiFwdL6QYEHQOsC1L0MFQRcF42oohIST3D+cA4r42KLvUyBmpd+MId1m
R7mwvt2Go2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAd
BgNVHQ4EFgQUKaSBWtPK3Fq3F4mS3i+INcb5LTQwHwYDVR0jBBgwFoAUTzUXQf0o
smHARX+U4pkO2CNNWXIwCgYIKoZIzj0EAwIDSAAwRQIgBXlUO6QZNqJMZLs5q+DB
mJX5mQOKLAX9xve1zDK5XFYCIQDHT1myj9bWHDF5ZKMdzqtQCGNsTxK9x99gxmhn
fFW+3g==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIB4DCCAYagAwIBAgIQNYeMnRkkRCMSymCTYWVHLzAKBggqhkjOPQQDAjA6MRcw
FQYDVQQKEw5IWVVOR0ktSE9NRS1DQTEfMB0GA1UEAxMWSFlVTkdJLUhPTUUtQ0Eg
Um9vdCBDQTAeFw0yNTA4MTAyMjU2MDVaFw0zNTA4MDgyMjU2MDVaMEIxFzAVBgNV
BAoTDkhZVU5HSS1IT01FLUNBMScwJQYDVQQDEx5IWVVOR0ktSE9NRS1DQSBJbnRl
cm1lZGlhdGUgQ0EwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAARuqjmRgxRCr7aW
VDEhP2cquiFwdL6QYEHQOsC1L0MFQRcF42oohIST3D+cA4r42KLvUyBmpd+MId1m
R7mwvt2Go2YwZDAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAd
BgNVHQ4EFgQUKaSBWtPK3Fq3F4mS3i+INcb5LTQwHwYDVR0jBBgwFoAUTzUXQf0o
smHARX+U4pkO2CNNWXIwCgYIKoZIzj0EAwIDSAAwRQIgBXlUO6QZNqJMZLs5q+DB
mJX5mQOKLAX9xve1zDK5XFYCIQDHT1myj9bWHDF5ZKMdzqtQCGNsTxK9x99gxmhn
fFW+3g==
-----END CERTIFICATE-----

28
archive/privkey.pem Normal file
View File

@@ -0,0 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCnYOEWsqAqwQMk
MOEJeKI0K+nBijvKpiz8JJNNulCNcY6D6l3GMmtghT9Mr0q5bLhBpZbQRQMEsmHA
okSkM0NRO6OTzesBcGKNXqNQaV2wVEJa8Ec91XdWSes1qBZGtxGyuh7eIgehafPz
wwe26g4i147gcJEG+mHlp+RX9JF8Wol7JNFWzo7a65T5KvzNAjiU6d9w1QCrFuAs
47E3Uip7NZOsT7odfWyLFwOegaaMlZLPWGxTdq8fGyd4z0l8LIqVekMSHqr210sK
ksa71M4Wp7MgEDWhzribt2Qab+BDoarJV4tee61W/Y2BbqgXsVXevaz7rbs45m8O
V/vyV/h/AgMBAAECggEARSadWAdMbN15MsaO8p7IRM2vsaousbad9z4VLZPAG+/C
dXWqcGv8ONBUKpZxRNJJ/bUv7bPVX2djQ3bG7R/QvArrtfDpGpsX3FgxGNOvRV5K
W8/RXxaGSzwW1QAw095mjXSftB5TELj5dMgqs8NXO8Xa3ZckE8H2GC+ZA02jncAO
v8eVZrDQ/jieNjYfPGIm8JTqOd+B31VJjaw6SDojgCHVeoL6P7OwQhxAspvoaGWm
GA13PFc2NTK5wa4MzD+d+URPn4A9u5e56sE76KuOEP8JB+UeROq6Q3YLyES1TsL4
NqxhjCqMenAO+D/scI3WH04rNeYXzLgCqUvNysS0oQKBgQDGIJVn6Pbw2Fcb2kd2
a5s+kBWhvO5e0JkP4TbbKx44Nh0ikg4nvfcS/dKqn+EXyeu1Q4cXkvte2XJ9xWeQ
aehgZPF7jVil0HMrJ6HA5Fk/h9wsxya9Jcy1VtAE7EJXPTjO9cPockSsYesqB0TM
42htWfFxbTic2wEjKN86bDyP1QKBgQDYRPsl+bcrzeuHintk7KPysaCqol/FOcRD
UH/LJr+KZWsjRE6cv4e2MUkCvTtJUitClW2R7TyfYvXJY8JaT9UbF1zc0BLIL8Gs
96yyF2cSFrUxMB9OG3uvjdEacMX4e+l+DnS8Xrs26pc8LgsaPqnj0X4v8fxrrlbp
ek5LFjalAwKBgATSaDB2OARWj5Aq+NBGACo+oXglO/vswbzkM0yUOREPKBheS5/l
/KxmpwjmCTll/amUsiX9usZtLl8nPcUC/tfRvRrPrteiQhtLxKEILa/hI5enZSb3
U4saSMfF5DtxTv+idZkjps43N9z2/lKqOjFnHfwvt1AB+H4dkYk/dx3dAoGAKQdF
IhoyrsO9CBS0fhwKqlMaaOSvCIqB+kc+RzsNoWLGJYWi6EfJpj3JXRSrN6i3/kS8
6a85Df/HIzKiv2Ffy2juPBHZTlMJChhekdawvhTCwRchCT9bgp2D6uE0HYTccgaq
DMZn++4bTNZrUspKjqbCqrPcsEz9vgNu8P3A1iMCgYAH261vBMFKSsPGINBBjeJc
HGbfRR4EsHoCX98WQ6Ydgt4tyQNc5RNc83IeI6Kq2fwk1cKLRS683bqB2FtK0N72
N+cfvbyxrQOzNR6ECmPbevpLvvGsyoWOQPt9whZQmkKnz/jpcRUoUXvaAxll8TvQ
oPLJI65zpuQxOdTme70Nkw==
-----END PRIVATE KEY-----

30
docker-compose-http.yml Normal file
View File

@@ -0,0 +1,30 @@
version: '3.8'
services:
# HTTP 전용 Nginx (SSL 인증용)
nginx-http:
image: nginx:alpine
container_name: home-service-http-only
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./nginx-http-only.conf:/etc/nginx/nginx.conf:ro
- ./certbot-webroot:/var/www/certbot:ro
networks:
- home-service-proxy-net
# Certbot (Let's Encrypt)
certbot:
image: certbot/certbot
container_name: home-service-certbot-only
volumes:
- ./ssl-certs:/etc/letsencrypt
- ./certbot-webroot:/var/www/certbot
command: certonly --webroot --webroot-path=/var/www/certbot --email ahn@hyungi.net --agree-tos --no-eff-email -d jellyfin.hyungi.net
profiles:
- ssl-setup
networks:
home-service-proxy-net:
driver: bridge

52
docker-compose-ssl.yml Normal file
View File

@@ -0,0 +1,52 @@
version: '3.8'
services:
# Nginx 보안 프록시 + SSL (기존 젤리핀 앱용)
nginx-security:
image: nginx:alpine
container_name: home-service-proxy-ssl
restart: unless-stopped
ports:
- "8097:80" # HTTP (Let's Encrypt 인증용)
- "8443:443" # HTTPS (최종 접속용)
volumes:
- ./nginx-ssl.conf:/etc/nginx/nginx.conf:ro
- ./security.conf:/etc/nginx/conf.d/security.conf:ro
- ./fail2ban-log:/var/log/nginx
- ./ssl-certs:/etc/nginx/ssl:ro
- ./certbot-webroot:/var/www/certbot:ro
networks:
- home-service-proxy-net
# Certbot (Let's Encrypt)
certbot:
image: certbot/certbot
container_name: home-service-certbot
volumes:
- ./ssl-certs:/etc/letsencrypt
- ./certbot-webroot:/var/www/certbot
command: certonly --webroot --webroot-path=/var/www/certbot --email ahn@hyungi.net --agree-tos --no-eff-email --expand -d jellyfin.hyungi.net -d komga.hyungi.net -d webdav.hyungi.net
profiles:
- ssl-setup
# Fail2Ban 보안 모니터링
fail2ban:
image: crazymax/fail2ban:latest
container_name: home-service-fail2ban-ssl
restart: unless-stopped
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
- ./fail2ban-data:/data
- ./fail2ban-log:/var/log/nginx:ro
- ./fail2ban.conf:/etc/fail2ban/jail.local:ro
environment:
- TZ=Asia/Seoul
- F2B_LOG_LEVEL=INFO
networks:
- home-service-proxy-net
networks:
home-service-proxy-net:
driver: bridge

60
docker-compose.yml Normal file
View File

@@ -0,0 +1,60 @@
version: '3.8'
services:
# Nginx 보안 프록시 (기존 젤리핀 앱용)
nginx-security:
image: nginx:alpine
container_name: home-service-proxy
restart: unless-stopped
ports:
- "8097:80" # 외부 접속용 포트 (8096과 구분)
- "8443:443" # HTTPS
volumes:
- ./nginx-ssl.conf:/etc/nginx/nginx.conf:ro
- ./security.conf:/etc/nginx/conf.d/security.conf:ro
- ./fail2ban-log:/var/log/nginx
- ./ssl-certs:/etc/nginx/ssl:ro # SSL 인증서 (선택)
- ./archive:/etc/nginx/ssl/archive:ro # 시놀로지 와일드카드 인증서
networks:
- home-service-proxy-net
# Fail2Ban 보안 모니터링
fail2ban:
image: crazymax/fail2ban:latest
container_name: home-service-fail2ban
restart: unless-stopped
network_mode: "host"
cap_add:
- NET_ADMIN
- NET_RAW
volumes:
- ./fail2ban-data:/data
- ./fail2ban-log:/var/log/nginx:ro
- ./fail2ban.conf:/etc/fail2ban/jail.local:ro
environment:
- TZ=Asia/Seoul
- F2B_LOG_LEVEL=INFO
# OmniFocus 전용 WebDAV 서버
webdav:
image: hacdias/webdav:latest # ARM64 지원
container_name: omnifocus-webdav
restart: unless-stopped
ports:
- "8090:80" # 내부 WebDAV 포트
environment:
- WEBDAV_USERNAME=omnifocus
- WEBDAV_PASSWORD=7mK9pL3xR8nQ2wE
- TZ=Asia/Seoul
volumes:
- ./omnifocus-data:/srv
networks:
- home-service-proxy-net
networks:
home-service-proxy-net:
driver: bridge

Binary file not shown.

226147
fail2ban-log/access.log Normal file

File diff suppressed because it is too large Load Diff

14436
fail2ban-log/error.log Normal file

File diff suppressed because it is too large Load Diff

42
fail2ban.conf Normal file
View File

@@ -0,0 +1,42 @@
# Fail2Ban 젤리핀 보안 설정
[DEFAULT]
# 기본 설정
bantime = 3600 # 1시간 차단
findtime = 600 # 10분 내 시도 횟수 체크
maxretry = 5 # 최대 시도 횟수
backend = auto
usedns = warn
logencoding = auto
enabled = false
mode = normal
filter = %(__name__)s[mode=%(mode)s]
# 이메일 알림 (선택사항)
# destemail = your-email@example.com
# sender = fail2ban@your-domain.com
# mta = sendmail
# action = %(action_mwl)s
# SSH 비활성화 (macOS에서는 /var/log/auth.log 없음)
[sshd]
enabled = false
# 기본 Nginx 봇 검색만 활성화 (내장 필터 사용)
[nginx-botsearch]
enabled = true
port = 80,443
filter = nginx-botsearch
logpath = /var/log/nginx/access.log
maxretry = 2
bantime = 86400 # 24시간 차단
# 기본 HTTP 인증 실패 감지
[nginx-http-auth]
enabled = true
port = 80,443
filter = nginx-http-auth
logpath = /var/log/nginx/access.log
maxretry = 3
bantime = 1800 # 30분 차단

36
nginx-http-only.conf Normal file
View File

@@ -0,0 +1,36 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server {
listen 80;
server_name jellyfin.hyungi.net;
# Let's Encrypt 인증 경로
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# 나머지는 젤리핀 앱으로 프록시
location / {
proxy_pass http://host.docker.internal:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}

281
nginx-ssl.conf Normal file
View File

@@ -0,0 +1,281 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 보안 헤더 (젤리핀 호환성 개선)
add_header X-Frame-Options "SAMEORIGIN" always;
# X-Content-Type-Options 제거 (젤리핀 JavaScript 파일 문제 해결)
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
server_tokens off;
log_format security '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';
access_log /var/log/nginx/access.log security;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 100M;
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# Rate Limiting (완화된 설정)
limit_req_zone $binary_remote_addr zone=jellyfin:10m rate=50r/s;
limit_req_zone $binary_remote_addr zone=komga:10m rate=30r/s;
limit_req_zone $binary_remote_addr zone=webdav:10m rate=100r/s;
limit_req_zone $binary_remote_addr zone=auth:10m rate=5r/m;
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
# WebDAV 메소드 허용
map $request_method $webdav_method {
default 0;
PROPFIND 1;
PROPPATCH 1;
MKCOL 1;
COPY 1;
MOVE 1;
DELETE 1;
LOCK 1;
UNLOCK 1;
OPTIONS 1;
}
upstream jellyfin_backend {
server 192.168.1.122:8096; # Mac Mini 직접 IP
keepalive 32;
}
upstream komga_backend {
server 192.168.1.122:25600; # Komga 서버
keepalive 16;
}
upstream webdav_backend {
server 192.168.1.227:5006; # 시놀로지 NAS WebDAV 서버 (HTTPS)
keepalive 16;
}
# HTTP → HTTPS 리다이렉트
server {
listen 80;
server_name jellyfin.hyungi.net komga.hyungi.net webdav.hyungi.net;
# Let's Encrypt 인증 경로
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
# 나머지는 HTTPS로 리다이렉트
location / {
return 301 https://$server_name$request_uri;
}
}
# HTTPS 서버 - Komga (우선순위 높음)
server {
listen 443 ssl;
http2 on;
server_name komga.hyungi.net;
# SSL 설정 (Let's Encrypt 공인 인증서)
ssl_certificate /etc/nginx/ssl/live/jellyfin.hyungi.net/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/jellyfin.hyungi.net/privkey.pem;
# SSL 보안 설정
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 보안 제한 (Komga용)
limit_req zone=komga burst=50 nodelay;
limit_conn perip 30;
limit_conn perserver 100;
# 로그인 페이지 특별 제한
location ~ ^/(api/v1/users/me|login) {
limit_req zone=auth burst=3 nodelay;
proxy_pass http://komga_backend;
include /etc/nginx/conf.d/security.conf;
}
# 메인 프록시 설정
location / {
proxy_pass http://komga_backend;
include /etc/nginx/conf.d/security.conf;
}
# API 경로 (Komga REST API)
location /api/ {
proxy_pass http://komga_backend;
include /etc/nginx/conf.d/security.conf;
}
# 보안: 숨겨야 할 경로들
location ~ /\.ht {
deny all;
}
location ~ /\. {
deny all;
}
}
# HTTPS 서버 - Jellyfin
server {
listen 443 ssl;
http2 on;
server_name jellyfin.hyungi.net;
# SSL 설정 (Let's Encrypt 공인 인증서)
ssl_certificate /etc/nginx/ssl/live/jellyfin.hyungi.net/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/jellyfin.hyungi.net/privkey.pem;
# SSL 보안 설정
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 보안 제한 (완화된 설정)
limit_req zone=jellyfin burst=100 nodelay;
limit_conn perip 50;
limit_conn perserver 200;
# 로그인 페이지 특별 제한
location ~ ^/(Users/authenticatebyname|Users/AuthenticateByName) {
limit_req zone=auth burst=3 nodelay;
proxy_pass http://jellyfin_backend;
include /etc/nginx/conf.d/security.conf;
}
# 메인 프록시 설정
location / {
proxy_pass http://jellyfin_backend;
include /etc/nginx/conf.d/security.conf;
}
# 웹소켓 지원
location /socket {
proxy_pass http://jellyfin_backend;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 보안: 숨겨야 할 경로들
location ~ /\.ht {
deny all;
}
location ~ /\. {
deny all;
}
}
# HTTPS 서버 - WebDAV (시놀로지 NAS)
server {
listen 443 ssl;
# http2 on; # WebDAV 호환성을 위해 HTTP/2 비활성화 (OmniFocus 등 일부 클라이언트 문제 방지)
server_name webdav.hyungi.net;
# SSL 설정 (WebDAV 전용 Let's Encrypt 인증서)
ssl_certificate /etc/nginx/ssl/live/webdav.hyungi.net/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/live/webdav.hyungi.net/privkey.pem;
# SSL 보안 설정
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384;
ssl_prefer_server_ciphers off;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# 보안 제한 (WebDAV용 - 파일 업로드 고려)
# limit_req zone=webdav burst=200 nodelay;
limit_conn perip 50;
limit_conn perserver 200;
# WebDAV 전용 설정
client_max_body_size 1G; # 큰 파일 업로드 허용
# 메인 프록시 설정 (WebDAV - 모든 경로)
location / {
proxy_pass https://webdav_backend;
proxy_ssl_verify off; # 내부망 인증서 검증 무시 (필요시)
# 리다이렉트 포트 수정 (NAS가 5006을 붙여서 보내는 경우 443으로 수정)
proxy_redirect https://webdav.hyungi.net:5006/ /;
proxy_redirect https://$host:5006/ /;
# 기본 프록시 헤더
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port 443;
# WebDAV 전용 헤더
proxy_set_header DAV "1";
proxy_set_header Depth $http_depth;
proxy_set_header Destination $http_destination;
proxy_set_header Overwrite $http_overwrite;
proxy_set_header Lock-Token $http_lock_token;
proxy_set_header If $http_if;
# WebDAV 메소드 및 타임아웃 설정
proxy_request_buffering off;
proxy_buffering off;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_connect_timeout 600;
# HTTP 버전
proxy_http_version 1.1;
proxy_set_header Connection "";
}
# 보안: 숨겨야 할 경로들
location ~ /\.ht {
deny all;
}
location ~ /\. {
deny all;
}
}
}

119
nginx.conf Normal file
View File

@@ -0,0 +1,119 @@
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
use epoll;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
# 보안 헤더
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# 서버 정보 숨기기
server_tokens off;
# 로그 포맷 (Fail2Ban용)
log_format security '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" '
'$request_time $upstream_response_time';
access_log /var/log/nginx/access.log security;
# 기본 설정
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
client_max_body_size 100M;
# Gzip 압축
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
# Rate Limiting (DDoS 방어)
limit_req_zone $binary_remote_addr zone=jellyfin:10m rate=10r/s;
limit_req_zone $binary_remote_addr zone=auth:10m rate=5r/m;
# 연결 제한
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
# 젤리핀 앱 프록시 설정 (호스트의 8096 포트로 연결)
upstream jellyfin_app {
server host.docker.internal:8096; # macOS Docker에서 호스트 접근
keepalive 32;
}
server {
listen 80;
server_name jellyfin.hyungi.net;
# 보안 제한
limit_req zone=jellyfin burst=20 nodelay;
limit_conn perip 10;
limit_conn perserver 100;
# 로그인 페이지 특별 제한
location ~ ^/(Users/authenticatebyname|Users/AuthenticateByName) {
limit_req zone=auth burst=3 nodelay;
proxy_pass http://jellyfin_app;
include /etc/nginx/conf.d/security.conf;
}
# 관리자 페이지 접근 제한 (선택사항)
location /web/index.html#!/dashboard {
# 특정 IP만 허용 (필요시 주석 해제)
# allow 192.168.219.0/24; # 내부 네트워크
# allow YOUR_TRUSTED_IP; # 신뢰할 수 있는 외부 IP
# deny all;
proxy_pass http://jellyfin_app;
include /etc/nginx/conf.d/security.conf;
}
# 메인 프록시 설정
location / {
proxy_pass http://jellyfin_app;
include /etc/nginx/conf.d/security.conf;
}
# 웹소켓 지원 (실시간 업데이트용)
location /socket {
proxy_pass http://jellyfin_app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# 보안: 숨겨야 할 경로들
location ~ /\.ht {
deny all;
}
location ~ /\. {
deny all;
}
}
}

36
security.conf Normal file
View File

@@ -0,0 +1,36 @@
# Jellyfin 프록시 보안 헤더 설정
# 기본 프록시 헤더
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
# 버퍼링 설정 (젤리핀 최적화)
proxy_buffering on;
proxy_request_buffering off;
proxy_buffer_size 128k;
proxy_buffers 4 256k;
proxy_busy_buffers_size 256k;
# 타임아웃 설정
proxy_connect_timeout 60s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
# 캐시 비활성화 (실시간 스트리밍용)
proxy_cache off;
proxy_no_cache 1;
proxy_cache_bypass 1;
# HTTP/1.1 연결 유지
proxy_http_version 1.1;
proxy_set_header Connection "";
# 클라이언트 정보 전달
proxy_set_header User-Agent $http_user_agent;
proxy_set_header Accept $http_accept;
proxy_set_header Accept-Language $http_accept_language;
proxy_set_header Accept-Encoding $http_accept_encoding;

68
setup-ssl.sh Executable file
View File

@@ -0,0 +1,68 @@
#!/bin/bash
echo "🔒 젤리핀 HTTPS 설정 시작..."
echo "========================================"
# 이메일 입력 받기
read -p "Let's Encrypt 알림용 이메일 주소를 입력하세요: " EMAIL
if [ -z "$EMAIL" ]; then
echo "❌ 이메일 주소가 필요합니다."
exit 1
fi
# 필요한 디렉토리 생성
mkdir -p ssl-certs certbot-webroot
echo "📁 SSL 디렉토리 생성 완료"
# docker-compose-ssl.yml에서 이메일 업데이트
sed -i.bak "s/your-email@example.com/$EMAIL/g" docker-compose-ssl.yml
echo "📧 이메일 설정 완료: $EMAIL"
# 기존 서비스 중지
echo "⏹️ 기존 서비스 중지 중..."
docker-compose down
# HTTP 서버 먼저 시작 (Let's Encrypt 인증용)
echo "🌐 HTTP 서버 시작 (인증용)..."
docker-compose up -d nginx-security jellyfin
# 잠시 대기
sleep 10
# SSL 인증서 발급
echo "🔐 SSL 인증서 발급 중..."
docker-compose --profile ssl-setup run --rm certbot
# 인증서 발급 확인
if [ -f "./ssl-certs/live/jellyfin.hyungi.net/fullchain.pem" ]; then
echo "✅ SSL 인증서 발급 성공!"
# HTTPS 서버로 전환
echo "🔄 HTTPS 서버로 전환 중..."
docker-compose down
docker-compose -f docker-compose-ssl.yml up -d
echo ""
echo "🎉 HTTPS 설정 완료!"
echo "========================================"
echo "• HTTP: http://jellyfin.hyungi.net:8096"
echo "• HTTPS: https://jellyfin.hyungi.net"
echo ""
echo "📋 자동 갱신 설정:"
echo "crontab에 다음 추가 (월 1회 갱신):"
echo "0 2 1 * * cd $(pwd) && docker-compose --profile ssl-setup run --rm certbot renew && docker-compose restart nginx-security"
else
echo "❌ SSL 인증서 발급 실패"
echo "다음을 확인해주세요:"
echo "1. DNS 설정: jellyfin.hyungi.net → 122.153.226.114"
echo "2. 포트 포워딩: 80, 443 포트 개방"
echo "3. 방화벽 설정"
# HTTP 서버로 되돌리기
docker-compose down
docker-compose up -d
fi

View File

@@ -0,0 +1 @@
{"creation_dt": "2025-11-06T22:54:48Z", "creation_host": "74ea9101cf7a"}

View File

@@ -0,0 +1 @@
{"n": "lwTS2Q88RUHciOvyJRJ3AdCi81eOUi4zrSjFJII2LeXep_3Romq0mg6PT3_bucFBtfAbpejOUsXUCf50-xDnn3mxpeQOOXhJ8XNwOUKOvtXX386CrKdxGIqERzeY8N9jzwjfwuEOqv7kmIX2u2I0eDPKPeUCkGiulY3n6SMk4gsvkJn4-ApZ1kkkJCLBkoKUVAmA-xCH7AirlQr_5Oj6xxUrdMbmCJ53krS71l4G2RRjb0tiuCkrDoVJ1I65bySv7Vt2hxKb8nIjDTGhgRgaCNxL7YgJc4gJ3ehH3ZiDtRg1nrHB889vJj6AAIqc5kHw7cT1hUO-7Yl1mZ3takp5aw", "e": "AQAB", "d": "OebsDrREOAuuCkNo1qTzQxti9ukZlNHJF3m7yKkyK7voeEGdqGfAMhcmBGWx8dEyqBbVCvItdVgLWf-Zi4-qNx96KPA9MfS4aR6JJzMpNusXt2Re_uK-PpoRaJrdBXGpO36cCISw0ogjToWCmcrn8jRtNPkC2CqC0a2UfvNuF0p6bA2eN1JC_q_ybSk0j_Q9guLdjY-aW_OmpDmkywX0G67SPhEk4GblEbh0tFj6F14_dD5fRgIj56mSwTveMPVQtQyfdKdT_3hblVDD_WuLyK-x-ldcpab_2pUbcicplzinKDV2ApZJC4huiqzViKiBirkjVMeGAPJ73TOm4wuIyQ", "p": "1E-Hb3AS2VB_8VinldyRJl5dHt2Z2AVDlV_HSoxDO3qLZ_TrQ0PLOW-7Cy8F_CZMFvUDy8omEjxB_yfDHQBz5jLrdxUgZboJcQYQIfsBwxRVByDCmo8r_2O5U4Qe6FAi8fELNLO8dXk_G2HMeFAlDasThh3RcMhmXHsrHvHYsbk", "q": "thh1FqgPMjpf6LDnf3cIsG4ko2-8TYUjROavskNAA2OtB8P7P_hIPhMGlXLSnV9AlzuEmwbLnm3n4V5GXhaj7yFEYf2_pvATSd0SMU2eo2dkx9KkI4aeLTEzp-50IjA80PPDc_faakAZD6FfXdVDVIyYZxDmjERWjgO-1XkGpkM", "dp": "dnHP6xmpSlegqTJ-fBrLV455gQi8FUoKhEEk27AYqgwZzetTfPlLXUW6Iekf-6YZ-QzEC2NBjhbT8tdqALoJ7rklqA-_PUFmlwl84pg4SW8EaK-cIcISF66466Df5Vcfx75kNAi58Qetb0dGXTDJGzD_-WiVOchzYtDMI71k2PE", "dq": "ZmTSUm8mPGQ-0iXHxxE0PaFx0MVf6WdYMcJWQbM3J7DA94Doo0wFs4IXTapHbF7Hf0LkihgEH45FuaC9iOLKRAk83q1FO6X78qjxNfAjqFbXgNWdnqxv_ZGRLnkTrLXbPNQVr_xLQTvR28wuSCFHvx9gA3Spb25uDWVlxbxMVOk", "qi": "eYwqdNWC6hQkz8oLpw5lBidBU5hOX7g4RnCTkNoWIil7dtNJtCITbMhN76NNnoquNucsWga-QgjKfcab3IS4boToIdAfrTGEn6mhNni7J-KSnKtDyRb9b_-mZsxCXtNQZUpbJ1ID0hhlU3MT3aUGPOW_tFV9BpZsuoT_4iU5Ubc", "kty": "RSA"}

View File

@@ -0,0 +1 @@
{"body": {}, "uri": "https://acme-v02.api.letsencrypt.org/acme/acct/2781327316"}

View File

@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDlDCCAxmgAwIBAgISBqyY+V9721rzFoPctN/MauwMMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
ODAeFw0yNTExMDYyMjAxNDlaFw0yNjAyMDQyMjAxNDhaMB4xHDAaBgNVBAMTE2pl
bGx5ZmluLmh5dW5naS5uZXQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATDToRl
QSRlqU0POTjfsHsPurLRXy8MYz3q5bP2wOADZUnBZOHj7tOgWvWptoFVEb27FDYz
nAYBCbKRF5PuUKyko4ICITCCAh0wDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQG
CCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQnWsRl
2sKHDlmtktidvKk8h89A7DAfBgNVHSMEGDAWgBSPDROi9i5+0VBsMxg4XVmOI3KR
yjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lOC5pLmxlbmNy
Lm9yZy8wHgYDVR0RBBcwFYITamVsbHlmaW4uaHl1bmdpLm5ldDATBgNVHSAEDDAK
MAgGBmeBDAECATAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8vZTguYy5sZW5jci5v
cmcvMTMuY3JsMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYADleUvPOuqT4zGyyZ
B7P3kN+bwj1xMiXdIaklrGHFTiEAAAGaW2ZEeAAABAMARzBFAiEA3plBIxi+IFd6
wOkpqmdDH5dysHYKyy7raBfIr/IcRzECIGbF/HgM8N8Sp6SLaC5jP8h4qGHrCPkn
xUYRxTFF1UWYAHYAyzj3FYl8hKFEX1vB3fvJbvKaWc1HCmkFhbDLFMMUWOcAAAGa
W2ZMcwAABAMARzBFAiBP6ENlvkFd4Ri4td3hu9Z9/iHfVJg22J5YA7Z8unSiQQIh
AOg7R/alTUGDOqIXdKnUPpyqLLPMgxziTPf7J5C156CbMAoGCCqGSM49BAMDA2kA
MGYCMQDa+c/2++5pcHvkVcbCBhdp2WuD1hABuLLu8boMDee9WCoC7QCfHqbQNYa/
/IwxJTECMQDn4Ps57o5v1kYkIrpcSqxsIR364ownKyDt33BSKAaOQVhTR1qEMTJ9
pAv6lG/WRyg=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDpDCCAyqgAwIBAgISBSmike7+1be0twqAMRb0f9QCMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
ODAeFw0yNTExMDcyMjIzMzlaFw0yNjAyMDUyMjIzMzhaMB4xHDAaBgNVBAMTE2pl
bGx5ZmluLmh5dW5naS5uZXQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATzG6tO
zRq4bp8Jf2crdsqNL8GEnrpXKoefEoRrHwNCNkGDki7jd/O5xAwXywoBfphNzG1g
x5PoBmtEqU1QXixXo4ICMjCCAi4wDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQG
CCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBT2kflW
EavoNgJdvhv1xMOWC9D/XzAfBgNVHSMEGDAWgBSPDROi9i5+0VBsMxg4XVmOI3KR
yjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lOC5pLmxlbmNy
Lm9yZy8wMAYDVR0RBCkwJ4ITamVsbHlmaW4uaHl1bmdpLm5ldIIQa29tZ2EuaHl1
bmdpLm5ldDATBgNVHSAEDDAKMAgGBmeBDAECATAsBgNVHR8EJTAjMCGgH6Adhhto
dHRwOi8vZTguYy5sZW5jci5vcmcvMy5jcmwwggEEBgorBgEEAdZ5AgQCBIH1BIHy
APAAdgBJnJtp3h187Pw23s2HZKa4W68Kh4AZ0VVS++nrKd34wwAAAZpgoJqlAAAE
AwBHMEUCIAfiX4l9FHcM4hYnotgvfCekxmE+BLfQtIQ9sC9VoOIlAiEA78F5de+2
U+1HOn4fCBx1QJTAYprl3uPnFslEg0S967wAdgAZhtTHKKpv/roDb3gqTQGRqs4t
cjEPrs5dcEEtJUzH1AAAAZpgoJqkAAAEAwBHMEUCIQDGsoK/VKjJ1lhTjRxiGl1s
IJJa+rjO4TKsDn3fuQSPMwIgQuGBRA33fR8CUiVmfCa8RqRQV6j5RVlkY5RVzTtk
t9wwCgYIKoZIzj0EAwMDaAAwZQIwHK/TX6+nLrlGO8Z9rpuVfC+wH20h+QTTct/U
CByRF22tKA25Og1d27Mf9m74A5JkAjEAz28d+3v3Q1cOunFrNcvtwzRcGKwjXWRY
+KLnuPwSka49LcLrdeXooE4/jzopgbTh
-----END CERTIFICATE-----

View File

@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDrzCCAzWgAwIBAgISBmluB0JMUNi6yzLaYpSCFg1qMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NzAeFw0yNTEyMDIyMzEzMzlaFw0yNjAzMDIyMzEzMzhaMB4xHDAaBgNVBAMTE2pl
bGx5ZmluLmh5dW5naS5uZXQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ6V/en
r7hMBQFZE0RmskBWhL7BOz9k4/Igr3Tyrzx7cs90VgJdC/7mOYXBrRnhbEGL14tc
UksatrvIEk8j1f70o4ICPTCCAjkwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQG
CCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQH5r8X
z19LdExOi6pQ4axMcjulwjAfBgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwA
gDAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNy
Lm9yZy8wMAYDVR0RBCkwJ4ITamVsbHlmaW4uaHl1bmdpLm5ldIIQa29tZ2EuaHl1
bmdpLm5ldDATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1o
dHRwOi8vZTcuYy5sZW5jci5vcmcvMTA3LmNybDCCAQ0GCisGAQQB1nkCBAIEgf4E
gfsA+QB2AA5XlLzzrqk+MxssmQez95Dfm8I9cTIl3SGpJaxhxU4hAAABmuGNXmIA
AAQDAEcwRQIhALm4XbqbS7E2Y8hjuDWmTyt6cUwYmv9wdK5SbZj1+BTbAiBlVbpy
Wj34jReVCUGzAslrePMqVh0Ddf9s9pd1xJncCgB/ABqLnWlKV5jImaDKiL30j8C0
VmDMw2ANH3H0af/H0ayjAAABmuGNX4oACAAABQAeoM/XBAMASDBGAiEAgXa/sO3+
XiMOyqZGVrDwNSf0Vf9MnvjatLpcMk26zgUCIQDkjM+1gaiIjG58TvCM2fcwQ95K
g3ijuALa6VmnWKmVnjAKBggqhkjOPQQDAwNoADBlAjEAvpkqzJ65Wy4iSpj+g9PR
wSgydEwueCp/BFu12xrbCNPqnuVsrdGosSM1sYsIJ9ugAjBCjqMaZ8UxN6vB0yiw
esgfM8dYsViTU4ELXct/s5TalEs0Flm9Ds1qWe1+bSCWqDc=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
u1igv3OefnWjSQ==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
u1igv3OefnWjSQ==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
+VUwFj9tmWxyR/M=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,48 @@
-----BEGIN CERTIFICATE-----
MIIDlDCCAxmgAwIBAgISBqyY+V9721rzFoPctN/MauwMMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
ODAeFw0yNTExMDYyMjAxNDlaFw0yNjAyMDQyMjAxNDhaMB4xHDAaBgNVBAMTE2pl
bGx5ZmluLmh5dW5naS5uZXQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATDToRl
QSRlqU0POTjfsHsPurLRXy8MYz3q5bP2wOADZUnBZOHj7tOgWvWptoFVEb27FDYz
nAYBCbKRF5PuUKyko4ICITCCAh0wDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQG
CCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQnWsRl
2sKHDlmtktidvKk8h89A7DAfBgNVHSMEGDAWgBSPDROi9i5+0VBsMxg4XVmOI3KR
yjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lOC5pLmxlbmNy
Lm9yZy8wHgYDVR0RBBcwFYITamVsbHlmaW4uaHl1bmdpLm5ldDATBgNVHSAEDDAK
MAgGBmeBDAECATAtBgNVHR8EJjAkMCKgIKAehhxodHRwOi8vZTguYy5sZW5jci5v
cmcvMTMuY3JsMIIBBAYKKwYBBAHWeQIEAgSB9QSB8gDwAHYADleUvPOuqT4zGyyZ
B7P3kN+bwj1xMiXdIaklrGHFTiEAAAGaW2ZEeAAABAMARzBFAiEA3plBIxi+IFd6
wOkpqmdDH5dysHYKyy7raBfIr/IcRzECIGbF/HgM8N8Sp6SLaC5jP8h4qGHrCPkn
xUYRxTFF1UWYAHYAyzj3FYl8hKFEX1vB3fvJbvKaWc1HCmkFhbDLFMMUWOcAAAGa
W2ZMcwAABAMARzBFAiBP6ENlvkFd4Ri4td3hu9Z9/iHfVJg22J5YA7Z8unSiQQIh
AOg7R/alTUGDOqIXdKnUPpyqLLPMgxziTPf7J5C156CbMAoGCCqGSM49BAMDA2kA
MGYCMQDa+c/2++5pcHvkVcbCBhdp2WuD1hABuLLu8boMDee9WCoC7QCfHqbQNYa/
/IwxJTECMQDn4Ps57o5v1kYkIrpcSqxsIR364ownKyDt33BSKAaOQVhTR1qEMTJ9
pAv6lG/WRyg=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
u1igv3OefnWjSQ==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,48 @@
-----BEGIN CERTIFICATE-----
MIIDpDCCAyqgAwIBAgISBSmike7+1be0twqAMRb0f9QCMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
ODAeFw0yNTExMDcyMjIzMzlaFw0yNjAyMDUyMjIzMzhaMB4xHDAaBgNVBAMTE2pl
bGx5ZmluLmh5dW5naS5uZXQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAATzG6tO
zRq4bp8Jf2crdsqNL8GEnrpXKoefEoRrHwNCNkGDki7jd/O5xAwXywoBfphNzG1g
x5PoBmtEqU1QXixXo4ICMjCCAi4wDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQG
CCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBT2kflW
EavoNgJdvhv1xMOWC9D/XzAfBgNVHSMEGDAWgBSPDROi9i5+0VBsMxg4XVmOI3KR
yjAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lOC5pLmxlbmNy
Lm9yZy8wMAYDVR0RBCkwJ4ITamVsbHlmaW4uaHl1bmdpLm5ldIIQa29tZ2EuaHl1
bmdpLm5ldDATBgNVHSAEDDAKMAgGBmeBDAECATAsBgNVHR8EJTAjMCGgH6Adhhto
dHRwOi8vZTguYy5sZW5jci5vcmcvMy5jcmwwggEEBgorBgEEAdZ5AgQCBIH1BIHy
APAAdgBJnJtp3h187Pw23s2HZKa4W68Kh4AZ0VVS++nrKd34wwAAAZpgoJqlAAAE
AwBHMEUCIAfiX4l9FHcM4hYnotgvfCekxmE+BLfQtIQ9sC9VoOIlAiEA78F5de+2
U+1HOn4fCBx1QJTAYprl3uPnFslEg0S967wAdgAZhtTHKKpv/roDb3gqTQGRqs4t
cjEPrs5dcEEtJUzH1AAAAZpgoJqkAAAEAwBHMEUCIQDGsoK/VKjJ1lhTjRxiGl1s
IJJa+rjO4TKsDn3fuQSPMwIgQuGBRA33fR8CUiVmfCa8RqRQV6j5RVlkY5RVzTtk
t9wwCgYIKoZIzj0EAwMDaAAwZQIwHK/TX6+nLrlGO8Z9rpuVfC+wH20h+QTTct/U
CByRF22tKA25Og1d27Mf9m74A5JkAjEAz28d+3v3Q1cOunFrNcvtwzRcGKwjXWRY
+KLnuPwSka49LcLrdeXooE4/jzopgbTh
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
u1igv3OefnWjSQ==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,48 @@
-----BEGIN CERTIFICATE-----
MIIDrzCCAzWgAwIBAgISBmluB0JMUNi6yzLaYpSCFg1qMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
NzAeFw0yNTEyMDIyMzEzMzlaFw0yNjAzMDIyMzEzMzhaMB4xHDAaBgNVBAMTE2pl
bGx5ZmluLmh5dW5naS5uZXQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNCAAQ6V/en
r7hMBQFZE0RmskBWhL7BOz9k4/Igr3Tyrzx7cs90VgJdC/7mOYXBrRnhbEGL14tc
UksatrvIEk8j1f70o4ICPTCCAjkwDgYDVR0PAQH/BAQDAgeAMB0GA1UdJQQWMBQG
CCsGAQUFBwMBBggrBgEFBQcDAjAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBQH5r8X
z19LdExOi6pQ4axMcjulwjAfBgNVHSMEGDAWgBSuSJ7chx1EoG/aouVgdAR4wpwA
gDAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly9lNy5pLmxlbmNy
Lm9yZy8wMAYDVR0RBCkwJ4ITamVsbHlmaW4uaHl1bmdpLm5ldIIQa29tZ2EuaHl1
bmdpLm5ldDATBgNVHSAEDDAKMAgGBmeBDAECATAuBgNVHR8EJzAlMCOgIaAfhh1o
dHRwOi8vZTcuYy5sZW5jci5vcmcvMTA3LmNybDCCAQ0GCisGAQQB1nkCBAIEgf4E
gfsA+QB2AA5XlLzzrqk+MxssmQez95Dfm8I9cTIl3SGpJaxhxU4hAAABmuGNXmIA
AAQDAEcwRQIhALm4XbqbS7E2Y8hjuDWmTyt6cUwYmv9wdK5SbZj1+BTbAiBlVbpy
Wj34jReVCUGzAslrePMqVh0Ddf9s9pd1xJncCgB/ABqLnWlKV5jImaDKiL30j8C0
VmDMw2ANH3H0af/H0ayjAAABmuGNX4oACAAABQAeoM/XBAMASDBGAiEAgXa/sO3+
XiMOyqZGVrDwNSf0Vf9MnvjatLpcMk26zgUCIQDkjM+1gaiIjG58TvCM2fcwQ95K
g3ijuALa6VmnWKmVnjAKBggqhkjOPQQDAwNoADBlAjEAvpkqzJ65Wy4iSpj+g9PR
wSgydEwueCp/BFu12xrbCNPqnuVsrdGosSM1sYsIJ9ugAjBCjqMaZ8UxN6vB0yiw
esgfM8dYsViTU4ELXct/s5TalEs0Flm9Ds1qWe1+bSCWqDc=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVzCCAj+gAwIBAgIRAKp18eYrjwoiCWbTi7/UuqEwDQYJKoZIhvcNAQELBQAw
TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh
cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw
WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg
RW5jcnlwdDELMAkGA1UEAxMCRTcwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAARB6AST
CFh/vjcwDMCgQer+VtqEkz7JANurZxLP+U9TCeioL6sp5Z8VRvRbYk4P1INBmbef
QHJFHCxcSjKmwtvGBWpl/9ra8HW0QDsUaJW2qOJqceJ0ZVFT3hbUHifBM/2jgfgw
gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD
ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSuSJ7chx1EoG/aouVgdAR4
wpwAgDAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB
AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g
BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu
Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAjx66fDdLk5ywFn3CzA1w1qfylHUD
aEf0QZpXcJseddJGSfbUUOvbNR9N/QQ16K1lXl4VFyhmGXDT5Kdfcr0RvIIVrNxF
h4lqHtRRCP6RBRstqbZ2zURgqakn/Xip0iaQL0IdfHBZr396FgknniRYFckKORPG
yM3QKnd66gtMst8I5nkRQlAg/Jb+Gc3egIvuGKWboE1G89NTsN9LTDD3PLj0dUMr
OIuqVjLB8pEC6yk9enrlrqjXQgkLEYhXzq7dLafv5Vkig6Gl0nuuqjqfp0Q1bi1o
yVNAlXe6aUXw92CcghC9bNsKEO1+M52YY5+ofIXlS/SEQbvVYYBLZ5yeiglV6t3S
M6H+vTG0aP9YHzLn/KVOHzGQfXDP7qM5tkf+7diZe7o2fw6O7IvN6fsQXEQQj8TJ
UXJxv2/uJhcuy/tSDgXwHM8Uk34WNbRT7zGTGkQRX0gsbjAea/jYAoWv0ZvQRwpq
Pe79D/i7Cep8qWnA+7AE/3B3S/3dEEYmc0lpe1366A/6GEgk3ktr9PEoQrLChs6I
tu3wnNLB2euC8IKGLQFpGtOO/2/hiAKjyajaBP25w1jF0Wl8Bbqne3uZ2q1GyPFJ
YRmT7/OXpmOH/FVLtwS+8ng1cAmpCujPwteJZNcDG0sF2n/sc0+SQf49fdyUK0ty
+VUwFj9tmWxyR/M=
-----END CERTIFICATE-----

View File

@@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgyyEd6XF4D6ix3QBx
QLmPFD3mTnQlPradDdAylAKq4vmhRANCAATDToRlQSRlqU0POTjfsHsPurLRXy8M
Yz3q5bP2wOADZUnBZOHj7tOgWvWptoFVEb27FDYznAYBCbKRF5PuUKyk
-----END PRIVATE KEY-----

View File

@@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg8kIL4CmCBKxoBSnn
q8bLXUVJmjvHC+z6x/cvgAumDCihRANCAATzG6tOzRq4bp8Jf2crdsqNL8GEnrpX
KoefEoRrHwNCNkGDki7jd/O5xAwXywoBfphNzG1gx5PoBmtEqU1QXixX
-----END PRIVATE KEY-----

View File

@@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgXDQN9d8OCsfrICNa
fBAUv9TO3E8Y4aajp2GN6tq2i3ihRANCAAQ6V/enr7hMBQFZE0RmskBWhL7BOz9k
4/Igr3Tyrzx7cs90VgJdC/7mOYXBrRnhbEGL14tcUksatrvIEk8j1f70
-----END PRIVATE KEY-----

View File

@@ -0,0 +1,22 @@
-----BEGIN CERTIFICATE-----
MIIDkDCCAxWgAwIBAgISBejzwTEzK6Hjst/E8YrdPl9bMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
ODAeFw0yNTEyMDIyMzQ5MzlaFw0yNjAzMDIyMzQ5MzhaMBwxGjAYBgNVBAMTEXdl
YmRhdi5oeXVuZ2kubmV0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE91sdQyM/
I9dPv1UWoB7cTeZix4iGSovjqKqq7h4QkWbYkw/oeN9Lq2vrlDxV9/YocQbPHYux
kMX2sKHJ2P9XqaOCAh8wggIbMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggr
BgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU1uF5L8/g
wT0kx+QylqZBd3qATK4wHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNykcow
MgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5jci5v
cmcvMBwGA1UdEQQVMBOCEXdlYmRhdi5oeXVuZ2kubmV0MBMGA1UdIAQMMAowCAYG
Z4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5jLmxlbmNyLm9yZy85
Mi5jcmwwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgDLOPcViXyEoURfW8Hd+8lu
8ppZzUcKaQWFsMsUwxRY5wAAAZrhrlHuAAAEAwBHMEUCICcbkC0kiFezwuiytS8J
ls3Pr/Be1DLCpHud5D+IXiSVAiEA+2obJv0vd+PrNbAiU8ge86lrALu4c7SY4v3T
Pop6bAsAdgAWgy2r8KklDw/wOqVF/8i/yCPQh0v2BCkn+OcfMxP1+gAAAZrhrlI1
AAAEAwBHMEUCIQD+QmWxJrYQ/GEPaYSRjGkInF6ThJpHbleN9rAXCj/B8wIgCmts
dUNbUlZu5ESTO2Y66vC/p7SRUY3ZSMgLDBuf7IswCgYIKoZIzj0EAwMDaQAwZgIx
AJ5HVqryhK2cfxpudehLcyNAtBqjGRKQp2wEFGyTcPqPTwmNQQIdx/EkkFIPlzAs
/gIxANdR+COlOl83lRczgIAjm9SUnrxtcLNQQ7emrBE2AG59DQXgnsag9ejn5j67
OvtPsg==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,26 @@
-----BEGIN CERTIFICATE-----
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
u1igv3OefnWjSQ==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,48 @@
-----BEGIN CERTIFICATE-----
MIIDkDCCAxWgAwIBAgISBejzwTEzK6Hjst/E8YrdPl9bMAoGCCqGSM49BAMDMDIx
CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF
ODAeFw0yNTEyMDIyMzQ5MzlaFw0yNjAzMDIyMzQ5MzhaMBwxGjAYBgNVBAMTEXdl
YmRhdi5oeXVuZ2kubmV0MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE91sdQyM/
I9dPv1UWoB7cTeZix4iGSovjqKqq7h4QkWbYkw/oeN9Lq2vrlDxV9/YocQbPHYux
kMX2sKHJ2P9XqaOCAh8wggIbMA4GA1UdDwEB/wQEAwIHgDAdBgNVHSUEFjAUBggr
BgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIwADAdBgNVHQ4EFgQU1uF5L8/g
wT0kx+QylqZBd3qATK4wHwYDVR0jBBgwFoAUjw0TovYuftFQbDMYOF1ZjiNykcow
MgYIKwYBBQUHAQEEJjAkMCIGCCsGAQUFBzAChhZodHRwOi8vZTguaS5sZW5jci5v
cmcvMBwGA1UdEQQVMBOCEXdlYmRhdi5oeXVuZ2kubmV0MBMGA1UdIAQMMAowCAYG
Z4EMAQIBMC0GA1UdHwQmMCQwIqAgoB6GHGh0dHA6Ly9lOC5jLmxlbmNyLm9yZy85
Mi5jcmwwggEEBgorBgEEAdZ5AgQCBIH1BIHyAPAAdgDLOPcViXyEoURfW8Hd+8lu
8ppZzUcKaQWFsMsUwxRY5wAAAZrhrlHuAAAEAwBHMEUCICcbkC0kiFezwuiytS8J
ls3Pr/Be1DLCpHud5D+IXiSVAiEA+2obJv0vd+PrNbAiU8ge86lrALu4c7SY4v3T
Pop6bAsAdgAWgy2r8KklDw/wOqVF/8i/yCPQh0v2BCkn+OcfMxP1+gAAAZrhrlI1
AAAEAwBHMEUCIQD+QmWxJrYQ/GEPaYSRjGkInF6ThJpHbleN9rAXCj/B8wIgCmts
dUNbUlZu5ESTO2Y66vC/p7SRUY3ZSMgLDBuf7IswCgYIKoZIzj0EAwMDaQAwZgIx
AJ5HVqryhK2cfxpudehLcyNAtBqjGRKQp2wEFGyTcPqPTwmNQQIdx/EkkFIPlzAs
/gIxANdR+COlOl83lRczgIAjm9SUnrxtcLNQQ7emrBE2AG59DQXgnsag9ejn5j67
OvtPsg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIEVjCCAj6gAwIBAgIQY5WTY8JOcIJxWRi/w9ftVjANBgkqhkiG9w0BAQsFADBP
MQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFy
Y2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBYMTAeFw0yNDAzMTMwMDAwMDBa
Fw0yNzAzMTIyMzU5NTlaMDIxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBF
bmNyeXB0MQswCQYDVQQDEwJFODB2MBAGByqGSM49AgEGBSuBBAAiA2IABNFl8l7c
S7QMApzSsvru6WyrOq44ofTUOTIzxULUzDMMNMchIJBwXOhiLxxxs0LXeb5GDcHb
R6EToMffgSZjO9SNHfY9gjMy9vQr5/WWOrQTZxh7az6NSNnq3u2ubT6HTKOB+DCB
9TAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMB
MBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI8NE6L2Ln7RUGwzGDhdWY4j
cpHKMB8GA1UdIwQYMBaAFHm0WeZ7tuXkAXOACIjIGlj26ZtuMDIGCCsGAQUFBwEB
BCYwJDAiBggrBgEFBQcwAoYWaHR0cDovL3gxLmkubGVuY3Iub3JnLzATBgNVHSAE
DDAKMAgGBmeBDAECATAnBgNVHR8EIDAeMBygGqAYhhZodHRwOi8veDEuYy5sZW5j
ci5vcmcvMA0GCSqGSIb3DQEBCwUAA4ICAQBnE0hGINKsCYWi0Xx1ygxD5qihEjZ0
RI3tTZz1wuATH3ZwYPIp97kWEayanD1j0cDhIYzy4CkDo2jB8D5t0a6zZWzlr98d
AQFNh8uKJkIHdLShy+nUyeZxc5bNeMp1Lu0gSzE4McqfmNMvIpeiwWSYO9w82Ob8
otvXcO2JUYi3svHIWRm3+707DUbL51XMcY2iZdlCq4Wa9nbuk3WTU4gr6LY8MzVA
aDQG2+4U3eJ6qUF10bBnR1uuVyDYs9RhrwucRVnfuDj29CMLTsplM5f5wSV5hUpm
Uwp/vV7M4w4aGunt74koX71n4EdagCsL/Yk5+mAQU0+tue0JOfAV/R6t1k+Xk9s2
HMQFeoxppfzAVC04FdG9M+AC2JWxmFSt6BCuh3CEey3fE52Qrj9YM75rtvIjsm/1
Hl+u//Wqxnu1ZQ4jpa+VpuZiGOlWrqSP9eogdOhCGisnyewWJwRQOqK16wiGyZeR
xs/Bekw65vwSIaVkBruPiTfMOo0Zh4gVa8/qJgMbJbyrwwG97z/PRgmLKCDl8z3d
tA0Z7qq7fta0Gl24uyuB05dqI5J1LvAzKuWdIjT1tP8qCoxSE/xpix8hX2dt3h+/
jujUgFPFZ0EVZ0xSyBNRF3MboGZnYXFUxpNjTWPKpagDHJQmqrAcDmWJnMsFY3jS
u1igv3OefnWjSQ==
-----END CERTIFICATE-----

View File

@@ -0,0 +1,5 @@
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg0jRZ08zpFcL6kgbH
YPiT4xFh60DqE5OqyTqAgCi/0jqhRANCAAT3Wx1DIz8j10+/VRagHtxN5mLHiIZK
i+OoqqruHhCRZtiTD+h430ura+uUPFX39ihxBs8di7GQxfawocnY/1ep
-----END PRIVATE KEY-----

Binary file not shown.

14
ssl-certs/live/README Normal file
View File

@@ -0,0 +1,14 @@
This directory contains your keys and certificates.
`[cert name]/privkey.pem` : the private key for your certificate.
`[cert name]/fullchain.pem`: the certificate file used in most server software.
`[cert name]/chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
`[cert name]/cert.pem` : will break many server configurations, and should not be used
without reading further documentation (see link below).
WARNING: DO NOT MOVE OR RENAME THESE FILES!
Certbot expects these files to remain in this location in order
to function properly!
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

View File

@@ -0,0 +1,14 @@
This directory contains your keys and certificates.
`privkey.pem` : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem` : will break many server configurations, and should not be used
without reading further documentation (see link below).
WARNING: DO NOT MOVE OR RENAME THESE FILES!
Certbot expects these files to remain in this location in order
to function properly!
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

View File

@@ -0,0 +1 @@
../../archive/jellyfin.hyungi.net/cert3.pem

View File

@@ -0,0 +1 @@
../../archive/jellyfin.hyungi.net/chain3.pem

View File

@@ -0,0 +1 @@
../../archive/jellyfin.hyungi.net/fullchain3.pem

View File

@@ -0,0 +1 @@
../../archive/jellyfin.hyungi.net/privkey3.pem

View File

@@ -0,0 +1 @@
jellyfin.hyungi.net

View File

@@ -0,0 +1,14 @@
This directory contains your keys and certificates.
`privkey.pem` : the private key for your certificate.
`fullchain.pem`: the certificate file used in most server software.
`chain.pem` : used for OCSP stapling in Nginx >=1.3.7.
`cert.pem` : will break many server configurations, and should not be used
without reading further documentation (see link below).
WARNING: DO NOT MOVE OR RENAME THESE FILES!
Certbot expects these files to remain in this location in order
to function properly!
We recommend not moving these files. For more information, see the Certbot
User Guide at https://certbot.eff.org/docs/using.html#where-are-my-certificates.

View File

@@ -0,0 +1 @@
../../archive/webdav.hyungi.net/cert1.pem

View File

@@ -0,0 +1 @@
../../archive/webdav.hyungi.net/chain1.pem

View File

@@ -0,0 +1 @@
../../archive/webdav.hyungi.net/fullchain1.pem

View File

@@ -0,0 +1 @@
../../archive/webdav.hyungi.net/privkey1.pem

View File

@@ -0,0 +1,15 @@
version = 5.1.0
archive_dir = /etc/letsencrypt/archive/jellyfin.hyungi.net
cert = /etc/letsencrypt/live/jellyfin.hyungi.net/cert.pem
privkey = /etc/letsencrypt/live/jellyfin.hyungi.net/privkey.pem
chain = /etc/letsencrypt/live/jellyfin.hyungi.net/chain.pem
fullchain = /etc/letsencrypt/live/jellyfin.hyungi.net/fullchain.pem
[renewalparams]
account = 1551bf09497bea2db30278b55f96806e
authenticator = webroot
webroot_path = /var/www/certbot,
server = https://acme-v02.api.letsencrypt.org/directory
key_type = ecdsa
[[webroot_map]]
jellyfin.hyungi.net = /var/www/certbot
komga.hyungi.net = /var/www/certbot

View File

@@ -0,0 +1,13 @@
version = 5.1.0
archive_dir = /etc/letsencrypt/archive/webdav.hyungi.net
cert = /etc/letsencrypt/live/webdav.hyungi.net/cert.pem
privkey = /etc/letsencrypt/live/webdav.hyungi.net/privkey.pem
chain = /etc/letsencrypt/live/webdav.hyungi.net/chain.pem
fullchain = /etc/letsencrypt/live/webdav.hyungi.net/fullchain.pem
[renewalparams]
account = 1551bf09497bea2db30278b55f96806e
authenticator = webroot
webroot_path = /var/www/certbot,
server = https://acme-v02.api.letsencrypt.org/directory
key_type = ecdsa
[[webroot_map]]

57
start-proxy.sh Executable file
View File

@@ -0,0 +1,57 @@
#!/bin/bash
echo "🔒 젤리핀 앱용 보안 프록시 시작 중..."
echo "========================================"
# 필요한 디렉토리 생성
mkdir -p fail2ban-data fail2ban-log ssl-certs
# 권한 설정
chmod 755 fail2ban-data fail2ban-log ssl-certs
echo "📁 디렉토리 준비 완료"
# 젤리핀 앱 실행 상태 확인
if pgrep -f "Jellyfin Server" > /dev/null; then
echo "✅ 젤리핀 앱이 실행 중입니다."
else
echo "⚠️ 젤리핀 앱이 실행되지 않았습니다."
echo " Applications/Jellyfin.app을 실행해주세요."
exit 1
fi
# Docker Compose 실행
docker-compose up -d
echo ""
echo "📊 서비스 상태 확인 중..."
echo "========================================"
docker-compose ps
echo ""
echo "🔒 보안 프록시 설정 정보:"
echo "========================================"
echo "• 기존 젤리핀 앱: http://localhost:8096 (직접 접속)"
echo "• 보안 프록시: http://localhost:8097 (보안 강화)"
echo "• 외부 도메인: http://jellyfin.hyungi.net:8097"
echo "• 보안 기능: ✅ Nginx + Rate Limiting + Fail2Ban"
echo ""
echo "📋 설정 체크리스트:"
echo "========================================"
echo "1. ✅ 젤리핀 앱 실행 중"
echo "2. ✅ 보안 프록시 시작됨"
echo "3. ⚠️ 라우터 포트 포워딩:"
echo " 외부 8097 → 192.168.219.104:8097 (TCP)"
echo "4. ⚠️ Cloudflare DNS 설정:"
echo " jellyfin.hyungi.net → 122.153.226.114 (DNS only)"
echo ""
echo "🎯 접속 방법:"
echo "• 내부 (직접): http://192.168.219.104:8096"
echo "• 내부 (보안): http://192.168.219.104:8097"
echo "• 외부 (보안): http://jellyfin.hyungi.net:8097"
echo ""
echo "✅ 젤리핀 앱용 보안 프록시가 시작되었습니다!"