๐Ÿ ํ™ˆ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ๐Ÿ  ํ† ๋ ŒํŠธ

์ƒˆ์–‘ยท2021๋…„ 3์›” 7์ผ
2

ํ™ˆ์„œ๋ฒ„ ๋งŒ๋“ค๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
10/12
post-thumbnail

๊ฐœ์š”


ํ™ˆ์„œ๋ฒ„์— ํ† ๋ ŒํŠธ ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ์„ ๋„ฃ์–ด๋‘๊ณ  ์›น ์„œ๋น„์Šค๋ฅผ ํ•˜๋ฉด Seed file ์ด๋‚˜ magnet ์„ ํˆญ ๋˜์ ธ์ฃผ๊ณ  ๋‹ค์šด๋ฐ›์œผ๋ผ๊ณ  ์‹œ์ผœ ๋†“์„ ์ˆ˜๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜์ƒ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋‹ค์šด์ด ์™„๋ฃŒ๋˜๋ฉด ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€์—์„œ ๋ฏธ๋””์–ด ์„œ๋ฒ„์˜ ํด๋”๋กœ ์˜์ƒ์„ ์˜ฎ๊ธฐ๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ์‹œ์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋งค์ฃผ ์ƒˆ๋กœ ๋‚˜์˜ค๋Š” ๋“œ๋ผ๋งˆ ๋˜๋Š” ์˜ํ™” ๊ฐ™์€ ๊ฒฝ์šฐ rss feeback ์„ค์ •๋งŒ ํ•ด์ฃผ๋ฉด flexget ์ด๋ผ๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ์ž๋™์œผ๋กœ ๋‹ค์šด๋ฐ›๊ณ  ๋ถ„๋ฅ˜๊นŒ์ง€ ํ•˜๋„๋ก ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด ๊ธฐ๋Šฅ์ด ์ง„์งœ ๋„ˆ๋ฌด๋„ˆ๋ฌด ํŽธ๋ฆฌํ•˜๊ณ  ์ข‹์Šต๋‹ˆ๋‹ค.



Transmission ์„ค์น˜


์ด์ œ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•  ๋ชจ๋“  ๋ช…๋ น์–ด๋Š” ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์œผ๋กœ ์‹คํ–‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ root ๊ณ„์ •์— ์ ‘์†ํ•ด์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

su -
apt install transmission-daemon -y




Transmission ํด๋” ์ƒ์„ฑ

์ƒ์„ฑํ•  ํด๋”๋Š” Nextcloud์—์„œ๋„ ํ™•์ธ ํ•ด์•ผํ•˜๋ฏ€๋กœ Nextcloud ๊ณ„์ • ๋ฐ์ดํ„ฐ ํด๋” ์ตœ์ƒ์œ„ ๋ถ€๋ถ„์— Plex/Donwloads ๋ผ๋Š” ํด๋”๋ฅผ ๋งŒ๋“ค์–ด ์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

cd /srv/nextcloud/[Nextcloud๊ณ„์ •๋ช…]/files
sudo -u www-data mkdir -m 750 Plex
cd Plex
sudo -u www-data mkdir -m 770 Downloads
  1. Nextcloud ๋ฐ์ดํ„ฐ ํด๋”์— ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.
  2. www-data ๊ณ„์ •์˜ ๊ถŒํ•œ์œผ๋กœ mkdir ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด Plex ๋ผ๋Š” ํด๋”๋ฅผ 750 ์˜ ๊ถŒํ•œ์ธ rwxrw---- ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  3. ์ƒ์„ฑํ•œ ํด๋”๋กœ ๋“ค์–ดํ•ฉ๋‹ˆ๋‹ค.
  4. 2 ๋ฒˆ๊ณผ ๊ฐ™์ด Downloads ํด๋”๋ฅผ ๊ถŒํ•œ rwxrwx--- ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํด๋” ๊ถŒํ•œ๊ณผ ์†Œ์œ ์ž ๋ฐ ๊ทธ๋ฃน์ด ์ž˜ ์„ค์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

ls -al
drwxr-x---  5 www-data www-data 4096 Mar  7 21:55 .
...
drwxrwx---  2 www-data www-data 4096 Mar  7 21:55 Downloads

