Ubuntu 22.04 서버 세팅하기 🛠️

서문 Windows 7을 약 2주 간 서버로 사용한 후 다시 Ubuntu 22.04로 돌아왔다. OBS 송출 테스트를 위해 Ubuntu Server 대신 Ubuntu를 설치했고, 완전한 순정 상태다. 이번 글에서는 Ubuntu 22.04를 서버로 사용하기 편리하게 세팅하는 방법을 소개하겠다. 이 글과 겹치는 내용이 있으나 추가적으로 업데이트 된 내용도 있다. 반드시 순정 상태에서, 홈 디렉토리에서 해야 문제가 생기지 않는다. ✅ 패키지 업데이트 sudo apt-get update -y sudo apt-get upgrade -y 🪡 각종 인프라 유틸리티 sudo apt-get install htop net-tools neofetch cpufetch 👸 터미널을 예쁘게 만들기 sudo apt-get install zsh git curl -y sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" git clone --depth=1 https://github.com/romkatv/powerlevel10k.git ~/powerlevel10k echo 'source ~/powerlevel10k/powerlevel10k.zsh-theme' >>! ~/.zshrc source ~/.zshrc ⚒️ zsh 플러그인 설치 git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions)/g' ~/.zshrc git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting echo "source ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh" >> ${HOME}/.zshrc source ~/.zshrc 🔋 노트북 덮개 덮어도 전원 유지 sudo sed -i 's/#HandleLidSwitch=suspend/HandleLidSwitch=ignore/g' /etc/systemd/logind.conf sudo systemctl restart systemd-logind 🔐 git credential 세팅 git clone <개인 repo> cd <개인 repo> git config --global credential.helper store 💻 nodejs 설치 및 개발 환경 세팅 sudo apt install nodejs -y sudo apt install npm -y sudo npm cache clean -f sudo npm install -g n sudo n stable sudo npm install -g yarn nodemon pm2 typescript ts-node 💻 pip 설치 curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python3 get-pip.py PATH=$HOME/.local/bin:$PATH echo "alias p='python3'" >> ~/.zshrc source ~/.zshrc 📲 ftp 서버 구축 sudo apt install vsftpd -y sudo sh -c "echo -e 'listen=YES\nlisten_ipv6=NO\nanonymous_enable=NO\nport_enable=NO\npasv_enable=YES\nlocal_enable=YES\nwrite_enable=YES\nuse_localtime=YES\nxferlog_enable=YES\nsecure_chroot_dir=/var/run/vsftpd/empty\npam_service_name=vsftpd\nssl_enable=YES\nrsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem\nrsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key\nlisten_port=21\npasv_min_port=60020\npasv_max_port=60030' > /etc/vsftpd.conf" sudo systemctl enable vsftpd sudo systemctl restart vsftpd 🎮 rdp 구축 sudo apt install xrdp -y sudo adduser xrdp ssl-cert sudo sh -c "sed -i '1 i\export XDG_CURRENT_DESKTOP=ubuntu:GNOME' /etc/xrdp/startwm.sh" sudo sh -c "sed -i '1 i\export GNOME_SHELL_SESSION_MODE=ubuntu' /etc/xrdp/startwm.sh" sudo sh -c "echo 'unset DBUS_SESSION_BUS_ADDRESS' >> /etc/xrdp/startwm.sh" sudo sh -c "echo 'unset XDG_RUNTIME_DIR' >> /etc/xrdp/startwm.sh" sudo service xrdp restart 💬 irc 구축 sudo apt-get install perl g++ make wget -y wget https://github.com/inspircd/inspircd/archive/refs/tags/v3.14.0.tar.gz tar xvf ./v3.14.0.tar.gz cd inspircd-3.14.0 perl ./configure make make -j5 install nano run/conf/inspircd.conf 다음과 같이 입력한다. ...

September 5, 2022 · 3 min · 450 words · Me

Heroku를 활용한 서버리스 인프라 구축 ⚙️

Serverless란? 서버리스. 서버가 없는 것을 뜻한다. 개발자가 서버를 관리할 필요 없이 백엔드가 존재하는 node.js, python 등의 코드를 돌릴 수 있게 하는 것을 의미한다. 그래서 엄밀히 말하자면 서버리스라고 해서 서버가 정말 존재하지 않는 것은 아니고 클라우드 제공 업체에 있는 것이다. 이런 서버리스 구조를 PaaS (Platform as a Service) 라고 하는데, 만약 nodejs 웹어플리케이션을 배포한다고 가정했을 때 aws의 ec2, google의 gcp, oracle의 oracle cloud와 같은 IaaS (Infrastructure as a Service) 같은 경우에는 리눅스 VPS에서 직접 npm을 설치하고, git 세팅도 하는 등의 기본적인 세팅까지 해야 한다. 반면 PaaS는 코드를 저장소에 push 하기만 하면 자동으로 빌드되어 수 초 안으로 웹어플리케이션을 배포할 수 있게 된다. 이것이 가능한 이유는 PaaS에는 운영체제, 미들웨어, 런타임이 미리 구축된 상태로 제공되기 때문이다. (참고 1, 2) 또한 IaaS와 다르게 코드를 사용할 때만, 사용자가 웹어플리케이션에 접속할 때만 과금이 되기 때문에 가벼운 사이드 프로젝트를 할 때는 IaaS보다 경제적이라고 할 수 있다. ...

