Debian + Postfix + Dovecot + ๋ฉ€ํ‹ฐ๋„๋ฉ”์ธ + SSL + IPv6 + OpenVPN + ๋ฉ€ํ‹ฐ ์ธํ„ฐํŽ˜์ด์Šค + SpamAssassin-learn + ๋ฐ”์ธ๋”ฉ

์ด ๋ฌธ์„œ์—์„œ๋Š” ์ตœ์‹  ๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.
์ ‘๋ฏธ์‚ฌ + ๋น„๋‘˜๊ธฐ์žฅ. SPF + DKIM + rDNS. IPv6์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
TSL ์•”ํ˜ธํ™” ์‚ฌ์šฉ. ์—ฌ๋Ÿฌ ๋„๋ฉ”์ธ์„ ์ง€์›ํ•˜๋ฉฐ ์‹ค์ œ SSL ์ธ์ฆ์„œ๋„ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.
์ŠคํŒธ ๋ฐฉ์ง€ ๋ณดํ˜ธ ๊ธฐ๋Šฅ๊ณผ ๋‹ค๋ฅธ ๋ฉ”์ผ ์„œ๋ฒ„์˜ ๋†’์€ ์ŠคํŒธ ๋ฐฉ์ง€ ๋“ฑ๊ธ‰์„ ๊ฐ–์ถ”๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ๋ฌผ๋ฆฌ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
OpenVPN์„ ์‚ฌ์šฉํ•˜๋ฉด IPv4๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋˜๊ณ  IPv6์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ๊ธฐ์ˆ ์„ ๋ฐฐ์šฐ๊ณ  ์‹ถ์ง€ ์•Š์ง€๋งŒ ๊ทธ๋Ÿฌํ•œ ์„œ๋ฒ„๋ฅผ ์„ค์ •ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ด ๊ธฐ์‚ฌ๊ฐ€ ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

์ด ๊ธฐ์‚ฌ์—์„œ๋Š” ๋ชจ๋“  ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์„ค๋ช…ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ‘œ์ค€์œผ๋กœ ๊ตฌ์„ฑ๋˜์ง€ ์•Š์•˜๊ฑฐ๋‚˜ ์†Œ๋น„์ž ๊ด€์ ์—์„œ ์ค‘์š”ํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ”์ผ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋Š” ๋™๊ธฐ๋Š” ๋‚˜์˜ ์˜ค๋žœ ๊ฟˆ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์–ด๋ฆฌ์„๊ฒŒ ๋“ค๋ฆด ์ˆ˜๋„ ์žˆ์ง€๋งŒ IMHO, ์ข‹์•„ํ•˜๋Š” ๋ธŒ๋žœ๋“œ์˜ ์ƒˆ ์ฐจ๋ฅผ ๊ฟˆ๊พธ๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ๋‚ซ์Šต๋‹ˆ๋‹ค.

IPv6๋ฅผ ์„ค์ •ํ•˜๋Š” ๋™๊ธฐ๋Š” ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค. IT ์ „๋ฌธ๊ฐ€๊ฐ€ ์‚ด์•„๋‚จ๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋Š์ž„์—†์ด ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ฒ€์—ด์— ๋งž์„œ ์‹ธ์šฐ๋Š” ๋ฐ ์กฐ๊ธˆ์ด๋‚˜๋งˆ ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

OpenVPN์„ ์„ค์ •ํ•˜๋Š” ๋™๊ธฐ๋Š” ๋กœ์ปฌ ์‹œ์Šคํ…œ์—์„œ IPv6๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ๋ฌผ๋ฆฌ์  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์„ค์ •ํ•˜๋ ค๋Š” ๋™๊ธฐ๋Š” ๋‚ด ์„œ๋ฒ„์— "๋Š๋ฆฌ์ง€๋งŒ ๋ฌด์ œํ•œ"์ธ ์ธํ„ฐํŽ˜์ด์Šค ํ•˜๋‚˜์™€ "๋น ๋ฅด์ง€๋งŒ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋˜๋Š”" ๋˜ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Bind ์„ค์ •์„ ํ•˜๋Š” ์ด์œ ๋Š” ์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ISP๊ฐ€ ๋ถˆ์•ˆ์ •ํ•œ DNS ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•˜๋Š”๋ฐ, Google๋„ ๊ฐ€๋” ์‹คํŒจํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ฐœ์ธ์šฉ์œผ๋กœ ์•ˆ์ •์ ์ธ DNS ์„œ๋ฒ„๋ฅผ ์›ํ•ฉ๋‹ˆ๋‹ค.

๊ธ€์„ ์“ฐ๊ฒŒ ๋œ ๋™๊ธฐ - 10๊ฐœ์›” ์ „์— ์ดˆ์•ˆ์„ ์ผ๋Š”๋ฐ ๋ฒŒ์จ ๋‘ ๋ฒˆ์ด๋‚˜ ๋ดค์–ด์š”. ์ž‘์„ฑ์ž๊ฐ€ ์ •๊ธฐ์ ์œผ๋กœ ํ•„์š”ํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ๋„ ํ•„์š”ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๋ฉ”์ผ ์„œ๋ฒ„์— ๋Œ€ํ•œ ๋ณดํŽธ์ ์ธ ์†”๋ฃจ์…˜์€ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” "์ด๋ ‡๊ฒŒ ํ•˜๊ณ  ๋ชจ๋“  ๊ฒƒ์ด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•˜๋ฉด ์—ฌ๋ถ„์˜ ๊ฒƒ๋“ค์„ ๋ฒ„๋ฆฌ์„ธ์š”"์™€ ๊ฐ™์€ ๊ฒƒ์„ ์“ฐ๋ ค๊ณ  ๋…ธ๋ ฅํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

tech.ru ํšŒ์‚ฌ์—๋Š” Colocation ์„œ๋ฒ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. OVH, ํ—ค์ธ ๋„ˆ, AWS์™€ ๋น„๊ต๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด tech.ru์™€์˜ ํ˜‘๋ ฅ์ด ํ›จ์”ฌ ๋” ํšจ๊ณผ์ ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ๋น„์•ˆ 9๊ฐ€ ์„œ๋ฒ„์— ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„์—๋Š” 'eno2'๊ณผ 'eno1'๋ผ๋Š” 2๊ฐœ์˜ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ๋ฌด์ œํ•œ์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ๊ฐ๊ฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.

'eno3' ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” XX.XX.XX.X0, XX.XX.XX.X1, XX.XX.XX.X2, 'eno1' ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” XX.XX.XX.X5 ๋“ฑ 2๊ฐœ์˜ ๊ณ ์ • IP ์ฃผ์†Œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. .

์‚ฌ์šฉ ๊ฐ€๋Šฅ XXXX:XXXX:XXXX:XXXX::/64 `eno6` ์ธํ„ฐํŽ˜์ด์Šค์— ํ• ๋‹น๋œ IPv1 ์ฃผ์†Œ ํ’€๊ณผ XXXX:XXXX:XXXX:XXXX:1:2::/96์ด ๋‚ด ์š”์ฒญ์— ๋”ฐ๋ผ `eno2`์— ํ• ๋‹น๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

'domain3.com', 'domain1.com', 'domain2.com' 3๊ฐœ์˜ ๋„๋ฉ”์ธ์ด ์žˆ์Šต๋‹ˆ๋‹ค. `domain1.com`๊ณผ `domain3.com`์— ๋Œ€ํ•œ SSL ์ธ์ฆ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ํŽธ์ง€ํ•จ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์‹ถ์€ Google ๊ณ„์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.[์ด๋ฉ”์ผ ๋ณดํ˜ธ]`(Gmail ์ธํ„ฐํŽ˜์ด์Šค์—์„œ ์ง์ ‘ ๋ฉ”์ผ ์ˆ˜์‹  ๋ฐ ๋ณด๋‚ด๊ธฐ).
์šฐ์ฒดํ†ต์ด ์žˆ์„ ๊ฑฐ์—์š”`[์ด๋ฉ”์ผ ๋ณดํ˜ธ]`, ๋‚ด Gmail์—์„œ ๋ณด๋ ค๋Š” ์ด๋ฉ”์ผ์˜ ์‚ฌ๋ณธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  '๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ๋ฌด์–ธ๊ฐ€๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†์Šต๋‹ˆ๋‹ค.[์ด๋ฉ”์ผ ๋ณดํ˜ธ]` ์›น ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด.