Transmission ์ด ํด๋”์— ๊ทธ๋ฃน ๊ถŒํ•œ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ํŒŒ์ผ์„ ์“ธ ์ˆ˜ ์žˆ๋„๋ก debian-transmission ๊ณ„์ •์„ www-data ๊ทธ๋ฃน์— ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.
์ถ”๊ฐ€ํ•œ ํ›„ id ๋ช…๋ น์–ด๋กœ ๊ทธ๋ฃน์ด ์ถ”๊ฐ€๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

usermod -a -G www-data debian-transmission
id debian-transmission
uid=118(debian-transmission) gid=124(debian-transmission) groups=124(debian-transmission),33(www-data)

Transmission ํŒŒ์ผ์„ ์ „๋ถ€ ๋‹ค์šด๋ฐ›์•˜์„ ๊ฒฝ์šฐ ํŒŒ์ผ์˜ ์†Œ์œ ์ž์™€ ๊ทธ๋ฃน์€ debian-transmission ์œผ๋กœ ๋˜์–ด์žˆ์„ ๊ฒƒ์ด๊ณ  ์ดํ›„์— Transmission ์˜ umask ์„ค์ •๊นŒ์ง€ ๋˜์—ˆ๋‹ค ์ƒ๊ฐํ•˜๋ฉด ๊ทธ๋ฃน ๊ถŒํ•œ์€ ์ฝ๊ธฐ/์“ฐ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์ผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ Nextcloud ์—์„œ ์ด ํŒŒ์ผ์„ ์˜ฎ๊ธฐ๊ธฐ ์œ„ํ•ด์„œ๋Š” www-data ๊ณ„์ •์ด debian-transmission ๊ทธ๋ฃน์œผ๋กœ ๋“ค์–ด๊ฐ€์•ผํ•ฉ๋‹ˆ๋‹ค.

www-data ๊ณ„์ •์„ debian-transmission ๊ทธ๋ฃน์— ๋„ฃ์–ด์ฃผ๊ณ  ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

usermod -a -G debian-transmission www-data
id www-data
uid=33(www-data) gid=33(www-data) groups=33(www-data),123(ds),124(debian-transmission)

์ด๋กœ์จ ๊ถŒํ•œ ์„ค์ •๊นŒ์ง€ ๋งˆ๋ฌด๋ฆฌ๋˜์—ˆ๋Š”๋ฐ ์ดํ›„ Transmission ์›น์—์„œ ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๋„์ค‘ Permission denied ๋ผ๋Š” ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚  ๊ฒฝ์šฐ ํด๋” ์ƒ์„ฑ๋ถ€ํ„ฐ ๊ถŒํ•œ ์„ค์ •๊นŒ์ง€ ๋‹ค์‹œํ•œ๋ฒˆ ์ฒดํฌํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
Transmission ์„œ๋น„์Šค๋ฅผ restart ํ•˜๊ณ  ์šฐ๋ถ„ํˆฌ๋„ reboot ํ•ด๋ณด๊ณ  ํ•  ๊ฑฐ ๋‹ค ํ•ด๋ณด์„ธ์š”.

์ €๋„ ์„ค์น˜ ๋•Œ ์ด ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๊ณ  ์ƒ๋‹นํžˆ ๊ณค๋ž€์Šค๋Ÿฌ์› ์Šต๋‹ˆ๋‹ค.



DNS ๋ ˆ์ฝ”๋“œ ์ƒ์„ฑ


Transmission ์„ ์‚ฌ์šฉํ•  ๋„๋ฉ”์ธ์„ ์ถ”๊ฐ€ํ•˜์„ธ์š”.
์ €๋Š” ์ œ ๋„๋ฉ”์ธ์ด ์žˆ๋Š” ํ˜ธ์ŠคํŒ…์ผ€์ด์•Œ์—์„œ ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋ถ€๋ถ„์€ ์•ž์—์„œ ๋งŽ์ด ๋‹ค๋ค˜๊ธฐ ๋•Œ๋ฌธ์— ์ƒ๋žตํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.



Transmission ์„ค์ •


์„œ๋น„์Šค ์ค‘์ง€ ๋ฐ ์„ค์ • ํŒŒ์ผ ์ˆ˜์ •

Transmission ์˜ ์„ค์ • ํŒŒ์ผ์„ ์ˆ˜์ •ํ•  ๋• ํ•ญ์ƒ ์„œ๋น„์Šค๋ฅผ ๋จผ์ € ์ข…๋ฃŒํ•˜๊ณ  ์ˆ˜์ •ํ•œ ํ›„ ๋‹ค์‹œ ์‹คํ–‰ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฐ˜์˜๋˜์ง€ ์•Š์„ ๋ฟ๋”๋Ÿฌ ์„ค์ • ํ•œ ๊ฐ’์ด ์›์ƒ ๋ณต๊ท€ ๋ฉ๋‹ˆ๋‹ค.