May 29, 2022 · 2 min · 368 words · Me

Tor 서버에서 나만의 .onion 도메인 생성하기 (커스텀 도메인) 🧅

서문 Tor 브라우저로 딥웹을 서핑하다 보면 어떤 사이트는 정말 랜덤한 56자리의 도메인 (onion v3 기준) 을 가진 곳이 있고, 어떤 사이트는 랜덤한 문자열 앞에 의미가 있는 단어를 포함한 경우도 있는 것을 보았다. 예를 들어 한 Q&A 사이트는 도메인이 answer로 시작하고, 호스팅 사이트는 dhosting 으로 시작하는 사이트가 있다. 심지어 페이스북 딥웹 사이트는 onion v2 때 랜덤한 문자열이 전혀 없었고 Facebook's Core WWW Infrastructure 를 뜻하는 facebookcorewwwi.onion 을 가지고 있었다. 도대체 이러한 도메인은 어떻게 만드는 것일까 연구를 해보다 한글 자료가 거의 없어서 직접 정리를 해본다. ...

May 26, 2022 · 3 min · 475 words · Me

BetterUptime으로 리눅스 서버 모니터링하기 👨‍🔧

BetterUptime이라는 서비스가 있다. betteruptime이란 서버의 상태를 쉽게 모니터링할 수 있는 서비스인데, 웹사이트, SSL, ping, cron 등을 모니터링할 수 있다. 여기서 모니터링은 서버가 켜진지 꺼진지, uptime 시간과 비율은 얼마나 되는지에 대한 정보들을 확인하는 것을 말한다. BetterUptime 장점은 만약 서버에 문제가 생겼을 시 이메일, 전화, 문자, slack 등으로 즉시 알림을 보낼 수 있다. 가입 BetterUptime 사이트에 들어가서 Sign Up을 한다. 처음 로그인할 때는 로그인 링크를 이메일로 받은 뒤, 계정 설정에서 비밀번호를 설정해주면 된다. ...

May 25, 2022 · 3 min · 521 words · Me

Tor 출구 노드 (Exit node) 운영하기 🧅

Tor란? 기술적인 이야기는 최대한 빼고 쉽게 설명해보겠다. Tor는 The Onion Router의 약자로, 네트워크를 우회하여 사용할 수 있게 해주는 툴이다. Tor는 본래 미국 정부에서 인터넷 프라이버시를 지키기 위해, 국가에서 인터넷 감시를 당하는 사람을 위해 개발되었는데, 익명성을 유지할 수 있다는 Tor의 장점 때문에 비트코인 자금세탁, 마약, 총기, 위조 여권, 청부 살인 서비스가 운영되는 딥 웹 범죄 현장이 되기도 한다. 여기서 딥 웹은 일반적인 검색 엔진으로 검색되지 않고 Tor 브라우저를 통해서만 들어갈 수 있는 .onion 도메인을 가진 웹을 뜻한다. 앞서 작성한 이 글의 ‘보안 4단계’ 부분은 .onion 도메인을 가진 딥 웹에 블로그를 만드는 것이다. 그렇다면 Tor는 어떻게 익명성을 유지한 채로 인터넷을 사용할 수 있다는 것일까? 전세계에 분포하는 토르 라우터가 실행되고 있는 노드를 세 번 거쳐서 도달한다. 쉽게 설명해보자면 한국 -> 미국 -> 덴마크 -> 네덜란드를 거쳐 사이트에 접속하게 되는데, 최종적으로는 내가 네덜란드에서 접속한 것으로 인식하게 된다. 이러한 구조 덕분에 웹서핑을 할 때 나의 개인정보를 남기지 않고 보안 설정만 유의한다면 미국 NSA도 뚫기 힘든 수준의 익명성을 유지한 채로 웹서핑을 할 수 있다. 이 곳에 가면 전세계 Tor 노드들 위치가 나와있다. Bridges, Other, Stable, Fast Stable, Exit, Fast Exit, Authority, Bad 모두 체크를 하고 지도를 본다면 어마어마하게 많은 위치에 핑이 찍혀 있을 것이다. 우리나라에 현재 운영중인 노드는 11개가 있다고 나오는데 실제로는 더 많을 것이다. 나 역시 인터넷 검열로부터 자유롭고 싶어하는 사람을 위해 나만의 Tor 노드를 만드는 것으로 기여하겠다. ...

May 24, 2022 · 2 min · 314 words · Me

fail2ban보다 더 강력한 보안을 위한 방안은?