์šฐ์ฒดํ†ต์ด ์žˆ์„ ๊ฑฐ์—์š”`[์ด๋ฉ”์ผ ๋ณดํ˜ธ]', Ivanov๊ฐ€ iPhone์—์„œ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ณด๋‚ธ ์ด๋ฉ”์ผ์€ ๋ชจ๋“  ์ตœ์‹  ์ŠคํŒธ ๋ฐฉ์ง€ ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ค€์ˆ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ณต์šฉ ๋„คํŠธ์›Œํฌ์—๋Š” ์ตœ๊ณ  ์ˆ˜์ค€์˜ ์•”ํ˜ธํ™”๊ฐ€ ์ œ๊ณต๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
ํŽธ์ง€ ๋ณด๋‚ด๊ธฐ ๋ฐ ๋ฐ›๊ธฐ ๋ชจ๋‘์— ๋Œ€ํ•ด IPv6 ์ง€์›์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฉ”์ผ์„ ์ ˆ๋Œ€ ์‚ญ์ œํ•˜์ง€ ์•Š๋Š” SpamAssassin์ด ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฐ˜์†ก๋˜๊ฑฐ๋‚˜ ๊ฑด๋„ˆ๋›ฐ๊ฑฐ๋‚˜ IMAP "์ŠคํŒธ" ํด๋”๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.
SpamAssassin ์ž๋™ ํ•™์Šต์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŽธ์ง€๋ฅผ ์ŠคํŒธ ํด๋”๋กœ ์ด๋™ํ•˜๋ฉด ์—ฌ๊ธฐ์—์„œ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค. ์ŠคํŒธ ํด๋”์—์„œ ํŽธ์ง€๋ฅผ ์ด๋™ํ•˜๋ฉด ์ด๋ฅผ ํ†ตํ•ด ํ•™์Šตํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. SpamAssassin ๊ต์œก ๊ฒฐ๊ณผ๋Š” ํŽธ์ง€๊ฐ€ ์ŠคํŒธ ํด๋”์— ์žˆ๋Š”์ง€ ์—ฌ๋ถ€์— ์˜ํ–ฅ์„ ๋ฏธ์นฉ๋‹ˆ๋‹ค.
PHP ์Šคํฌ๋ฆฝํŠธ๋Š” ํŠน์ • ์„œ๋ฒ„์˜ ๋ชจ๋“  ๋„๋ฉ”์ธ์„ ๋Œ€์‹ ํ•˜์—ฌ ๋ฉ”์ผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
IPv6๊ฐ€ ์—†๋Š” ํด๋ผ์ด์–ธํŠธ์—์„œ IPv6์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ openvpn ์„œ๋น„์Šค๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋จผ์ € IPv6๋ฅผ ํฌํ•จํ•˜์—ฌ ์ธํ„ฐํŽ˜์ด์Šค์™€ ๋ผ์šฐํŒ…์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ IPv4๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐํ•˜๊ณ  ํด๋ผ์ด์–ธํŠธ์— ์ •์  ์‹ค์ œ IPv6 ์ฃผ์†Œ๋ฅผ ์ œ๊ณตํ•˜๋Š” OpenVPN์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ ๋ชจ๋“  IPv6 ์„œ๋น„์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ธํ„ฐ๋„ท์˜ ๋ชจ๋“  IPv6 ๋ฆฌ์†Œ์Šค์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฌธ์ž + SPF + DKIM + rDNS ๋ฐ ๊ธฐํƒ€ ์œ ์‚ฌํ•œ ์ž‘์€ ํ•ญ๋ชฉ์„ ๋ณด๋‚ด๋„๋ก Postfix๋ฅผ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ Dovecot์„ ๊ตฌ์„ฑํ•˜๊ณ  Multidomain์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ SpamAssassin์„ ๊ตฌ์„ฑํ•˜๊ณ  ๊ต์œก์„ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋งˆ์ง€๋ง‰์œผ๋กœ ๋ฐ”์ธ๋“œ๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

============= ๋‹ค์ค‘ ์ธํ„ฐํŽ˜์ด์Šค =============

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด "/etc/network/interfaces"์— ์ด๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eno1
iface eno1 inet static
        address XX.XX.XX.X0/24
        gateway XX.XX.XX.1
        dns-nameservers 127.0.0.1 213.248.1.6
        post-up ip route add XX.XX.XX.0/24 dev eno1 src XX.XX.XX.X0 table eno1t
        post-up ip route add default via XX.XX.XX.1 table eno1t
        post-up ip rule add table eno1t from XX.XX.XX.X0
        post-up ip rule add table eno1t to XX.XX.XX.X0

auto eno1:1
iface eno1:1 inet static
address XX.XX.XX.X1
netmask 255.255.255.0
        post-up ip rule add table eno1t from XX.XX.XX.X1
        post-up ip rule add table eno1t to XX.XX.XX.X1
        post-up   ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t
        post-down ip route del 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t

auto eno1:2
iface eno1:2 inet static
address XX.XX.XX.X2
netmask 255.255.255.0
        post-up ip rule add table eno1t from XX.XX.XX.X2
        post-up ip rule add table eno1t to XX.XX.XX.X2

iface eno1 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:1::/64
        gateway XXXX:XXXX:XXXX:XXXX::1
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACE
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:2/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:1:1:2/64 dev $IFACE

# The secondary network interface
allow-hotplug eno2
iface eno2 inet static
        address XX.XX.XX.X5
        netmask 255.255.255.0
        post-up   ip route add XX.XX.XX.0/24 dev eno2 src XX.XX.XX.X5 table eno2t
        post-up   ip route add default via XX.XX.XX.1 table eno2t
        post-up   ip rule add table eno2t from XX.XX.XX.X5
        post-up   ip rule add table eno2t to XX.XX.XX.X5
        post-up   ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X5 table eno2t
        post-down ip route del 10.8.0.0/24 dev tun0 src XX.XX.XX.X5 table eno2t

iface eno2 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:2::/96
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:2:1:1/64 dev $IFACE
        up   ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:2:1:2/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:2:1:1/64 dev $IFACE
        down ip -6 addr del XXXX:XXXX:XXXX:XXXX:1:2:1:2/64 dev $IFACE

# OpenVPN network
iface tun0 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:3::/80

์ด๋Ÿฌํ•œ ์„ค์ •์€ tech.ru์˜ ๋ชจ๋“  ์„œ๋ฒ„์— ์ ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ(์ง€์›ํŒ€๊ณผ ์•ฝ๊ฐ„์˜ ์กฐ์ •์„ ๊ฑฐ์ณ) ์ฆ‰์‹œ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Hetzner, OVH์—์„œ ๋น„์Šทํ•œ ์„ค์ •์„ ํ•ด๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค๋ฉด ๊ทธ๊ณณ์—์„œ๋Š” ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋” ์–ด๋ ต๋‹ค.

eno1์€ ๋„คํŠธ์›Œํฌ ์นด๋“œ #1์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(๋Š๋ฆฌ์ง€๋งŒ ๋ฌด์ œํ•œ).
eno2๋Š” ๋„คํŠธ์›Œํฌ ์นด๋“œ #2์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(๋น ๋ฅด์ง€๋งŒ ์š”๊ธˆ์ด ๋ถ€๊ณผ๋จ).
tun0์€ OpenVPN์˜ ๊ฐ€์ƒ ๋„คํŠธ์›Œํฌ ์นด๋“œ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.
XX.XX.XX.X0 - eno4์˜ IPv1 #1.
XX.XX.XX.X1 - eno4์˜ IPv2 #1.
XX.XX.XX.X2 - eno4์˜ IPv3 #1.
XX.XX.XX.X5 - eno4์˜ IPv1 #2.
XX.XX.XX.1 - IPv4 ๊ฒŒ์ดํŠธ์›จ์ด.
XXXX:XXXX:XXXX:XXXX::/64 - ์ „์ฒด ์„œ๋ฒ„์— ๋Œ€ํ•œ IPv6.
XXXX:XXXX:XXXX:XXXX:1:2::/96 - eno6์˜ ๊ฒฝ์šฐ IPv2, ์™ธ๋ถ€์˜ ๋‹ค๋ฅธ ๋ชจ๋“  ํ•ญ๋ชฉ์€ eno1๋กœ ๋“ค์–ด๊ฐ‘๋‹ˆ๋‹ค.
XXXX:XXXX:XXXX:XXXX::1 โ€” IPv6 ๊ฒŒ์ดํŠธ์›จ์ด(์ด ์ž‘์—…์€ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ๋‹ค๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉํ•  ๊ฐ€์น˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. IPv6 ์Šค์œ„์น˜๋ฅผ ์ง€์ •ํ•˜์‹ญ์‹œ์˜ค).
dns-nameservers - 127.0.0.1(๋ฐ”์ธ๋“œ๊ฐ€ ๋กœ์ปฌ๋กœ ์„ค์น˜๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—) ๋ฐ 213.248.1.6(tech.ru์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž„)์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

"table eno1t" ๋ฐ "table eno2t" - ์ด๋Ÿฌํ•œ ๊ฒฝ๋กœ ๊ทœ์น™์˜ ์˜๋ฏธ๋Š” eno1 ->๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์ด๋ฅผ ํ†ตํ•ด ๋‚˜๊ฐ€๊ณ  eno2 ->๋ฅผ ํ†ตํ•ด ๋“ค์–ด์˜ค๋Š” ํŠธ๋ž˜ํ”ฝ์ด ์ด๋ฅผ ํ†ตํ•ด ๋‚˜๊ฐ€๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„์— ์˜ํ•ด ์‹œ์ž‘๋œ ์—ฐ๊ฒฐ์€ eno1์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค.

ip route add default via XX.XX.XX.1 table eno1t

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ "table eno1t" ->๋กœ ํ‘œ์‹œ๋œ ๊ทœ์น™์— ์†ํ•˜๋Š” ๋ชจ๋“  ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ํŠธ๋ž˜ํ”ฝ์ด eno1 ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ „์†ก๋˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ip route add XX.XX.XX.0/24 dev eno1 src XX.XX.XX.X0 table eno1t

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์„œ๋ฒ„์—์„œ ์‹œ์ž‘๋œ ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์ด eno1 ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ „๋‹ฌ๋˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ip rule add table eno1t from XX.XX.XX.X0
ip rule add table eno1t to XX.XX.XX.X0

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ํ‘œ์‹œ ๊ทœ์น™์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

auto eno1:2
iface eno1:2 inet static
address XX.XX.XX.X2
netmask 255.255.255.0
        post-up ip rule add table eno1t from XX.XX.XX.X2
        post-up ip rule add table eno1t to XX.XX.XX.X2

์ด ๋ธ”๋ก์€ eno4 ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•œ ๋‘ ๋ฒˆ์งธ IPv1๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

ip route add 10.8.0.0/24 dev tun0 src XX.XX.XX.X1 table eno1t

์ด ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ OpenVPN ํด๋ผ์ด์–ธํŠธ์—์„œ XX.XX.XX.X4์„ ์ œ์™ธํ•˜๊ณ  ๋กœ์ปฌ IPv0๋กœ ๊ฒฝ๋กœ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
์ด ๋ช…๋ น์ด ๋ชจ๋“  IPv4์— ์ถฉ๋ถ„ํ•œ ์ด์œ ๋ฅผ ์•„์ง๋„ ์ดํ•ดํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค.

iface eno1 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:1::/64
        gateway XXXX:XXXX:XXXX:XXXX::1

์—ฌ๊ธฐ์—์„œ ์ธํ„ฐํŽ˜์ด์Šค ์ž์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ์ด๋ฅผ "๋ฐœ์‹ " ์ฃผ์†Œ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ์‹์œผ๋กœ๋“  ๋‹ค์‹œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

":1:1::"์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•ฉ๋‹ˆ๊นŒ? OpenVPN์€ ์ด๋ฅผ ์œ„ํ•ด์„œ๋งŒ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๊ฒŒ์ดํŠธ์›จ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด์„œ๋Š” ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ์—ฌ๊ธฐ์— ์„œ๋ฒ„๊ฐ€ ์—ฐ๊ฒฐ๋œ ์Šค์œ„์น˜์˜ IPv6์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์–ด๋–ค ์ด์œ ๋กœ IPv6๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์•„๋งˆ๋„ ์ผ์ข…์˜ tech.ru ๋ฌธ์ œ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ip -6 addr add XXXX:XXXX:XXXX:XXXX:1:1:1:1/64 dev $IFACE

์ด๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— IPv6 ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. XNUMX๊ฐœ์˜ ์ฃผ์†Œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค๋ฉด ์ด๋Š” ์ด ํŒŒ์ผ์— XNUMX๊ฐœ์˜ ์ค„์ด ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.

iface eno1 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:1::/64
...
iface eno2 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:2::/96
...
iface tun0 inet6 static
        address XXXX:XXXX:XXXX:XXXX:1:3::/80

๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ชจ๋“  ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฃผ์†Œ์™€ ์„œ๋ธŒ๋„ท์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.
eno1 - "์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค./64" - ์ด๊ฒƒ์ด ์šฐ๋ฆฌ์˜ ์ „์ฒด ์ฃผ์†Œ ํ’€์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
tun0 - ์„œ๋ธŒ๋„ท์€ eno1๋ณด๋‹ค ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด OpenVPN ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด IPv6 ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
eno2 - ์„œ๋ธŒ๋„ท์€ tun0๋ณด๋‹ค ์ปค์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด OpenVPN ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋กœ์ปฌ IPv6 ์ฃผ์†Œ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ธŒ๋„ท ๋‹จ๊ณ„๋ฅผ 16์œผ๋กœ ์„ ํƒํ–ˆ์ง€๋งŒ ์›ํ•˜์‹œ๋ฉด "1" ๋‹จ๊ณ„๋„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ 64+16 = 80, 80+16 = 96์ž…๋‹ˆ๋‹ค.

๋”์šฑ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด:
XXXX:XXXX:XXXX:XXXX:1:1:YYYY:YYYY๋Š” eno1 ์ธํ„ฐํŽ˜์ด์Šค์˜ ํŠน์ • ์‚ฌ์ดํŠธ ๋˜๋Š” ์„œ๋น„์Šค์— ํ• ๋‹น๋˜์–ด์•ผ ํ•˜๋Š” ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
XXXX:XXXX:XXXX:XXXX:1:2:YYYY:YYYY๋Š” eno2 ์ธํ„ฐํŽ˜์ด์Šค์˜ ํŠน์ • ์‚ฌ์ดํŠธ ๋˜๋Š” ์„œ๋น„์Šค์— ํ• ๋‹น๋˜์–ด์•ผ ํ•˜๋Š” ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
XXXX:XXXX:XXXX:XXXX:1:3:YYYY:YYYY๋Š” OpenVPN ํด๋ผ์ด์–ธํŠธ์— ํ• ๋‹น๋˜๊ฑฐ๋‚˜ OpenVPN ์„œ๋น„์Šค ์ฃผ์†Œ๋กœ ์‚ฌ์šฉ๋˜์–ด์•ผ ํ•˜๋Š” ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.

๋„คํŠธ์›Œํฌ๋ฅผ ๊ตฌ์„ฑํ•˜๋ ค๋ฉด ์„œ๋ฒ„๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
IPv4 ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์‹คํ–‰ ์‹œ ์„ ํƒ๋ฉ๋‹ˆ๋‹ค(ํ™”๋ฉด์— ๋ž˜ํ•‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ด ๋ช…๋ น์€ ๋‹จ์ˆœํžˆ ์„œ๋ฒ„์˜ ๋„คํŠธ์›Œํฌ๋ฅผ ์ค‘๋‹จ์‹œํ‚ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค).

/etc/init.d/networking restart

"/etc/iproute2/rt_tables" ํŒŒ์ผ ๋์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

100 eno1t
101 eno2t

์ด๊ฒƒ์ด ์—†์œผ๋ฉด "/etc/network/interfaces" ํŒŒ์ผ์—์„œ ์‚ฌ์šฉ์ž ์ •์˜ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
์ˆซ์ž๋Š” ๊ณ ์œ ํ•ด์•ผ ํ•˜๋ฉฐ 65535๋ณด๋‹ค ์ž‘์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

IPv6 ๋ณ€๊ฒฝ ์‚ฌํ•ญ์€ ์žฌ๋ถ€ํŒ…ํ•˜์ง€ ์•Š๊ณ ๋„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ์ตœ์†Œํ•œ ์„ธ ๊ฐ€์ง€ ๋ช…๋ น์„ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ip -6 addr ...
ip -6 route ...
ip -6 neigh ...

"/etc/sysctl.conf" ์„ค์ •

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward = 1

# Do not accept ICMP redirects (prevent MITM attacks)
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# Do not send ICMP redirects (we are not a router)
net.ipv4.conf.all.send_redirects = 0

# For receiving ARP replies
net.ipv4.conf.all.arp_filter = 0
net.ipv4.conf.default.arp_filter = 0

# For sending ARP
net.ipv4.conf.all.arp_announce = 0
net.ipv4.conf.default.arp_announce = 0

# Enable IPv6
net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

# IPv6 configuration
net.ipv6.conf.all.autoconf = 1
net.ipv6.conf.all.accept_ra = 0

# For OpenVPN
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1

# For nginx on boot
net.ipv6.ip_nonlocal_bind = 1

์ด๊ฒƒ์ด ๋‚ด ์„œ๋ฒ„์˜ "sysctl" ์„ค์ •์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ์ ์„ ์ง€์ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

net.ipv4.ip_forward = 1

์ด๊ฒƒ์ด ์—†์œผ๋ฉด OpenVPN์€ ์ „ํ˜€ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

net.ipv6.ip_nonlocal_bind = 1

์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ž‘๋™๋œ ์งํ›„ IPv6(์˜ˆ: nginx)๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฃผ์†Œ๋Š” ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์ด๋Ÿฌํ•œ ์„ค์ •์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.all.proxy_ndp = 1

์ด๋Ÿฌํ•œ IPv6 ์„ค์ •์ด ์—†์œผ๋ฉด OpenVPN ํด๋ผ์ด์–ธํŠธ์˜ ํŠธ๋ž˜ํ”ฝ์ด ์™ธ๋ถ€๋กœ ๋‚˜๊ฐ€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์„ค์ •์€ ๊ด€๋ จ์ด ์—†๊ฑฐ๋‚˜ ๊ทธ ์šฉ๋„๊ฐ€ ๊ธฐ์–ต๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋งŒ์•ฝ์„ ๋Œ€๋น„ํ•ด "๊ทธ๋Œ€๋กœ" ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

์„œ๋ฒ„๋ฅผ ์žฌ๋ถ€ํŒ…ํ•˜์ง€ ์•Š๊ณ  ์ด ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ ์šฉํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น์„ ์‹คํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

sysctl -p

"ํ…Œ์ด๋ธ”" ๊ทœ์น™์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ: habr.com/post/108690

============= OpenVPN ==============

OpenVPN IPv4๋Š” iptables ์—†์ด๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

VPN์— ๋Œ€ํ•œ ๋‚ด iptables๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

iptables -A INPUT -p udp -s YY.YY.YY.YY --dport 1194 -j ACCEPT
iptables -A FORWARD -i tun0 -o eno1 -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j SNAT --to-source XX.XX.XX.X0
##iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADE
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j DROP
iptables -A FORWARD -p udp --dport 1194 -j DROP

YY.YY.YY.YY๋Š” ๋กœ์ปฌ ์‹œ์Šคํ…œ์˜ ๊ณ ์ • IPv4 ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
10.8.0.0/24 - IPv4 openvpn ๋„คํŠธ์›Œํฌ. openvpn ํด๋ผ์ด์–ธํŠธ์˜ IPv4 ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค.
๊ทœ์น™์˜ ์ผ๊ด€์„ฑ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

iptables -A INPUT -p udp -s YY.YY.YY.YY --dport 1194 -j ACCEPT
iptables -A FORWARD -i tun0 -o eno1 -j ACCEPT
...
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p udp --dport 1194 -j DROP
iptables -A FORWARD -p udp --dport 1194 -j DROP

์ด๋Š” ๋‚ด ๊ณ ์ • IP์—์„œ ๋‚˜๋งŒ OpenVPN์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ œํ•œ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j SNAT --to-source XX.XX.XX.X0
  -- ะธะปะธ --
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eno1 -j MASQUERADE

OpenVPN ํด๋ผ์ด์–ธํŠธ์™€ ์ธํ„ฐ๋„ท ๊ฐ„์— IPv4 ํŒจํ‚ท์„ ์ „๋‹ฌํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋ช…๋ น ์ค‘ ํ•˜๋‚˜๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ๊ฒฝ์šฐ์—๋Š” ์˜ต์…˜ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์ ํ•ฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋‘ ๋ช…๋ น ๋ชจ๋‘ ๋‚ด ๊ฒฝ์šฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
๋ฌธ์„œ๋ฅผ ์ฝ์€ ํ›„ CPU๋ฅผ ๋œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์žฌ๋ถ€ํŒ… ํ›„ ๋ชจ๋“  iptables ์„ค์ •์„ ์„ ํƒํ•˜๋ ค๋ฉด ํ•ด๋‹น ์„ค์ •์„ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

๊ทธ๋Ÿฌํ•œ ์ด๋ฆ„์€ ์šฐ์—ฐํžˆ ์„ ํƒ๋œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. "iptables-perpersist" ํŒจํ‚ค์ง€์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

apt-get install iptables-persistent

๊ธฐ๋ณธ OpenVPN ํŒจํ‚ค์ง€ ์„ค์น˜:

apt-get install openvpn easy-rsa

์ธ์ฆ์„œ์šฉ ํ…œํ”Œ๋ฆฟ์„ ์„ค์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค(๊ท€ํ•˜์˜ ๊ฐ’์œผ๋กœ ๋Œ€์ฒด).

make-cadir ~/openvpn-ca
cd ~/openvpn-ca
ln -s openssl-1.0.0.cnf openssl.cnf

์ธ์ฆ์„œ ํ…œํ”Œ๋ฆฟ ์„ค์ •์„ ํŽธ์ง‘ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

mcedit vars

...
# These are the default values for fields
# which will be placed in the certificate.
# Don't leave any of these fields blank.
export KEY_COUNTRY="RU"
export KEY_PROVINCE="Krasnodar"
export KEY_CITY="Dinskaya"
export KEY_ORG="Own"
export KEY_EMAIL="[email protected]"
export KEY_OU="VPN"

# X509 Subject Field
export KEY_NAME="server"
...

์„œ๋ฒ„ ์ธ์ฆ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค:

cd ~/openvpn-ca
source vars
./clean-all
./build-ca
./build-key-server server
./build-dh
openvpn --genkey --secret keys/ta.key

์ตœ์ข… "client-name.opvn" ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ค€๋น„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
mcedit ~/client-configs/base.conf

# Client mode
client

# Interface tunnel type
dev tun

# TCP protocol
proto tcp-client

# Address/Port of VPN server
remote XX.XX.XX.X0 1194

# Don't bind to local port/address
nobind

# Don't need to re-read keys and re-create tun at restart
persist-key
persist-tun

# Remote peer must have a signed certificate
remote-cert-tls server
ns-cert-type server

# Enable compression
comp-lzo

# Custom
ns-cert-type server
tls-auth ta.key 1
cipher DES-EDE3-CBC

๋ชจ๋“  ํŒŒ์ผ์„ ๋‹จ์ผ opvn ํŒŒ์ผ๋กœ ๋ณ‘ํ•ฉํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ค€๋น„ํ•ฉ์‹œ๋‹ค.

mcedit ~/client-configs/make_config.sh
chmod 700 ~/client-configs/make_config.sh

#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} 
    <(echo -e '<ca>') 
    ${KEY_DIR}/ca.crt 
    <(echo -e '</ca>n<cert>') 
    ${KEY_DIR}/.crt 
    <(echo -e '</cert>n<key>') 
    ${KEY_DIR}/.key 
    <(echo -e '</key>n<tls-auth>') 
    ${KEY_DIR}/ta.key 
    <(echo -e '</tls-auth>') 
    > ${OUTPUT_DIR}/.ovpn

์ฒซ ๋ฒˆ์งธ OpenVPN ํด๋ผ์ด์–ธํŠธ ์ƒ์„ฑ:

cd ~/openvpn-ca
source vars
./build-key client-name
cd ~/client-configs
./make_config.sh client-name

"~/client-configs/files/client-name.ovpn" ํŒŒ์ผ์ด ํด๋ผ์ด์–ธํŠธ ์žฅ์น˜๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

iOS ํด๋ผ์ด์–ธํŠธ์˜ ๊ฒฝ์šฐ ๋‹ค์Œ ํŠธ๋ฆญ์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
"tls-auth" ํƒœ๊ทธ์˜ ๋‚ด์šฉ์—๋Š” ์ฃผ์„์ด ์—†์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ "tls-auth" ํƒœ๊ทธ ๋ฐ”๋กœ ์•ž์— "key-direction 1"์„ ๋„ฃ์Šต๋‹ˆ๋‹ค.

OpenVPN ์„œ๋ฒ„ ๊ตฌ์„ฑ์„ ๊ตฌ์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

cd ~/openvpn-ca/keys
cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | tee /etc/openvpn/server.conf
mcedit /etc/openvpn/server.conf

# Listen port
port 1194

# Protocol
proto tcp-server

# IP tunnel
dev tun0
tun-ipv6
push tun-ipv6

# Master certificate
ca ca.crt

# Server certificate
cert server.crt

# Server private key
key server.key

# Diffie-Hellman parameters
dh dh2048.pem

# Allow clients to communicate with each other
client-to-client

# Client config dir
client-config-dir /etc/openvpn/ccd

# Run client-specific script on connection and disconnection
script-security 2
client-connect "/usr/bin/sudo -u root /etc/openvpn/server-clientconnect.sh"
client-disconnect "/usr/bin/sudo -u root /etc/openvpn/server-clientdisconnect.sh"

# Server mode and client subnets
server 10.8.0.0 255.255.255.0
server-ipv6 XXXX:XXXX:XXXX:XXXX:1:3::/80
topology subnet

# IPv6 routes
push "route-ipv6 XXXX:XXXX:XXXX:XXXX::/64"
push "route-ipv6 2000::/3"

# DNS (for Windows)
# These are OpenDNS
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"

# Configure all clients to redirect their default network gateway through the VPN
push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway ipv6" #For iOS

# Don't need to re-read keys and re-create tun at restart
persist-key
persist-tun

# Ping every 10s. Timeout of 120s.
keepalive 10 120

# Enable compression
comp-lzo

# User and group
user vpn
group vpn

# Log a short status
status openvpn-status.log

# Logging verbosity
##verb 4

# Custom config
tls-auth ta.key 0
cipher DES-EDE3-CBC

์ด๋Š” ๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ๊ณ ์ • ์ฃผ์†Œ๋ฅผ ์„ค์ •ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค(ํ•„์ˆ˜๋Š” ์•„๋‹ˆ์ง€๋งŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค).

# Client config dir
client-config-dir /etc/openvpn/ccd

๊ฐ€์žฅ ์–ด๋ ต๊ณ  ์ค‘์š”ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

์•ˆํƒ€๊น๊ฒŒ๋„ OpenVPN์€ ์•„์ง ํด๋ผ์ด์–ธํŠธ์šฉ IPv6 ๊ฒŒ์ดํŠธ์›จ์ด๋ฅผ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ชจ๋ฆ…๋‹ˆ๋‹ค.
๊ฐ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด ์ด๋ฅผ "์ˆ˜๋™์œผ๋กœ" ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

# Run client-specific script on connection and disconnection
script-security 2
client-connect "/usr/bin/sudo -u root /etc/openvpn/server-clientconnect.sh"
client-disconnect "/usr/bin/sudo -u root /etc/openvpn/server-clientdisconnect.sh"

ํŒŒ์ผ "/etc/openvpn/server-clientconnect.sh":

#!/bin/sh

# Check client variables
if [ -z "$ifconfig_pool_remote_ip" ] || [ -z "$common_name" ]; then
        echo "Missing environment variable."
        exit 1
fi

# Load server variables
. /etc/openvpn/variables

ipv6=""

# Find out if there is a specific config with fixed IPv6 for this client
if [ -f "/etc/openvpn/ccd/$common_name" ]; then
        # Get fixed IPv6 from client config file
        ipv6=$(sed -nr 's/^.*ifconfig-ipv6-push[ t]+([0-9a-fA-F:]+).*$/1/p' "/etc/openvpn/ccd/$common_name")
        echo $ipv6
fi

# Get IPv6 from IPv4
if [ -z "$ipv6" ]; then
        ipp=$(echo "$ifconfig_pool_remote_ip" | cut -d. -f4)
        if ! [ "$ipp" -ge 2 -a "$ipp" -le 254 ] 2>/dev/null; then
                echo "Invalid IPv4 part."
                exit 1
        fi
        hexipp=$(printf '%x' $ipp)
        ipv6="$prefix$hexipp"
fi

# Create proxy rule
/sbin/ip -6 neigh add proxy $ipv6 dev eno1

ํŒŒ์ผ "/etc/openvpn/server-clientdisconnect.sh":

#!/bin/sh

# Check client variables
if [ -z "$ifconfig_pool_remote_ip" ] || [ -z "$common_name" ]; then
        echo "Missing environment variable."
        exit 1
fi

# Load server variables
. /etc/openvpn/variables

ipv6=""

# Find out if there is a specific config with fixed IPv6 for this client
if [ -f "/etc/openvpn/ccd/$common_name" ]; then
        # Get fixed IPv6 from client config file
        ipv6=$(sed -nr 's/^.*ifconfig-ipv6-push[ t]+([0-9a-fA-F:]+).*$/1/p' "/etc/openvpn/ccd/$common_name")
fi

# Get IPv6 from IPv4
if [ -z "$ipv6" ]; then
        ipp=$(echo "$ifconfig_pool_remote_ip" | cut -d. -f4)
        if ! [ "$ipp" -ge 2 -a "$ipp" -le 254 ] 2>/dev/null; then
                echo "Invalid IPv4 part."
                exit 1
        fi
        hexipp=$(printf '%x' $ipp)
        ipv6="$prefix$hexipp"
fi

# Delete proxy rule
/sbin/ip -6 neigh del proxy $ipv6 dev eno1

๋‘ ์Šคํฌ๋ฆฝํŠธ ๋ชจ๋‘ "/etc/openvpn/variables" ํŒŒ์ผ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

# Subnet
prefix=XXXX:XXXX:XXXX:XXXX:2:
# netmask
prefixlen=112

์™œ ์ด๋ ‡๊ฒŒ ์“ฐ์—ฌ์กŒ๋Š”์ง€ ๊ธฐ์–ตํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

์ด์ œ netmask = 112๊ฐ€ ์ด์ƒํ•ด ๋ณด์ž…๋‹ˆ๋‹ค(๋ฐ”๋กœ 96์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค).
๊ทธ๋ฆฌ๊ณ  ์ ‘๋‘์‚ฌ๊ฐ€ ์ด์ƒํ•ฉ๋‹ˆ๋‹ค. tun0 ๋„คํŠธ์›Œํฌ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Œ€๋กœ ๋‘๊ฒ ์Šต๋‹ˆ๋‹ค.

cipher DES-EDE3-CBC

์ด๊ฒƒ์€ ๋ชจ๋“  ์‚ฌ๋žŒ์„ ์œ„ํ•œ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ์ €๋Š” ์ด ์—ฐ๊ฒฐ ์•”ํ˜ธํ™” ๋ฐฉ๋ฒ•์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

OpenVPN IPv4 ์„ค์ •์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

OpenVPN IPv6 ์„ค์ •์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด์„ธ์š”.

============= ์ ‘๋ฏธ์‚ฌ =============

๋ฉ”์ธ ํŒจํ‚ค์ง€ ์„ค์น˜:

apt-get install postfix

์„ค์น˜์‹œ '์ธํ„ฐ๋„ท์‚ฌ์ดํŠธ'๋ฅผ ์„ ํƒํ•˜์„ธ์š”.

๋‚ด "/etc/postfix/main.cf"๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

readme_directory = no

# See http://www.postfix.org/COMPATIBILITY_README.html -- default to 2 on
# fresh installs.
compatibility_level = 2

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
smtpd_tls_key_file=/etc/ssl/domain1.com.2018.key
smtpd_use_tls=yes
smtpd_tls_auth_only = yes
smtp_bind_address = XX.XX.XX.X0
smtp_bind_address6 = XXXX:XXXX:XXXX:XXXX:1:1:1:1

smtp_tls_security_level = may
smtp_tls_ciphers = export
smtp_tls_protocols = !SSLv2, !SSLv3
smtp_tls_loglevel = 1

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = domain1.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = domain1.com
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
inet_protocols = ipv4

internal_mail_filter_classes = bounce

# Storage type
virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

# SMTP-Auth settings
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions =
        permit_sasl_authenticated,
        permit_mynetworks,
        #reject_invalid_hostname,
        #reject_unknown_recipient_domain,
        reject_unauth_destination,
        reject_rbl_client sbl.spamhaus.org,
        check_policy_service unix:private/policyd-spf

smtpd_helo_restrictions =
        #reject_invalid_helo_hostname,
        #reject_non_fqdn_helo_hostname,
        reject_unknown_helo_hostname

smtpd_client_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_non_fqdn_helo_hostname,
        permit

# SPF
policyd-spf_time_limit = 3600

# OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:var/run/opendkim/opendkim.sock

# IP address per domain
sender_dependent_default_transport_maps = pcre:/etc/postfix/sdd_transport.pcre

์ด ๊ตฌ์„ฑ์˜ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
smtpd_tls_key_file=/etc/ssl/domain1.com.2018.key

ํ•˜๋ธŒ๋กœ๋ธŒ์Šคํฌ ์ฃผ๋ฏผ๋“ค์— ๋”ฐ๋ฅด๋ฉด ์ด ๋ธ”๋ก์—๋Š” "์ž˜๋ชป๋œ ์ •๋ณด์™€ ์ž˜๋ชป๋œ ์ฃผ์žฅ"์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.์ €๋Š” ๊ฒฝ๋ ฅ์„ ์‹œ์ž‘ํ•œ ์ง€ ๋ถˆ๊ณผ 8๋…„ ๋งŒ์— SSL์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ SSL์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ž์œ ๋กญ๊ฒŒ ์„ค๋ช…ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค("์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?" ๋ฐ "์™œ ์ž‘๋™ํ•ฉ๋‹ˆ๊นŒ?"๋ผ๋Š” ์งˆ๋ฌธ์— ๋Œ€๋‹ตํ•˜์ง€ ์•Š๊ณ ).

์ตœ์‹  ์•”ํ˜ธํ™”์˜ ๊ธฐ๋ณธ์€ ํ‚ค ์Œ(๋‘ ๊ฐœ์˜ ๋งค์šฐ ๊ธด ๋ฌธ์ž์—ด)์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ•˜๋‚˜์˜ "ํ‚ค"๋Š” ๋น„๊ณต๊ฐœ์ด๊ณ  ๋‹ค๋ฅธ ํ‚ค๋Š” "๊ณต๊ฐœ"์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ฐœ์ธ ํ‚ค๋ฅผ ๋งค์šฐ ์กฐ์‹ฌ์Šค๋Ÿฝ๊ฒŒ ๋น„๋ฐ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ณต๊ฐœ ํ‚ค๋ฅผ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ๋ฐฐํฌํ•ฉ๋‹ˆ๋‹ค.

๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐœ์ธ ํ‚ค ์†Œ์œ ์ž๋งŒ ํ•ด๋…ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ…์ŠคํŠธ ๋ฌธ์ž์—ด์„ ์•”ํ˜ธํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ธ€์Ž„, ๊ทธ๊ฒƒ์€ ๊ธฐ์ˆ ์˜ ์ „์ฒด ๊ธฐ์ดˆ์ž…๋‹ˆ๋‹ค.

1๋‹จ๊ณ„ - https ์‚ฌ์ดํŠธ.
์‚ฌ์ดํŠธ์— ์•ก์„ธ์Šคํ•  ๋•Œ ๋ธŒ๋ผ์šฐ์ €๋Š” ์›น ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ•ด๋‹น ์‚ฌ์ดํŠธ๊ฐ€ https๋ผ๋Š” ์‚ฌ์‹ค์„ ์•Œ๊ฒŒ ๋˜์–ด ๊ณต๊ฐœ ํ‚ค๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
์›น ์„œ๋ฒ„๋Š” ๊ณต๊ฐœ ํ‚ค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ http ์š”์ฒญ์„ ์•”ํ˜ธํ™”ํ•˜๊ณ  ๋ณด๋ƒ…๋‹ˆ๋‹ค.
http ์š”์ฒญ์˜ ๋‚ด์šฉ์€ ๊ฐœ์ธ ํ‚ค๋ฅผ ๊ฐ€์ง„ ์‚ฌ๋žŒ, ์ฆ‰ ์š”์ฒญ์ด ์ด๋ฃจ์–ด์ง„ ์„œ๋ฒ„๋งŒ ์ฝ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
Http-request์—๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ URI๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ตญ๊ฐ€์—์„œ ์ „์ฒด ์‚ฌ์ดํŠธ๊ฐ€ ์•„๋‹Œ ํŠน์ • ํŽ˜์ด์ง€์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œํ•œํ•˜๋ ค๋Š” ๊ฒฝ์šฐ https ์‚ฌ์ดํŠธ์—์„œ๋Š” ์ด๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2๋‹จ๊ณ„ - ์•”ํ˜ธํ™”๋œ ์‘๋‹ต.
์›น ์„œ๋ฒ„๋Š” ์ด๋™ ์ค‘์—๋„ ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๋‹ต๋ณ€์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ์ฑ…์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ฐ https ์‚ฌ์ดํŠธ์— ๋Œ€ํ•ด ๋™์ผํ•œ ๊ฐœ์ธ-๊ณต๊ฐœ ํ‚ค ์Œ์„ ๋กœ์ปฌ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์‚ฌ์ดํŠธ์˜ ๊ณต๊ฐœ ํ‚ค ์š”์ฒญ๊ณผ ํ•จ๊ป˜ ๋กœ์ปฌ ๊ณต๊ฐœ ํ‚ค๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
์›น ์„œ๋ฒ„๋Š” ์ด๋ฅผ ๊ธฐ์–ตํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, http ์‘๋‹ต์„ ๋ณด๋‚ผ ๋•Œ ํŠน์ • ํด๋ผ์ด์–ธํŠธ์˜ ๊ณต๊ฐœ ํ‚ค๋กœ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.
์ด์ œ http ์‘๋‹ต์€ ํด๋ผ์ด์–ธํŠธ์˜ ๋ธŒ๋ผ์šฐ์ € ๊ฐœ์ธ ํ‚ค ์†Œ์œ ์ž(์ฆ‰, ํด๋ผ์ด์–ธํŠธ ์ž์ฒด)๋งŒ ํ•ด๋…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3๋‹จ๊ณ„ - ๊ณต๊ฐœ ์ฑ„๋„์„ ํ†ตํ•ด ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
์˜ˆ์ œ 2์—๋Š” ์ทจ์•ฝ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ์˜์˜ ์‚ฌ๋žŒ๋“ค์ด http ์š”์ฒญ์„ ๊ฐ€๋กœ์ฑ„๊ณ  ๊ณต๊ฐœ ํ‚ค์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ํŽธ์ง‘ํ•˜๋Š” ๊ฒƒ์„ ๋ง‰์„ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์—†์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ์ค‘๊ฐœ์ž๋Š” ํ†ต์‹  ์ฑ„๋„์ด ๋ณ€๊ฒฝ๋  ๋•Œ๊นŒ์ง€ ๋ณด๋‚ด๊ณ  ๋ฐ›์€ ๋ฉ”์‹œ์ง€์˜ ๋ชจ๋“  ๋‚ด์šฉ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์˜ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์›น ์„œ๋ฒ„์˜ ๊ณต๊ฐœ ํ‚ค๋กœ ์•”ํ˜ธํ™”๋œ ๋ฉ”์‹œ์ง€๋กœ ๋ณด๋‚ด๋ฉด ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ์›น ์„œ๋ฒ„๋Š” ๋จผ์ € "๊ณต๊ฐœ ํ‚ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค."์™€ ๊ฐ™์€ ์‘๋‹ต์„ ๋ณด๋‚ด๊ณ  ๋™์ผํ•œ ๊ณต๊ฐœ ํ‚ค๋กœ ์ด ๋ฉ”์‹œ์ง€๋ฅผ ์•”ํ˜ธํ™”ํ•ฉ๋‹ˆ๋‹ค.
๋ธŒ๋ผ์šฐ์ €๋Š” ์‘๋‹ต์„ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. "๊ณต๊ฐœ ํ‚ค๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ๋ฉ”์‹œ์ง€๊ฐ€ ์ˆ˜์‹ ๋˜๋ฉด ์ด๋Š” ์ด ํ†ต์‹  ์ฑ„๋„์ด ์•ˆ์ „ํ•˜๋‹ค๋Š” ๊ฒƒ์„ 100% ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.
์–ผ๋งˆ๋‚˜ ์•ˆ์ „ํ•ฉ๋‹ˆ๊นŒ?
์ด๋Ÿฌํ•œ ๋ณด์•ˆ ํ†ต์‹  ์ฑ„๋„์˜ ์ƒ์„ฑ์€ ping*2์˜ ์†๋„๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 20ms์ž…๋‹ˆ๋‹ค.
๊ณต๊ฒฉ์ž๋Š” ๋‹น์‚ฌ์ž ์ค‘ ํ•œ ์‚ฌ๋žŒ์˜ ๊ฐœ์ธ ํ‚ค๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋‹ˆ๋ฉด ๋ช‡ ๋ฐ€๋ฆฌ์ดˆ ์•ˆ์— ๊ฐœ์ธ ํ‚ค๋ฅผ ์ฐพ์œผ์„ธ์š”.
์Šˆํผ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ตœ์‹  ๊ฐœ์ธ ํ‚ค ํ•˜๋‚˜๋ฅผ ํ•ดํ‚นํ•˜๋Š” ๋ฐ ์ˆ˜์‹ญ ๋…„์ด ๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

4๋‹จ๊ณ„ - ๊ณต๊ฐœ ํ‚ค์˜ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.
๋ถ„๋ช…ํžˆ ์ด ์ „์ฒด ์ด์•ผ๊ธฐ์—๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„ ์‚ฌ์ด์˜ ํ†ต์‹  ์ฑ„๋„์— ์•‰์„ ๊ธฐํšŒ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์ธ ์ฒ™ํ•  ์ˆ˜ ์žˆ๊ณ , ์„œ๋ฒ„๋Š” ํด๋ผ์ด์–ธํŠธ์ธ ์ฒ™ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์–‘๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์Œ์˜ ํ‚ค๋ฅผ ์—๋ฎฌ๋ ˆ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ณต๊ฒฉ์ž๋Š” ๋ชจ๋“  ํŠธ๋ž˜ํ”ฝ์„ ๋ณด๊ณ  ํŠธ๋ž˜ํ”ฝ์„ "ํŽธ์ง‘"ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์†ก๊ธˆ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์˜จ๋ผ์ธ ๋ฑ…ํ‚น์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณต์‚ฌํ•˜๊ฑฐ๋‚˜ "๋ถˆ์พŒํ•œ" ์ฝ˜ํ…์ธ ๋ฅผ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌํ•œ ๊ณต๊ฒฉ์ž๋“ค์— ๋งž์„œ๊ธฐ ์œ„ํ•ด ๊ทธ๋“ค์€ ๊ฐ https ์‚ฌ์ดํŠธ์— ๋Œ€ํ•œ ๊ณต๊ฐœ ํ‚ค๊ฐ€ ํฌํ•จ๋œ ๊ณต๊ฐœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๋งˆ๋ จํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ ๋ธŒ๋ผ์šฐ์ €๋Š” ์•ฝ 200๊ฐœ์˜ ์ด๋Ÿฌํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ "์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค". ์ด๋Š” ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์— ์‚ฌ์ „ ์„ค์น˜๋˜์–ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
"์ง€์‹"์€ ๊ฐ ์ธ์ฆ์„œ์˜ ๊ณต๊ฐœ ํ‚ค๋กœ ๋’ท๋ฐ›์นจ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ํŠน์ • ์ธ์ฆ ๊ธฐ๊ด€์— ๋Œ€ํ•œ ์—ฐ๊ฒฐ์„ ์œ„์กฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด์ œ https์— SSL์„ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ดํ•ดํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‘๋‡Œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ˆ˜ ์„œ๋น„์Šค๊ฐ€ ์–ด๋–ป๊ฒŒ ์ด ๊ตฌ์กฐ์˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ•ดํ‚นํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋ถ„๋ช…ํ•ด์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๊ทธ๋“ค์—๊ฒŒ ์—„์ฒญ๋‚œ ๋…ธ๋ ฅ์„ ์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
NSA๋‚˜ CIA๋ณด๋‹ค ์ž‘์€ ์กฐ์ง์—์„œ๋Š” VIP์˜ ๊ฒฝ์šฐ์—๋„ ๊ธฐ์กด ๋ณดํ˜ธ ์ˆ˜์ค€์„ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ์ด ๊ฑฐ์˜ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

SSH ์—ฐ๊ฒฐ์— ๋Œ€ํ•ด์„œ๋„ ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์—๋Š” ๊ณต๊ฐœ ํ‚ค๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฌด์—‡์„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๋ฌธ์ œ๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
์˜ต์…˜ ssh-by-password:
์ฒซ ๋ฒˆ์งธ ์—ฐ๊ฒฐ ์ค‘์— SSH ํด๋ผ์ด์–ธํŠธ๋Š” SSH ์„œ๋ฒ„์—์„œ ์ƒˆ ๊ณต๊ฐœ ํ‚ค๊ฐ€ ์žˆ์Œ์„ ๊ฒฝ๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ถ”๊ฐ€ ์—ฐ๊ฒฐ ์ค‘์— "ssh ์„œ๋ฒ„์˜ ์ƒˆ ๊ณต๊ฐœ ํ‚ค"๋ผ๋Š” ๊ฒฝ๊ณ ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋ฉด ๊ทธ๋“ค์ด ๋„์ฒญ์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค.
๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์—ฐ๊ฒฐ์—์„œ ๋„์ฒญ์„ ๋‹นํ–ˆ์ง€๋งŒ ์ด์ œ๋Š” ์ค‘๊ฐœ์ž ์—†์ด ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•ฉ๋‹ˆ๋‹ค.
์‹ค์ œ๋กœ ๋„์ฒญ ์‚ฌ์‹ค์ด ์‰ฝ๊ณ , ๋น ๋ฅด๊ณ , ์‰ฝ๊ฒŒ ๋“œ๋Ÿฌ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ณต๊ฒฉ์€ ํŠน์ • ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ์—๋งŒ ์‚ฌ์šฉ๋œ๋‹ค.

์˜ต์…˜ SSH๋ณ„ ํ‚ค:
ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ๊ฐ€์ ธ์™€ ๊ทธ ์œ„์— SSH ์„œ๋ฒ„์˜ ๊ฐœ์ธ ํ‚ค๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค(์ด์— ๋Œ€ํ•œ ์šฉ์–ด์™€ ์ค‘์š”ํ•œ ๋‰˜์•™์Šค๊ฐ€ ๋งŽ์ด ์žˆ์ง€๋งŒ ์ €๋Š” ์‚ฌ์šฉ ์ง€์นจ์ด ์•„๋‹Œ ๊ต์œก ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค).
SSH ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์žˆ์„ ๋จธ์‹ ์— ๊ณต๊ฐœ ํ‚ค๋ฅผ ๋‚จ๊ฒจ๋‘๊ณ  ๋น„๋ฐ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์„œ๋ฒ„์— ๊ฐ€์ ธ์™€ ์‚ฝ์ž…ํ•˜๊ณ  ๊ฐœ์ธ ํ‚ค๋ฅผ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ํƒœ์›Œ ์žฌ๋ฅผ ๋ฐ”๋žŒ์— ํฉ๋ฟŒ๋ฆฝ๋‹ˆ๋‹ค(๋˜๋Š” ์ตœ์†Œํ•œ XNUMX์œผ๋กœ ํฌ๋งท).
๊ทธ๊ฒŒ ์ „๋ถ€์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ž‘์—… ํ›„์—๋Š” ๊ทธ๋Ÿฌํ•œ SSH ์—ฐ๊ฒฐ์„ ํ•ดํ‚นํ•˜๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋ฌผ๋ก  10๋…„ ํ›„์—๋Š” ์Šˆํผ์ปดํ“จํ„ฐ์—์„œ ํŠธ๋ž˜ํ”ฝ์„ ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‹ค๋ฅธ ์ด์•ผ๊ธฐ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” theftopic์— ๋Œ€ํ•ด ์‚ฌ๊ณผํ•œ๋‹ค.

์ด์ œ ์ด๋ก ์ด ์•Œ๋ ค์กŒ์Šต๋‹ˆ๋‹ค. SSL ์ธ์ฆ์„œ ์ƒ์„ฑ ๊ณผ์ •์„ ์•Œ๋ ค๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

"openssl genrsa"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐœ์ธ ํ‚ค์™€ ๊ณต๊ฐœ ํ‚ค์— ๋Œ€ํ•œ "๊ณต๋ฐฑ"์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
์šฐ๋ฆฌ๋Š” "๊ณต๋ฐฑ"์„ ์ œ9์ž ํšŒ์‚ฌ์— ๋ณด๋‚ด๊ณ  ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ์ธ์ฆ์„œ์— ๋Œ€ํ•ด ์•ฝ XNUMX๋‹ฌ๋Ÿฌ๋ฅผ ์ง€๋ถˆํ•ฉ๋‹ˆ๋‹ค.

๋ช‡ ์‹œ๊ฐ„ ํ›„์— ์šฐ๋ฆฌ๋Š” ์ด ์ œXNUMX์ž ํšŒ์‚ฌ๋กœ๋ถ€ํ„ฐ "๊ณต๊ฐœ" ํ‚ค์™€ ์—ฌ๋Ÿฌ ๊ณต๊ฐœ ํ‚ค ์„ธํŠธ๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๋‚ด ๊ณต๊ฐœ ํ‚ค ๋“ฑ๋ก ๋น„์šฉ์„ ์ œXNUMX์ž ํšŒ์‚ฌ๊ฐ€ ์ง€๋ถˆํ•ด์•ผ ํ•˜๋Š” ์ด์œ ๋Š” ๋ณ„๋„์˜ ์งˆ๋ฌธ์ด๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋Š” ๊ณ ๋ คํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋น„๋ฌธ์˜ ์˜๋ฏธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ถ„๋ช…ํ•ฉ๋‹ˆ๋‹ค.

smtpd_tls_key_file=/etc/ssl/domain1.com.2018.key

"/etc/ssl" ํด๋”์—๋Š” SSL ๋ฌธ์ œ์— ๋Œ€ํ•œ ๋ชจ๋“  ํŒŒ์ผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
domain1.com โ€” ๋„๋ฉ”์ธ ์ด๋ฆ„.
2018๋…„์€ ํ‚ค ์ƒ์„ฑ์˜ ํ•ด์ž…๋‹ˆ๋‹ค.
"ํ‚ค" - ํŒŒ์ผ์ด ๊ฐœ์ธ ํ‚ค์ž„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ์˜ ์˜๋ฏธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

smtpd_tls_cert_file=/etc/ssl/domain1.com.2018.chained.crt
domain1.com โ€” ๋„๋ฉ”์ธ ์ด๋ฆ„.
2018๋…„์€ ํ‚ค ์ƒ์„ฑ์˜ ํ•ด์ž…๋‹ˆ๋‹ค.
์ฒด์ธํ™”๋จ - ๊ณต๊ฐœ ํ‚ค ์ฒด์ธ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค(์ฒซ ๋ฒˆ์งธ๋Š” ๊ณต๊ฐœ ํ‚ค์ด๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ณต๊ฐœ ํ‚ค๋ฅผ ๋ฐœํ–‰ํ•œ ํšŒ์‚ฌ์—์„œ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ž…๋‹ˆ๋‹ค).
crt - ๊ธฐ์„ฑ ์ธ์ฆ์„œ(๊ธฐ์ˆ ์  ์„ค๋ช…์ด ํฌํ•จ๋œ ๊ณต๊ฐœ ํ‚ค)๊ฐ€ ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

smtp_bind_address = XX.XX.XX.X0
smtp_bind_address6 = XXXX:XXXX:XXXX:XXXX:1:1:1:1

์ด ์„ค์ •์€ ์ด ๊ฒฝ์šฐ์—๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์˜ˆ์‹œ๋กœ ์ž‘์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด (๊ท€ํ•˜์˜ ์˜์ง€ ์—†์ด) ๊ท€ํ•˜์˜ ์„œ๋ฒ„์—์„œ ์ŠคํŒธ์ด โ€‹โ€‹์ „์†ก๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹น์‹ ์ด ๋ฌด์ฃ„์ž„์„ ๋ชจ๋“  ์‚ฌ๋žŒ์—๊ฒŒ ์ฆ๋ช…ํ•˜์‹ญ์‹œ์˜ค.

recipient_delimiter = +

๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์•Œ์ง€ ๋ชปํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ ์ด๋Š” ์ด๋ฉ”์ผ ์ˆœ์œ„๋ฅผ ์ง€์ •ํ•˜๋Š” ํ‘œ์ค€ ๋ฌธ์ž์ด๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ์ตœ์‹  ๋ฉ”์ผ ์„œ๋ฒ„์—์„œ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์„œํ•จ์ด ์žˆ๋Š” ๊ฒฝ์šฐ "[์ด๋ฉ”์ผ ๋ณดํ˜ธ]"๋‹ค์Œ์œผ๋กœ ๋ณด๋‚ด๋ณด์„ธ์š”"[์ด๋ฉ”์ผ ๋ณดํ˜ธ]"-๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€๋ณด์„ธ์š”.

inet_protocols = ipv4

ํ˜ผ๋ž€์Šค๋Ÿฌ์šธ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๋‹จ์ง€ ๊ทธ๋Ÿฐ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ฐ๊ฐ์˜ ์ƒˆ ๋„๋ฉ”์ธ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ IPv4๋กœ๋งŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์œผ๋ฉฐ ๊ฐ ๋„๋ฉ”์ธ์— ๋Œ€ํ•ด ๊ฐœ๋ณ„์ ์œผ๋กœ IPv6์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

virtual_transport = lmtp:unix:private/dovecot-lmtp
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf

์—ฌ๊ธฐ์—์„œ๋Š” ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ๋ฉ”์ผ์ด ๋น„๋‘˜๊ธฐ์žฅ์œผ๋กœ ์ด๋™ํ•˜๋„๋ก ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋„๋ฉ”์ธ, ์‚ฌ์„œํ•จ, ๋ณ„์นญ์— ๋Œ€ํ•œ ๊ทœ์น™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”.

/etc/postfix/mysql-virtual-mailbox-domains.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_domains WHERE name='%s'

/etc/postfix/mysql-virtual-mailbox-maps.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT 1 FROM virtual_users WHERE email='%s'

/etc/postfix/mysql-virtual-alias-maps.cf

user = usermail
password = mailpassword
hosts = 127.0.0.1
dbname = servermail
query = SELECT destination FROM virtual_aliases WHERE source='%s'

# SMTP-Auth settings
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

์ด์ œ postfix๋Š” dovecot์œผ๋กœ ์Šน์ธ์„ ๋ฐ›์€ ํ›„์—๋งŒ ์ถ”๊ฐ€ ์ „์†ก์„ ์œ„ํ•ด ๋ฉ”์ผ์„ ์ˆ˜๋ฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒŒ ์™œ ์—ฌ๊ธฐ์„œ ์ค‘๋ณต๋˜๋Š”์ง€ ์ •๋ง ์ดํ•ด๊ฐ€ ์•ˆ๊ฐ€๋„ค์š”. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ "virtual_transport"์— ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์„ ์ง€์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ ‘๋ฏธ์‚ฌ ์‹œ์Šคํ…œ์€ ๋งค์šฐ ์˜ค๋ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ์˜›๋‚ ๋กœ๋ถ€ํ„ฐ์˜ ํ›„ํ‡ด์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

smtpd_recipient_restrictions =
        ...

smtpd_helo_restrictions =
        ...

smtpd_client_restrictions =
        ...

๋ฉ”์ผ์„œ๋ฒ„๋งˆ๋‹ค ๋‹ค๋ฅด๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์ผ ์„œ๋ฒ„๋Š” 3๊ฐœ์ด๋ฉฐ ์ด๋Ÿฌํ•œ ์„ค์ •์€ ์‚ฌ์šฉ ์š”๊ตฌ ์‚ฌํ•ญ์ด ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์ฃผ์˜ ๊นŠ๊ฒŒ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์ŠคํŒธ์ด ์Ÿ์•„์ ธ ๋“ค์–ด์˜ค๊ฑฐ๋‚˜ ๋” ๋‚˜์œ ๊ฒฝ์šฐ์—๋Š” ์ŠคํŒธ์ด ์Ÿ์•„์ ธ ๋‚˜์˜ต๋‹ˆ๋‹ค.

# SPF
policyd-spf_time_limit = 3600

์ˆ˜์‹  ํŽธ์ง€์˜ SPF ํ™•์ธ๊ณผ ๊ด€๋ จ๋œ ์ผ๋ถ€ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

# OpenDKIM
milter_default_action = accept
milter_protocol = 6
smtpd_milters = unix:var/run/opendkim/opendkim.sock
non_smtpd_milters = unix:var/run/opendkim/opendkim.sock

๋ชจ๋“  ๋ฐœ์‹  ์ด๋ฉ”์ผ์— DKIM ์„œ๋ช…์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ์„ค์ •์ด ์žˆ์Šต๋‹ˆ๋‹ค.

# IP address per domain
sender_dependent_default_transport_maps = pcre:/etc/postfix/sdd_transport.pcre

์ด๋Š” PHP ์Šคํฌ๋ฆฝํŠธ์—์„œ ํŽธ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ํŽธ์ง€ ๋ผ์šฐํŒ…์˜ ์ฃผ์š” ์„ธ๋ถ€ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/postfix/sdd_transport.pcre":

/^[email protected]$/ domain1:
/^[email protected]$/ domain2:
/^[email protected]$/ domain3:
/@domain1.com$/             domain1:
/@domain2.com$/             domain2:
/@domain3.com$/             domain3:

์™ผ์ชฝ์—๋Š” ์ •๊ทœ ํ‘œํ˜„์‹์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ์—๋Š” ๋ฌธ์ž๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ผ๋ฒจ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋ผ๋ฒจ์— ๋”ฐ๋ฅธ ์ ‘๋ฏธ์‚ฌ - ํŠน์ • ๋ฌธ์ž์— ๋Œ€ํ•ด ๋ช‡ ๊ฐ€์ง€ ์ถ”๊ฐ€ ๊ตฌ์„ฑ ์ค„์„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

ํŠน์ • ๋ฌธ์ž์— ๋Œ€ํ•ด ์ ‘๋ฏธ์‚ฌ๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ •ํ™•ํ•˜๊ฒŒ ์žฌ๊ตฌ์„ฑ๋˜๋Š”์ง€๋Š” "master.cf"์— ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

4, 5, 6ํ–‰์ด ์ฃผ์š” ํ–‰์ด๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํŽธ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๋„๋ฉ”์ธ์„ ๋Œ€์‹ ํ•˜์—ฌ ์ด ๋ผ๋ฒจ์„ ๋ถ™์ž…๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์ด์ „ ์ฝ”๋“œ์˜ PHP ์Šคํฌ๋ฆฝํŠธ์—๋Š” "from" ํ•„๋“œ๊ฐ€ ํ•ญ์ƒ ํ‘œ์‹œ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ๊ตฌ์ถœ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ๋Š” ์ด๋ฏธ ๊ด‘๋ฒ”์œ„ํ•ฉ๋‹ˆ๋‹ค. nginx+fpm ์„ค์ •์œผ๋กœ ์ธํ•ด ์ฃผ์˜๊ฐ€ ์‚ฐ๋งŒํ•ด์ง€๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ ๊ฐ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•ด ์ž์ฒด Linux ์‚ฌ์šฉ์ž ์†Œ์œ ์ž๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ fpm-pool.

Fpm-pool์€ ๋ชจ๋“  ๋ฒ„์ „์˜ PHP๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๋™์ผํ•œ ์„œ๋ฒ„์—์„œ ๋‹ค๋ฅธ ๋ฒ„์ „์˜ PHP๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ์ด์›ƒ ์‚ฌ์ดํŠธ์— ๋Œ€ํ•ด ๋ฌธ์ œ ์—†์ด ๋‹ค๋ฅธ php.ini๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์Šต๋‹ˆ๋‹ค).

๋”ฐ๋ผ์„œ ํŠน์ • Linux ์‚ฌ์šฉ์ž "www-domain2"๋Š” domain2.com ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์‚ฌ์ดํŠธ์—๋Š” ๋ณด๋‚ธ ์‚ฌ๋žŒ ํ•„๋“œ๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ์ด๋ฉ”์ผ์„ ๋ณด๋‚ด๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ ์ด ๊ฒฝ์šฐ์—๋„ ํŽธ์ง€๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ „์†ก๋˜๋ฉฐ ์ŠคํŒธ์œผ๋กœ ๋๋‚˜๋Š” ์ผ์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด "/etc/postfix/master.cf"๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

...
smtp      inet  n       -       y       -       -       smtpd
  -o content_filter=spamassassin
...
submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
...
policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf

spamassassin unix -     n       n       -       -       pipe
    user=spamd argv=/usr/bin/spamc -f -e
    /usr/sbin/sendmail -oi -f ${sender} ${recipient}
...
domain1  unix -       -       n       -       -       smtp
   -o smtp_bind_address=XX.XX.XX.X1
   -o smtp_helo_name=domain1.com
   -o inet_protocols=all
   -o smtp_bind_address6=XXXX:XXXX:XXXX:XXXX:1:1:1:1
   -o syslog_name=postfix-domain1

domain2  unix -       -       n       -       -       smtp
   -o smtp_bind_address=XX.XX.XX.X5
   -o smtp_helo_name=domain2.com
   -o inet_protocols=all
   -o smtp_bind_address6=XXXX:XXXX:XXXX:XXXX:1:2:1:1
   -o syslog_name=postfix-domain2

domain3  unix -       -       n       -       -       smtp
   -o smtp_bind_address=XX.XX.XX.X2
   -o smtp_helo_name=domain3
   -o inet_protocols=all
   -o smtp_bind_address6=XXXX:XXXX:XXXX:XXXX:1:1:5:1
   -o syslog_name=postfix-domain3

ํŒŒ์ผ ์ „์ฒด๊ฐ€ ์ œ๊ณต๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์šฉ๋Ÿ‰์ด ๋งค์šฐ ํฝ๋‹ˆ๋‹ค.
๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ๋งŒ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

smtp      inet  n       -       y       -       -       smtpd
  -o content_filter=spamassassin
...
spamassassin unix -     n       n       -       -       pipe
    user=spamd argv=/usr/bin/spamc -f -e
    /usr/sbin/sendmail -oi -f ${sender} ${recipient}

์ด๋Š” spamassasin๊ณผ ๊ด€๋ จ๋œ ์„ค์ •์ด๋ฉฐ ๋‚˜์ค‘์— ์ž์„ธํžˆ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

submission inet n       -       y       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject

ํฌํŠธ 587์„ ํ†ตํ•ด ๋ฉ”์ผ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

policyd-spf  unix  -       n       n       -       0       spawn
    user=policyd-spf argv=/usr/bin/policyd-spf

SPF ํ™•์ธ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

apt-get install postfix-policyd-spf-python

์œ„์˜ SPF ๊ฒ€์‚ฌ์šฉ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

domain1  unix -       -       n       -       -       smtp
   -o smtp_bind_address=XX.XX.XX.X1
   -o smtp_helo_name=domain1.com
   -o inet_protocols=all
   -o smtp_bind_address6=XXXX:XXXX:XXXX:XXXX:1:1:1:1
   -o syslog_name=postfix-domain1

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์ด ๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ํŠน์ • IPv4/IPv6 ์ฃผ์†Œ์—์„œ ํŠน์ • ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ํŽธ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.

์ด๋Š” rDNS๋ฅผ ์œ„ํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. rDNS๋Š” IP ์ฃผ์†Œ๋กœ ๋ฌธ์ž์—ด์„ ์ˆ˜์‹ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ž…๋‹ˆ๋‹ค.
๋ฉ”์ผ์˜ ๊ฒฝ์šฐ ์ด ๊ธฐ๋Šฅ์€ helo๊ฐ€ ์ด๋ฉ”์ผ์ด ์ „์†ก๋œ ์ฃผ์†Œ์˜ rDNS์™€ ์ •ํ™•ํžˆ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

helo๊ฐ€ ํŽธ์ง€๋ฅผ ๋ณด๋‚ธ ์‚ฌ๋žŒ์„ ๋Œ€์‹ ํ•˜์—ฌ ์ด๋ฉ”์ผ ๋„๋ฉ”์ธ๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์ŠคํŒธ ํฌ์ธํŠธ๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.

Helo๋Š” rDNS์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งŽ์€ ์ŠคํŒธ ํฌ์ธํŠธ๊ฐ€ ๋ถ€์—ฌ๋ฉ๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๊ฐ ๋„๋ฉ”์ธ์—๋Š” ๊ณ ์œ ํ•œ IP ์ฃผ์†Œ๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
OVH์˜ ๊ฒฝ์šฐ - ์ฝ˜์†”์—์„œ rDNS๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
tech.ru์˜ ๊ฒฝ์šฐ - ๋ฌธ์ œ๋Š” ์ง€์›์„ ํ†ตํ•ด ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
AWS์˜ ๊ฒฝ์šฐ ์ง€์›์„ ํ†ตํ•ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
"inet_protocols" ๋ฐ "smtp_bind_address6" - IPv6 ์ง€์›์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
IPv6์˜ ๊ฒฝ์šฐ rDNS๋„ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
"syslog_name" - ์ด๋Š” ๋กœ๊ทธ๋ฅผ ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ธ์ฆ์„œ ๊ตฌ๋งค ๋‚˜๋Š” ์—ฌ๊ธฐ๋ฅผ ์ถ”์ฒœํ•œ๋‹ค.

์—ฌ๊ธฐ์— postfix+dovecot ๋งํฌ ์„ค์ •.

SPF ์„ค์ •.

============= ๋น„๋‘˜๊ธฐ์žฅ =============

apt-get install dovecot-imapd dovecot-pop3d dovecot-lmtpd dovecot-mysql dovecot-antispam

mysql์„ ์„ค์ •ํ•˜๊ณ  ํŒจํ‚ค์ง€ ์ž์ฒด๋ฅผ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/10-auth.conf"

disable_plaintext_auth = yes
auth_mechanisms = plain login

์Šน์ธ์€ ์•”ํ˜ธํ™”๋งŒ ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/10-mail.conf"

mail_location = maildir:/var/mail/vhosts/%d/%n

์—ฌ๊ธฐ์„œ๋Š” ๋ฌธ์ž ์ €์žฅ ์œ„์น˜๋ฅผ โ€‹โ€‹๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

ํŒŒ์ผ์— ์ €์žฅํ•˜๊ณ  ๋„๋ฉ”์ธ๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/10-master.conf"

service imap-login {
  inet_listener imap {
    port = 0
  }
  inet_listener imaps {
    address = XX.XX.XX.X1, XX.XX.XX.X2, XX.XX.XX.X5, [XXXX:XXXX:XXXX:XXXX:1:1:1:1], [XXXX:XXXX:XXXX:XXXX:1:2:1:1], [XXXX:XXXX:XXXX:XXXX:1:1:5:1]
    port = 993
    ssl = yes
  }
}
service pop3-login {
  inet_listener pop3 {
    port = 0
  }
  inet_listener pop3s {
    address = XX.XX.XX.X1, XX.XX.XX.X2, XX.XX.XX.X5, [XXXX:XXXX:XXXX:XXXX:1:1:1:1], [XXXX:XXXX:XXXX:XXXX:1:2:1:1], [XXXX:XXXX:XXXX:XXXX:1:1:5:1]
    port = 995
    ssl = yes
  }
}
service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}
service imap {
}
service pop3 {
}
service auth {
  unix_listener auth-userdb {
    mode = 0600
    user = vmail
  }

  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
    user = postfix
    group = postfix
  }
  user = dovecot
}
service auth-worker {
  user = vmail
}
service dict {
  unix_listener dict {
  }
}

์ด๊ฒƒ์€ ์ฃผ์š” ๋น„๋‘˜๊ธฐ์žฅ ๊ตฌ์„ฑ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ๋Š” ๋ณด์•ˆ๋˜์ง€ ์•Š์€ ์—ฐ๊ฒฐ์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ํ™œ์„ฑํ™”ํ•˜์„ธ์š”.

ํŒŒ์ผ "/etc/dovecot/conf.d/10-ssl.conf"

ssl = required
ssl_cert = </etc/nginx/ssl/domain1.com.2018.chained.crt
ssl_key = </etc/nginx/ssl/domain1.com.2018.key
local XX.XX.XX.X5 {
  ssl_cert = </etc/nginx/ssl/domain2.com.2018.chained.crt
  ssl_key =  </etc/nginx/ssl/domain2.com.2018.key
}

SSL์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. SSL์ด ํ•„์š”ํ•จ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ์ธ์ฆ์„œ ์ž์ฒด. ๊ทธ๋ฆฌ๊ณ  ์ค‘์š”ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์€ "local" ์ง€์‹œ์–ด์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ๋กœ์ปฌ IPv4์— ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์šฉํ•  SSL ์ธ์ฆ์„œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ๋Š” IPv6๊ฐ€ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋‚˜์ค‘์— ์ด ๋ˆ„๋ฝ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
XX.XX.XX.X5(๋„๋ฉ”์ธ2) - ์ธ์ฆ์„œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด domain1.com์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
XX.XX.XX.X2(domain3) - ์ธ์ฆ์„œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ domain1.com ๋˜๋Š” domain3.com์„ ์ง€์ •ํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/15-lda.conf"

protocol lda {
  mail_plugins = $mail_plugins sieve
}

์ด๋Š” ํ–ฅํ›„ spamassassin์— ํ•„์š”ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/20-imap.conf"

protocol imap {
  mail_plugins = $mail_plugins antispam
}

์ŠคํŒธ๋ฐฉ์ง€ ํ”Œ๋Ÿฌ๊ทธ์ธ์ž…๋‹ˆ๋‹ค. "์ŠคํŒธ" ํด๋”๋กœ/์—์„œ ์ „์†ก ์‹œ ์ŠคํŒธ์‚ฌ์‹  ๊ต์œก์— ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/20-pop3.conf"

protocol pop3 {
}

๊ทธ๋Ÿฐ ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/20-lmtp.conf"

protocol lmtp {
  mail_plugins = $mail_plugins sieve
  postmaster_address = [email protected]
}

lmtp๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/90-antispam.conf"

plugin {
  antispam_backend = pipe
  antispam_trash = Trash;trash
  antispam_spam = Junk;Spam;SPAM
  antispam_pipe_program_spam_arg = --spam
  antispam_pipe_program_notspam_arg = --ham
  antispam_pipe_program = /usr/bin/sa-learn
  antispam_pipe_program_args = --username=%Lu
}

์ŠคํŒธ ํด๋”๋กœ/์—์„œ ์ „์†ก ์‹œ Spamassasin ๊ต์œก ์„ค์ •์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/90-sieve.conf"

plugin {
  sieve = ~/.dovecot.sieve
  sieve_dir = ~/sieve
  sieve_after = /var/lib/dovecot/sieve/default.sieve
}

๋“ค์–ด์˜ค๋Š” ํŽธ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ์ง€ ์ง€์ •ํ•˜๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ "/var/lib/dovecot/sieve/default.sieve"

require ["fileinto", "mailbox"];

if header :contains "X-Spam-Flag" "YES" {
        fileinto :create "Spam";
}

"sievec default.sieve" ํŒŒ์ผ์„ ์ปดํŒŒ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/conf.d/auth-sql.conf.ext"

passdb {
  driver = sql
  args = /etc/dovecot/dovecot-sql.conf.ext
}
userdb {
  driver = static
  args = uid=vmail gid=vmail home=/var/mail/vhosts/%d/%n
}

์ธ์ฆ์„ ์œ„ํ•ด SQL ํŒŒ์ผ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ํŒŒ์ผ ์ž์ฒด๊ฐ€ ์ธ์ฆ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/dovecot-sql.conf.ext"

driver = mysql
connect = host=127.0.0.1 dbname=servermail user=usermail password=password
default_pass_scheme = SHA512-CRYPT
password_query = SELECT email as user, password FROM virtual_users WHERE email='%u';

์ด๋Š” postfix์˜ ์œ ์‚ฌํ•œ ์„ค์ •์— ํ•ด๋‹นํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/dovecot/dovecot.conf"

protocols = imap lmtp pop3
listen = *, ::
dict {
}
!include conf.d/*.conf
!include_try local.conf

๊ธฐ๋ณธ ๊ตฌ์„ฑ ํŒŒ์ผ.
์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•œ ๊ฒƒ์€ ํ”„๋กœํ† ์ฝœ์„ ์ถ”๊ฐ€ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

============= SpamAssassin =============

apt-get install spamassassin spamc

ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

adduser spamd --disabled-login

๋ˆ„๊ตฌ๋ฅผ ๋Œ€์‹ ํ•˜์—ฌ ์‚ฌ์šฉ์ž๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

systemctl enable spamassassin.service

๋กœ๋”ฉ ์‹œ spamassassin ์„œ๋น„์Šค ์ž๋™ ๋กœ๋”ฉ์„ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/default/spamassassin":

CRON=1

"๊ธฐ๋ณธ์ ์œผ๋กœ" ๊ทœ์น™ ์ž๋™ ์—…๋ฐ์ดํŠธ๋ฅผ ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ "/etc/spamassassin/local.cf":

report_safe 0

use_bayes          1
bayes_auto_learn   1
bayes_auto_expire  1
bayes_store_module Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn      DBI:mysql:sa:localhost:3306
bayes_sql_username sa
bayes_sql_password password

์‚ฌ์šฉ์ž "sa"์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ "password"๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ mysql์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค "sa"๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ ์ ˆํ•œ ๊ฒƒ์œผ๋กœ ๊ต์ฒด).

report_safe - ํŽธ์ง€ ๋Œ€์‹  ์ŠคํŒธ ์ด๋ฉ”์ผ ๋ณด๊ณ ์„œ๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค.
use_bayes๋Š” spamassassin ๊ธฐ๊ณ„ ํ•™์Šต ์„ค์ •์ž…๋‹ˆ๋‹ค.

๋‚˜๋จธ์ง€ spamassassin ์„ค์ •์€ ๊ธฐ์‚ฌ ์•ž๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์„ค์ • "spamassassin".
์ƒˆ ์ŠคํŒธ ์ด๋ฉ”์ผ์„ IMAP "์ŠคํŒธ" ํด๋”๋กœ ์ด๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•.
Dovecot + SpamAssassin์˜ ๊ฐ„๋‹จํ•œ ์กฐํ•ฉ์— ๋Œ€ํ•ด.
imap ํด๋”์— ๊ธ€์ž๋ฅผ ์˜ฎ๊ธธ ๋•Œ ์ŠคํŒธ์‚ฌ์‹  ํ•™์Šต์ด๋ก ์„ ์ฝ์–ด๋ณด์‹œ๊ธธ ๊ถŒํ•ฉ๋‹ˆ๋‹ค(๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๊ฑธ ์ถ”์ฒœ๋“œ๋ฆฝ๋‹ˆ๋‹ค).

============= ์ปค๋ฎค๋‹ˆํ‹ฐ์— ํ˜ธ์†Œํ•˜๊ธฐ =============

๋˜ํ•œ ์ „๋‹ฌ๋œ ํŽธ์ง€์˜ ๋ณด์•ˆ ์ˆ˜์ค€์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๋ฅผ ์ปค๋ฎค๋‹ˆํ‹ฐ์— ๋˜์ง€๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ œ๊ฐ€ ๋ฉ”์ผ์ด๋ผ๋Š” ์ฃผ์ œ์— ๋„ˆ๋ฌด ๊นŠ์ด ๋น ์ ธ์žˆ๊ฑฐ๋“ ์š”.

์‚ฌ์šฉ์ž๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—์„œ ํ‚ค ์Œ(Outlook, Thunderbird, ๋ธŒ๋ผ์šฐ์ € ํ”Œ๋Ÿฌ๊ทธ์ธ ๋“ฑ)์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๊ณต๊ฐœ ๋ฐ ๋น„๊ณต๊ฐœ. ๊ณต๊ฐœ - DNS๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๋น„๊ณต๊ฐœ - ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์ผ ์„œ๋ฒ„๋Š” ๊ณต๊ฐœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ˆ˜์‹ ์ž์—๊ฒŒ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๋ฌธ์ž๋กœ ์ŠคํŒธ์„ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด(์˜ˆ, ๋ฉ”์ผ ์„œ๋ฒ„์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ๋ณผ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค) 3๊ฐ€์ง€ ๊ทœ์น™์„ ๋„์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  1. ํ•„์ˆ˜ ์‹ค์ œ DKIM ์„œ๋ช…, ํ•„์ˆ˜ SPF, ํ•„์ˆ˜ rDNS.
  2. ์ŠคํŒธ ๋ฐฉ์ง€ ๊ต์œก ์ฃผ์ œ์— ๋Œ€ํ•œ ์‹ ๊ฒฝ๋ง + ํด๋ผ์ด์–ธํŠธ ์ธก ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค.
  3. ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ณด๋‚ด๋Š” ์ชฝ์ด ๋ฐ›๋Š” ์ชฝ๋ณด๋‹ค ์•”ํ˜ธํ™”์— 100๋ฐฐ ๋” ๋งŽ์€ CPU ์ „๋ ฅ์„ ์†Œ๋น„ํ•ด์•ผ ํ•˜๋Š” ๋ฐฉ์‹์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ณต๊ฐœ ์„œ์‹  ์™ธ์—๋„ "๋ณด์•ˆ ์„œ์‹ ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ" ํ‘œ์ค€ ์ œ์•ˆ ์„œ์‹ ์„ ๊ฐœ๋ฐœํ•˜์‹ญ์‹œ์˜ค. ์‚ฌ์šฉ์ž(์‚ฌ์„œํ•จ) ์ค‘ ํ•œ ๋ช…์ด ์ฒจ๋ถ€ ํŒŒ์ผ์ด ํฌํ•จ๋œ ํŽธ์ง€๋ฅผ ๋‹ค๋ฅธ ์‚ฌ์„œํ•จ์œผ๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ํŽธ์ง€์—๋Š” ์„œ์‹ ์„ ์œ„ํ•œ ๋ณด์•ˆ ํ†ต์‹  ์ฑ„๋„์„ ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•œ ํ…์ŠคํŠธ ์ œ์•ˆ๊ณผ ์‚ฌ์„œํ•จ ์†Œ์œ ์ž์˜ ๊ณต๊ฐœ ํ‚ค(ํด๋ผ์ด์–ธํŠธ ์ธก์˜ ๊ฐœ์ธ ํ‚ค ํฌํ•จ)๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ์„œ์‹ ์— ๋Œ€ํ•ด ํŠน๋ณ„ํžˆ ๋‘ ๊ฐœ์˜ ํ‚ค๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ˆ˜์‹ ์ž ์‚ฌ์šฉ์ž๋Š” ์ด ์ œ์•ˆ์„ ์ˆ˜๋ฝํ•˜๊ณ  ์ž์‹ ์˜ ๊ณต๊ฐœ ํ‚ค(์ด ํ†ต์‹ ์„ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ๋งŒ๋“ค์–ด์ง„)๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ, ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋Š” ์„œ๋น„์Šค ์ œ์–ด ํŽธ์ง€(๋‘ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž์˜ ๊ณต๊ฐœ ํ‚ค๋กœ ์•”ํ˜ธํ™”๋จ)๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ด๋ฅผ ์ˆ˜์‹ ํ•˜๋ฉด ๋‘ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋Š” ํ˜•์„ฑ๋œ ํ†ต์‹  ์ฑ„๋„์ด ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ, ๋‘ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋Š” ์ œ์–ด ๋ฌธ์ž๋ฅผ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์ฒซ ๋ฒˆ์งธ ์‚ฌ์šฉ์ž๋„ ํ˜•์„ฑ๋œ ์ฑ„๋„์ด ์•ˆ์ „ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„๋กœ์—์„œ ํ‚ค๊ฐ€ ๊ฐ€๋กœ์ฑ„๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํ† ์ฝœ์€ ํ”Œ๋ž˜์‹œ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ๊ณต๊ฐœ ํ‚ค๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค(์งˆ๋ฌธ์€ "๋ˆ„๊ฐ€ ๋น„์šฉ์„ ์ง€๋ถˆํ•  ๊ฒƒ์ธ๊ฐ€?"์ž…๋‹ˆ๋‹ค).
10๋…„ ๋™์•ˆ $3๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์šฐํŽธ ์ฆ๋ช…์„œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”. ๊ทธ๋Ÿฌ๋ฉด ๋ฐœ์‹ ์ž๋Š” DNS์— "๋‚ด ๊ณต๊ฐœ ํ‚ค๊ฐ€ ์ €๊ธฐ์— ์žˆ์Šต๋‹ˆ๋‹ค."๋ผ๊ณ  ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ œ๊ณตํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋™์‹œ์— ๊ทธ๋Ÿฌํ•œ ์—ฐ๊ฒฐ์„ ์ˆ˜๋ฝํ•˜๋Š” ๊ฒƒ์€ ๋ฌด๋ฃŒ์ž…๋‹ˆ๋‹ค.
Gmail์€ ๋งˆ์นจ๋‚ด ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ˆ˜์ต์„ ์ฐฝ์ถœํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 10๋…„๋งˆ๋‹ค 3๋‹ฌ๋Ÿฌ - ์•ˆ์ „ํ•œ ํ†ต์‹  ์ฑ„๋„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๊ถŒ๋ฆฌ.

============= ๊ฒฐ๋ก  =============

์ „์ฒด ๊ธฐ์‚ฌ๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ์œ„ํ•ด ํ•œ ๋‹ฌ ๋™์•ˆ ์ „์šฉ ์„œ๋ฒ„๋ฅผ ์ž„๋Œ€ํ•˜๊ณ  SSL ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š” ๋„๋ฉ”์ธ์„ ๊ตฌ์ž…ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ƒํ™œ ํ™˜๊ฒฝ์ด ๋ฐœ์ „ํ•˜์—ฌ ์ด ๋ฌธ์ œ๊ฐ€ 2๊ฐœ์›” ๋™์•ˆ ์ง€์†๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋‹ค์‹œ ์—ฌ์œ  ์‹œ๊ฐ„์ด ์ƒ๊ฒผ์„ ๋•Œ ์ถœํŒ์ด XNUMX๋…„ ๋” ์ง€์—ฐ๋  ์œ„ํ—˜์„ ๊ฐ์ˆ˜ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ๊ธฐ์‚ฌ๋ฅผ ์žˆ๋Š” ๊ทธ๋Œ€๋กœ ์ถœํŒํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

"๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ์ถฉ๋ถ„ํžˆ ์ž์„ธํžˆ ์„ค๋ช…๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค"์™€ ๊ฐ™์€ ์งˆ๋ฌธ์ด ๊ฝค ๋งŽ๋‹ค๋ฉด ์•„๋งˆ๋„ ์ƒˆ๋กœ์šด ๋„๋ฉ”์ธ๊ณผ ์ƒˆ๋กœ์šด SSL ์ธ์ฆ์„œ๊ฐ€ ์žˆ๋Š” ์ „์šฉ ์„œ๋ฒ„๋ฅผ ์„ ํƒํ•˜์—ฌ ๋” ์ž์„ธํžˆ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์ด ํž˜์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ๊ฒƒ์€ ๋ˆ„๋ฝ๋œ ์ค‘์š”ํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๋ชจ๋‘ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ ์šฐํŽธ ์ฆ๋ช…์„œ์— ๊ด€ํ•œ ์•„์ด๋””์–ด์— ๋Œ€ํ•œ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์•„์ด๋””์–ด๊ฐ€ ๋งˆ์Œ์— ๋“œ์‹œ๋ฉด RFC ์ดˆ์•ˆ์„ ์ž‘์„ฑํ•  ํž˜์„ ์–ป์œผ๋ ค๊ณ  ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ธฐ์‚ฌ์˜ ๋งŽ์€ ๋ถ€๋ถ„์„ ๋ณต์‚ฌํ•  ๊ฒฝ์šฐ ํ•ด๋‹น ๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜์„ธ์š”.
๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•  ๋•Œ๋Š” ์ด ๊ธฐ์‚ฌ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜์„ธ์š”.
์ œ๊ฐ€ ์ง์ ‘ ์˜์–ด๋กœ ๋ฒˆ์—ญํ•ด๋ณด๊ณ  ์ƒํ˜ธ์ฐธ์กฐ๋„ ๋‚จ๊ฒจ๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€