service transmission-daemon stop

๋งŽ์€ ์˜ต์…˜๋“ค ์ค‘ ํ•„์š”ํ•œ ๊ฒƒ๋“ค๋งŒ ๊ฑด๋“œ๋ ค์„œ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๋„๋ก ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

cd /etc/transmission-daemon
vim settings.json
{
...
    "blocklist-enabled": true,
    "blocklist-url": "http://john.bitsurge.net/public/biglist.p2p.gz",
    "download-dir": "/srv/nextcloud/[Nextcloud๊ณ„์ •๋ช…]/files/Plex/Downloads",
    "download-queue-enabled": true, 
    "rpc-authentication-required": false,
    "rpc-host-whitelist": "[Transmission๋„๋ฉ”์ธ]",
    "rpc-host-whitelist-enabled": true,
    "rpc-password": "[Transmission๋น„๋ฐ€๋ฒˆํ˜ธ]",
    "rpc-port": 9091, 
    "rpc-username": "[Transmission๊ณ„์ •๋ช…]",
    "script-torrent-done-enabled": true,
    "script-torrent-done-filename": "/etc/transmission-daemon/AutoRemove.sh",
    "speed-limit-up": 0,
    "speed-limit-up-enabled": true,
    "trash-original-torrent-files": true,
    "umask": 2,
...
}
  • blocklist-enabled ์ฐจ๋‹จ ๋ฆฌ์ŠคํŠธ๋“ค์˜ ์ฐจ๋‹จ ์—ฌ๋ถ€
  • blocklist-url ํ™ˆ์„œ๋ฒ„์— ์ŠคํŒŒ์ด์›จ์–ด๋‚˜ ๋ฉ€์›จ์–ด ๋“ฑ์„ ์‹ฌ์–ด ๊ณต๊ฒฉํ•˜๋ ค๋Š” ๊ฒƒ์„ ๋ง‰๊ธฐ ์œ„ํ•œ ์ฐจ๋‹จ ๋ฆฌ์ŠคํŠธ
  • download-dir ํŒŒ์ผ์ด ๋‹ค์šด๋กœ๋“œ ๋˜๋Š” ๊ฒฝ๋กœ
  • download-queue-enabled ๋™์‹œ ๋‹ค์šด๋กœ๋“œ ๊ฐฏ์ˆ˜ ์ง€์ • ์—ฌ๋ถ€ (์™ ๋งŒํ•ด์„  ๊ธฐ๋ณธ๊ฐ’์ธ true๋กœ ๋‘์„ธ์š”. ํŒŒ์ผ์‹œ์Šคํ…œ ๊ณผ๋ถ€ํ™” ๋ฐฉ์ง€)
  • rpc-authentication-required transmission ์›น ์ ‘์†ํ•  ๋•Œ ๋กœ๊ทธ์ธ ์—ฌ๋ถ€ (nginx์ƒ ๋กœ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜์—ฌ fail2ban๊นŒ์ง€ ์ ์šฉํ•ด ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•  ๊ฒƒ์ด๋ผ false๋ผ๊ณ  ์ž…๋ ฅํ•จ)
  • rpc-host-whitelist ํ—ˆ์šฉํ•  ๋„๋ฉ”์ธ
  • rpc-host-whitelist-enabled ๋„๋ฉ”์ธ ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ ํ™œ์„ฑํ™” ์—ฌ๋ถ€
  • rpc-password Transmission ์„œ๋น„์Šค์˜ ๊ณ„์ • ๋น„๋ฐ€๋ฒˆํ˜ธ
  • rpc-port Transmission ์„œ๋น„์Šค๋ฅผ ์‹คํ–‰ํ•  ํฌํŠธ
  • rpc-username Transmission ์„œ๋น„์Šค์˜ ๊ณ„์ •๋ช…
  • script-torrent-done-enabled ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋๋‚ฌ์„ ๋•Œ ์Šคํฌ๋ฆฝํŠธ ์‹คํ–‰ ์—ฌ๋ถ€
  • script-torrent-done-filename ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋๋‚ฌ์„ ๋•Œ ์‹คํ–‰ํ•  ์Šคํฌ๋ฆฝํŠธ ๊ฒฝ๋กœ
  • speed-limit-up ์—…๋กœ๋“œ ์ตœ๋Œ€ ์†๋„ (๋ณดํ†ต ๋‹ค์šด๋กœ๋“œ๋ฅผ ํ–ˆ์œผ๋ฉด ์—…๋กœ๋“œ๋„ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ํ† ๋ ŒํŠธ ๊ทœ์น™์ด์ง€๋งŒ ๋ฒ•๋ฅ  ๋“ฑ์˜ ๋ฌธ์ œ๋กœ ์ธํ•ด ์ด๊ธฐ์ ์ด๊ฒ ์ง€๋งŒ ์—…๋กœ๋“œ๋Š” ์•ˆ ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋‹ˆ 0์œผ๋กœ ์„ค์ •)
  • speed-limit-up-enabled ์—…๋กœ๋“œ ์†๋„ ์ œํ•œ ์—ฌ๋ถ€
  • trash-original-torrent-files .torrent ์‹œ๋“œ ํŒŒ์ผ์„ ๋“ฑ๋กํ•˜๋ฉด ์ž๋™์œผ๋กœ ์ €์žฅ์ด ๋˜๋Š”๋ฐ ์ด ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์‚ญ์ œํ• ์ง€ ์—ฌ๋ถ€
  • umask ๋‹ค์šด๋กœ๋“œํ•œ ํŒŒ์ผ์— ๋ถ€์—ฌํ•  umask (2๋กœ ์„ค์ •ํ•˜๋ฉด ํด๋” 775(rwxrwxr-x), ํŒŒ์ผ 664(rw-rwโ€”-) ๊ถŒํ•œ์ด ์ƒ๊ฒจ Nextcloud์™€ ์ดํ›„ ์„ค์น˜ํ•  Plex์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ)