이 글에서 이어지는 내용이다. fail2ban을 통하여 ssh 비밀번호를 3번 틀리면 120분 밴하도록 설정했다. 그런데 해커들은 그것을 뚫고서 계속해서 공격을 한다. (?) 3일간 31357번의 로그인 시도가 존재해 일주일 간 총 64322번이다. github에 검색을 해보니 fail2ban을 우회할 수 있는 툴을 발견했다. 이론상 fail2ban을 우회할 수 있는 방법이 존재하는 듯 하며 fail2ban을 통한 해커 차단을 실패한 경우도 찾아볼 수 있었다.(1 2) fail2ban 서비스를 내리고, 특정한 ip 대역 이외에는 서버에 접근조차 못하도록 하는 방식을 선택해야겠다. 그리고 실제로 기능이 잘 작동하는지 보기 위해 /var/log/btmp를 빈 파일로 만든다. ...

May 22, 2022 · 2 min · 224 words · Me

fail2ban으로 SSH 보안 향상하기 / 접속 차단

로그인 시도 기록 확인 sudo lastb lastb 파일은 /var/log/lastb 파일을 뜻하는데, 그냥 sudo cat /var/log/lastb를 하면 이상한 문자들까지 같이 나와서 보기가 상당히 어렵다. 따라서 위의 명령어를 사용해야 한다. 그런데 로그인 시도 기록이 너무 많아서 터미널에서 한번에 보기 어렵다면 less 명령을 활용하자. 방향키로 탐색하며 로그를 볼 수 있다. sudo lastb | less 로그인 시도 기록이 몇 건인지 확인하고 싶으면 줄 수를 알려주는 명령인 wc를 활용하자. sudo lastb | wc -l SSH 접속 화이트리스트/블랙리스트 설정 sudo nano /etc/hosts.allow # /etc/hosts.allow sshd: 123.123.123.123 sshd: 123.10.0. hosts.allow 파일에 위와 같이 작성하면 123.123.123.123과 123.10.0.XXX 대역에서만 로그인할 수 있다. ...

May 19, 2022 · 2 min · 404 words · Me

Ubuntu 홈서버 구축 가이드 💻

서문 이 글은 홈서버를 구축하기 위한 완전한 가이드다. 홈서버의 개념, 장점, VPS와의 차이, 운영체제 설치와 각종 툴 설치에 대한 내용을 설명하고 있다. 아래에서 설명하는 내용은 반드시 중요 자료를 백업한 후에 진행해야 한다. 홈서버란? 홈서버란 집에 나만의 서버를 구축하는 것이다. 집에 서버를 구축하는 이유는 재미, 학습의 이유, 동영상 다운로드나 토렌트와 같은 반복적인 업무를 수행하기 위한 목적이 있다. 데이터 센터에서 VPS 서버를 대여하는 것이 네트워크 안정성, 화재에 대한 위험에 대한 측면으로는 훨씬 낫지만, 하드웨어 업그레이드가 용이, 무엇보다 재미가 있기 때문에 홈서버를 구축하는 사람들도 적지 않다. ...

May 15, 2022 · 7 min · 1438 words · Me

Ubuntu Server에 GUI 설치 후 RDP로 접속하기

사용 환경 Ubuntu Server 20.04.3 LTS macOS Monterey 12.1 GUI의 필요성 홈서버에 windows vm을 설치할 일이 생겨 qemu로 설치를 하고, ssh -X 옵션과 xquartz를 통해 맥에서 해당 vm을 띄우는 세팅을 했는데, 안정성이 매우 떨어져 결국 ubuntu server에 gnome gui를 올리고 rdp로 접속하여 vmware를 통해 windows vm을 세팅하는 방향을 선택했다. 서버에 gui가 돌아간다는게 참 불편하긴 하지만 때로는 cli보다는 gui 환경에서 세팅해야 편한 작업들이 꽤 있기 때문에 이번 기회에 설치를 해보고, 이 글에서는 아래의 순서대로 글을 작성하겠다. ...

February 11, 2022 · 2 min · 246 words · Me

Ubuntu에서 Docker를 이용한 IRC 서버 구축

IRC란? Internet Relay Chatting의 약자로, 특정 topic을 가지고 사용자끼리 대화를 할 수 있습니다. Installation 먼저 방화벽에서 6667, 6697, 7000, 7001 포트를 열어줍니다. iptables -I INPUT 1 -p tcp --dport 6667 -j ACCEPT iptables -I INPUT 1 -p tcp --dport 6697 -j ACCEPT iptables -I INPUT 1 -p tcp --dport 7000 -j ACCEPT iptables -I INPUT 1 -p tcp --dport 7001 -j ACCEPT 또는 서버 방화벽 (보안 그룹) 페이지에서 해당 포트를 열어줄 수 있습니다. sudo apt install docker sudo apt install certbot sudo apt install screen 도커, 인증서 발급 패키지, 백그라운드 실행 패키지를 설치합니다. ...

January 25, 2022 · 2 min · 381 words · Me