์‹œ๋“œ ์ž๋™ ์‚ญ์ œ

๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๊ณ  ๋‚˜๋„ ์‹œ๋“œ ์—ญํ•  ์ˆ˜ํ–‰์„ ์œ„ํ•ด ํ† ๋ ŒํŠธ๊ฐ€ ๋‚จ์•„์žˆ๋Š”๋ฐ ์–ด์งœํ”ผ ์‹œ๋“œ ์—ญํ•  ์ˆ˜ํ–‰์„ ๋ชปํ•˜๊ฒŒ ์—…๋กœ๋“œ ์†๋„๋ฅผ 0์œผ๋กœ ๋งž์ท„๊ธฐ ๋•Œ๋ฌธ์— ์˜๋ฏธ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ๋ฆฌ์ŠคํŠธ์—์„œ ์ž๋™ ์‚ญ์ œ ๋˜๋„๋ก ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

cd /etc/transmission-daemon
vim AutoRemove.sh
SERVER="9091 --auth [Transmission์•„์ด๋””]:[Transmission๋น„๋ฐ€๋ฒˆํ˜ธ]"
TORRENTLIST=`transmission-remote $SERVER --list | sed -e '1d;$d;s/^ *//' | cut --only-delimited --delimiter=" " --fields=1`
for TORRENTID in $TORRENTLIST
do
    DL_COMPLETED=`transmission-remote $SERVER --torrent $TORRENTID --info | grep "Percent Done: 100%"`
    STATE_STOPPED=`transmission-remote $SERVER --torrent $TORRENTID --info | grep "State: Seeding\|Stopped\|Finished\|Idle"`
    if [ "$DL_COMPLETED"  ] && [ "$STATE_STOPPED"  ]; then
        transmission-remote $SERVER --torrent $TORRENTID --remove
    fi
done

AutoRemove.sh ๋ผ๋Š” ์ƒˆ ํŒŒ์ผ์— ์•„๋ž˜ ๋‚ด์šฉ ์ค‘ ์ฒซ ์ค„์˜ [Transmission์•„์ด๋””] ์™€ [Transmission๋น„๋ฐ€๋ฒˆํ˜ธ] ๋งŒ ์ˆ˜์ •ํ•ด์„œ ์ž‘์„ฑํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


์ž‘์„ฑํ•œ ํŒŒ์ผ์˜ ์†Œ์œ ์ž์™€ ๊ถŒํ•œ Transmission ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ”๊ฟ”์ฃผ์„ธ์š”.

chown debian-transmission:debian-transmission AutoRemove.sh
chmod u+x AutoRemove.sh

์„ค์ •์ด ์™„๋ฃŒ ๋˜์—ˆ์œผ๋ฉด ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ์‹œ๋‹ค.

service transmission-daemon start




Nginx ์„ค์ •


์™ธ๋ถ€์—์„œ Transmission ์›น ์„œ๋น„์Šค์— ์ ‘์†ํ•˜๋Š” ๊ธฐ๋ณธ ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. 9091๋ฒˆ ํฌํŠธ์˜ ํฌํŠธ ํฌ์›Œ๋”ฉ
  2. 9091๋ฒˆ ํฌํŠธ ๋ฐฉํ™”๋ฒฝ ์„ค์ •
  3. http://[ํ™ˆ์„œ๋ฒ„๋„๋ฉ”์ธ]:9091 ์ฃผ์†Œ๋ฅผ ์ ‘์†

์ €๋Š” ๋ชจ๋“  ์›น ์„œ๋น„์Šค๊ฐ€ https์ธ 443ํฌํŠธ๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ ‘์†ํ•˜๋„๋ก ํ•˜๊ณ ์‹ถ์Šต๋‹ˆ๋‹ค.
๋”๊ตฐ๋‹ค๋‚˜ ํฌํŠธํฌ์›Œ๋”ฉ, ๋ฐฉํ™”๋ฒฝ ์„ค์ • ์—†์ด ๋ฏธ๋ฆฌ ์—ด์–ด๋†“์€ ์›น ํฌํŠธ๋กœ๋งŒ ํ†ต์‹ ํ•˜๋„๋ก ํ•˜๊ณ ์‹ถ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ Nginx ์—์„œ Revese proxy ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  ์™ธ๋ถ€์—์„œ https://[Transmission๋„๋ฉ”์ธ] ์œผ๋กœ ์ ‘์†ํ•˜๋ฉด ๋‚ด๋ถ€์—์„œ http://127.0.0.1:9091 ๋กœ ์ ‘์†ํ•œ ํŽ˜์ด์ง€๋ฅผ ์ „๋‹ฌ ํ•ด์ฃผ๋„๋ก ์„ค์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ fail2ban ์„ ์œ„ํ•ด Transmission ์˜ ์ธ์ฆ ์„ค์ •์„ ํ•ด์ œํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— Nginx ์—์„œ htpasswd ์ธ์ฆ๊นŒ์ง€ ๋‹ค๋ค„์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ธ์ฆ ํŒŒ์ผ ์ƒ์„ฑ

์•„ํŒŒ์น˜ ํˆด์ธ htpasswd ๋ช…๋ น์–ด๋กœ ํŒŒ์ผ ์ด๋ฆ„์„ ๊ณ„์ •๋ช…์œผ๋กœ ํ•˜๊ณ  ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š”.
์ด์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ 2ํšŒ ์ž…๋ ฅํ•˜์‹œ๋ฉด ์ธ์ฆ ํŒŒ์ผ์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

apt install apache2-utils -y
htpasswd -c /etc/transmission-daemon/.htpasswd [Transmission๊ณ„์ •๋ช…]

์„œ๋ฒ„ ๋ธ”๋ก ๋งŒ๋“ค๊ธฐ

๋‹ค๋ฅธ ์„œ๋ฒ„๋ธ”๋ก๋“ค๊ณผ ๋‹ค๋ฅด๊ฒŒ error_log ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š์•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋„๋ก ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋Ÿฌ๋ฉด nginx ์˜ ๊ธฐ๋ณธ๊ฐ’์„ ํ†ตํ•ด Transmission ์˜ ๋ชจ๋“  ์—๋Ÿฌ ๋กœ๊ทธ๊ฐ€ /var/log/nginx/error.log ํŒŒ์ผ์— ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.
๋‚˜์ค‘์— ๋ณด์•ˆ ์„ค์ • ํ•  fail2ban์„ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

vim /etc/nginx/sites-available/[Transmission๋„๋ฉ”์ธ]
server {
        listen 80;
        server_name [Transmission๋„๋ฉ”์ธ];
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2;
        server_name [Transmission๋„๋ฉ”์ธ];

        access_log /var/log/nginx/rpc.access.log;

        ssl_certificate /etc/letsencrypt/live/[๋„๋ฉ”์ธ]/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/[๋„๋ฉ”์ธ]/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/[๋„๋ฉ”์ธ]/chain.pem;
        ssl_dhparam /etc/ssl/dhparam.pem;
        ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
        ssl_ecdh_curve secp384r1;
        ssl_stapling on;
        ssl_stapling_verify on;

        add_header Strict-Transport-Security max-age=15552000;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-XSS-Protection "1; mode=block" always;

        client_max_body_size 0;
        auth_basic "";
        auth_basic_user_file /etc/transmission-daemon/.htpasswd;

        location / {
                proxy_pass http://127.0.0.1:9091;
                proxy_http_version 1.1;
                proxy_pass_header X-Transmission-Session-Id;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
}
ln -s /etc/nginx/sites-available/[Transmission๋„๋ฉ”์ธ] /etc/nginx/sites-enabled/

Nginx์— ์„ค์ •์„ ๋ฐ˜์˜ํ•ฉ์‹œ๋‹ค.

service nginx restart

์›น ๋ธŒ๋ผ์šฐ์ €๋กœ https://[Transmission๋„๋ฉ”์ธ] ์— ์ ‘์†ํ•œ ํ›„ htpasswd ๋กœ ์„ค์ •ํ•œ ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ•ฉ์‹œ๋‹ค.

์™ผ์ชฝ ์œ„ ํด๋” ๋ชจ์–‘์„ ๋ˆ„๋ฅด๊ณ  ํ† ๋ ŒํŠธ ์‹œ๋“œ ํŒŒ์ผ์ด๋‚˜ ๋งˆ๊ทธ๋„ท์„ ๋„ฃ์–ด์ฃผ๋ฉด ๋‹ค์šด๋กœ๋“œ๊ฐ€ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

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

  • ์ฃผ์†Œ [Transmission๋„๋ฉ”์ธ]
  • ํฌํŠธ 443



๋ฒ•๋ฅ  ๋ฌธ์ œ


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

์šฐ์„  ๊ด€๋ จ ๋ฒ•๋ น๋ถ€ํ„ฐ ํ•œ๋ฒˆ ๋ด…์‹œ๋‹ค.

๋Œ€ํ•œ๋ฏผ๊ตญ ์ €์ž‘๊ถŒ๋ฒ• ์ œ1์žฅ ์ œ30์กฐ

์ œ30์กฐ(์‚ฌ์ ์ด์šฉ์„ ์œ„ํ•œ ๋ณต์ œ) ๊ณตํ‘œ๋œ ์ €์ž‘๋ฌผ์„ ์˜๋ฆฌ๋ฅผ ๋ชฉ์ ์œผ๋กœ ํ•˜์ง€ ์•„๋‹ˆํ•˜๊ณ  ๊ฐœ์ธ์ ์œผ๋กœ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๊ฐ€์ • ๋ฐ ์ด์— ์ค€ํ•˜๋Š” ํ•œ์ •๋œ ๋ฒ”์œ„ ์•ˆ์—์„œ ์ด์šฉํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๊ทธ ์ด์šฉ์ž๋Š” ์ด๋ฅผ ๋ณต์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‹ค๋งŒ, ๊ณต์ค‘์˜ ์‚ฌ์šฉ์— ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ์„ค์น˜๋œ ๋ณต์‚ฌ๊ธฐ๊ธฐ, ์Šค์บ๋„ˆ, ์‚ฌ์ง„๊ธฐ ๋“ฑ ๋ฌธํ™”์ฒด์œก๊ด€๊ด‘๋ถ€๋ น์œผ๋กœ ์ •ํ•˜๋Š” ๋ณต์ œ๊ธฐ๊ธฐ์— ์˜ํ•œ ๋ณต์ œ๋Š” ๊ทธ๋Ÿฌํ•˜์ง€ ์•„๋‹ˆํ•˜๋‹ค. <๊ฐœ์ • 2020. 2. 4.>

https://www.law.go.kr/๋ฒ•๋ น/์ €์ž‘๊ถŒ๋ฒ•/(20201208,17592,20201208)/์ œ30์กฐ



๋ฐฐํฌํ•˜์ง€ ๋ง์ž

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

๋˜, ์ด์ „์— ํ–ˆ์„ํ…๋ฐ Transmission ์˜ ์—…๋กœ๋“œ ์†๋„ ์ œํ•œ์„ 0 ์œผ๋กœ ์„ค์ •ํ•˜์…”์•ผํ•ฉ๋‹ˆ๋‹ค.
ํ† ๋ ŒํŠธ ๊ทœ์น™ ์ƒ์—์„  ๋‹ค์šด๋ฐ›์•˜์œผ๋‹ˆ ๋ฐฐํฌ๋„ ํ•ด์ฃผ๋Š”๊ฒŒ ์˜ฌ๋ฐ”๋ฅธ ํ–‰๋™์ด์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด ์•„๋ฌด๋ฆฌ ์กฐ๊ฐ์ด๋ผ๊ณ  ํ•ด๋„ ๋ฐฐํฌ๋ฅผ ํ•œ ๊ฒƒ์ด ๋˜๋‹ˆ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๋”ฐ๋ผ์„œ ๋ฐฐํฌ๋ฅผ ํ•˜์ง€๋ง๊ณ  ์ž์‹ ๋„ ๋ชจ๋ฅด๊ฒŒ ๋ฐฐํฌ๋  ์ˆ˜ ์žˆ๋Š” ์—…๋กœ๋“œ๋ฅผ ์ œํ•œ ๊ฑธ์–ด๋‘์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด ํ•ญ๋ชฉ์€ ๋‹ค์Œ ์ฑ•ํ„ฐ์ธ Plex ์„ค์น˜ํ•ด์„œ ์ง์ ‘ ํ™•์ธํ•ด ๋ณผ ๊ฒƒ์ž…๋‹ˆ๋‹ค.


๋‚˜๋งŒ ๋ณด์ž

๋ณดํ†ต ๋“œ๋ผ๋งˆ, ์˜ˆ๋Šฅ, ์˜ํ™” ๋“ฑ์„ ๋งŽ์ด ํ† ๋ ŒํŠธ๋กœ ๋ฐ›์•„ ์‹œ์ฒญํ•˜์‹คํ…๋ฐ Plex ์— ๋ถ„๋ฅ˜๊ฐ€ ๋˜์—ˆ์žˆ๋Š” ๊ฒƒ์„ ๋‹ค๋ฅธ์‚ฌ๋žŒ๋“ค๊ณผ ํ•จ๊ป˜ ๋ณด๊ธฐ์œ„ํ•ด Plex ์‚ฌ์ดํŠธ ๊ณ„์ •์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ๋„ ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.
์™ ๋งŒํ•˜๋ฉด ๊ทธ๋ƒฅ ์ž๊ธฐ ์ž์‹ ๋งŒ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.
๊ทธ๋ž˜์•ผ ์‚ฌ์ ์ด์šฉ์„ ์œ„ํ•œ ๋ณต์ œ ํ•ญ๋ชฉ์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๊นŒ?


๊ฐœ์ธ์ ์ธ ์ƒ๊ฐ

ํ†ต์‹ ์‚ฌ TV ๊ฐ€์ž…์„ ํ•˜๋“  ๋„ทํ”Œ๋ฆญ์Šค ๊ฒฐ์žฌ๋ฅผ ํ•˜๋“  ๊ทธ๋ƒฅ ์œ ๋ฃŒ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ œ์ผ ๋ฐ”๋žŒ์งํ•œ ํ–‰๋™์ด๊ธด ํ•ฉ๋‹ˆ๋‹ค.
๋ฌด๋ฃŒ๋กœ ์ด๋Ÿฌํ•œ ํ˜œํƒ์„ ๋ˆ„๋ฆฌ๋Š” ๊ฒƒ์—๋Š” ํ•ญ์ƒ ๋ฆฌ์Šคํฌ๋„ ์กด์žฌ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ์ง€๋Š” ๊ผญ ์—ผ๋‘ํ•˜์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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




fail2ban ์ ์šฉ


์šฐ์„  Transmission ์›น ๋กœ๊ทธ์ธ ์ฐฝ์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ ํ‹€๋ฆฌ๊ฒŒ ์ž…๋ ฅํ•ด์„œ ๋กœ๊ทธ๊ฐ€ ๋‚จ๋„๋ก ํ•œ ๋‹ค์Œ ํ™•์ธํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—๋Ÿฌ ๋กœ๊ทธ ํ™•์ธ

tail /var/log/nginx/error.log
2021/03/27 23:07:37 [error] 7148#7148: *1 user "qwer" was not found in "/etc/transmission-daemon/.htpasswd", client: 192.168.0.1, server: [Transmission๋„๋ฉ”์ธ], request: "GET / HTTP/2.0", host: "[Transmission๋„๋ฉ”์ธ]"
2020/03/27 23:16:18 [error] 7148#7148: *135 user "qwe" was not found in "/etc/transmission-daemon/.htpasswd", client: 192.168.0.1, server: [Transmission๋„๋ฉ”์ธ], request: "GET / HTTP/2.0", host: "[Transmission๋„๋ฉ”์ธ]"
2021/03/27 23:16:19 [error] 7148#7148: *135 user "asd" was not found in "/etc/transmission-daemon/.htpasswd", client: 192.168.0.1, server: [Transmission๋„๋ฉ”์ธ], request: "GET / HTTP/2.0", host: "[Transmission๋„๋ฉ”์ธ]"
2021/03/27 23:16:20 [error] 7148#7148: *135 user "zxc" was not found in "/etc/transmission-daemon/.htpasswd", client: 192.168.0.1, server: [Transmission๋„๋ฉ”์ธ], request: "GET / HTTP/2.0", host: "[Transmission๋„๋ฉ”์ธ]"
2021/03/27 23:16:22 [error] 7148#7148: *135 user "cvb" was not found in "/etc/transmission-daemon/.htpasswd", client: 192.168.0.1, server: [Transmission๋„๋ฉ”์ธ], request: "GET / HTTP/2.0", host: "[Transmission๋„๋ฉ”์ธ]"

์ฒซ ๋ฒˆ์งธ ์ค„์„ ์˜ˆ์‹œ๋กœ ๋“ค๋ฉด 192.168.0.1 ์—์„œ [Transmission๋„๋ฉ”์ธ] ์œผ๋กœ ์œ ์ € qwer๊ฐ€ ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์‹คํŒจํ–ˆ๋‹ค๊ณ  ๊ธฐ๋ก์ด ๋‚จ์•˜์Šต๋‹ˆ๋‹ค.


fail2ban ๊ฐ์˜ฅ ์ƒ์„ฑ

vim /etc/fail2ban/jail.d/nginx-http-auth.conf
[nginx-http-auth]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nginx-http-auth
logpath = /var/log/nginx/error.log

fail2ban ์—์„œ๋Š” ์ด nginx ๋กœ๊ทธ ํ•„ํ„ฐ๋ง ์ •๊ทœ์‹์„ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•ด์ฃผ๋ฏ€๋กœ ์ด๋ฅผ ์ด์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.


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

service fail2ban reload
fail2ban-client status nginx-http-auth
Status for the jail: nginx-http-auth
|- Filter
|  |- Currently failed: 0
|  |- Total failed:     0
|  `- File list:        /var/log/nginx/error.log
`- Actions
   |- Currently banned: 0
   |- Total banned:     0
   `- Banned IP list:

์ด์ œ ์Šค๋งˆํŠธํฐ ๋ชจ๋ฐ”์ผ ๋ฐ์ดํ„ฐ ํ™˜๊ฒฝ์œผ๋กœ Transmission ์›น์œผ๋กœ ์ ‘์†์„ ํ•˜๊ณ  ์ผ๋ถ€๋Ÿฌ 5๋ฒˆ ๋กœ๊ทธ์ธ์„ ์‹คํŒจํ•œ ๋’ค ํ™•์ธํ•ด๋ณด๋ฉด ์ •์ƒ์ ์œผ๋กœ ๋ฒค ๋‹นํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

fail2ban-client status nginx-http-auth
Status for the jail: nginx-http-auth
|- Filter
|  |- Currently failed: 1
|  |- Total failed:     5
|  `- File list:        /var/log/nginx/error.log
`- Actions
   |- Currently banned: 1
   |- Total banned:     1
   `- Banned IP list:   223.39.149.49

๋ณด์•ˆ๊นŒ์ง€ ์™„๋ฒฝํ•˜๊ฒŒ ๋๋ƒˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ ์‚ฌ์šฉํ•  ์ผ๋งŒ ๋‚จ์•˜๋Š”๋ฐ ์ž๋™์œผ๋กœ ๋‹ค์šด ๋ฐ ๋ถ„๋ฅ˜๋ฅผ ํ•ด์ฃผ๋Š” rss feeback ์„ ํ™œ์šฉํ•œ flexget ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค์Œ ์ฑ•ํ„ฐ์—์„œ ์„ค์น˜ํ•  ๋ฏธ๋””์–ด ์„œ๋ฒ„ Plex ๊นŒ์ง€ ์„ค์น˜ ํ•œ ๋’ค์— ๋งˆ์ง€๋ง‰ ์ฑ•ํ„ฐ์—์„œ ์ ์šฉํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

profile
์•ˆ๋…•, ์„ธ์ƒ!

0๊ฐœ์˜ ๋Œ“๊ธ€