원격 개발 서버 설정 방법
이 서버는 프로덕션 애플리케이션을 제공하기 위한 것이 아니므로 외부 세계에 대한 대부분의 연결이 차단될 수 있습니다. 실제로 화이트리스트에 있는 몇 개의 IP를 제외한 모든 수신 연결은 아무런 응답 없이 끊어야 합니다. 우리는 우리 자신의 컴퓨터만 ssh를 통해 연결할 수 있도록 허용하려고 합니다. 아무것도. 이렇게 하면 공격의 위험이 크게 줄어듭니다.
목차
전제 조건
In order to follow along, you need access to a remote server or have a VM installed your machine. The commands shown here are based on RHEL CentOS 8.
슈퍼 유저
As good measure, create a user and add it to the wheel group. Use this user instead of root. The user can run commands that require root privileges with sudo.
SSH as root into the server and create the user. At this occasion upgrade the kernel, before exiting.
ssh root@remote_host
adduser username && passwd username
usermod -aG wheel username
dnf distro-sync -y
dnf upgrade -y
exit
SSH 키 생성 및 배포
Add a public ssh key to users authorized keys file. The easiest way to achieve to is to copy the public key from the local machine via ssh onto the remote host.
Make sure you are connecting with the created user and not with root.
cat ~/.ssh/id_rsa.pub | ssh username@remote_host "mkdir -p ~/.ssh && \
touch ~/.ssh/authorized_keys && \
chmod -R go= ~/.ssh && \
cat >> ~/.ssh/authorized_keys"
SSH 구성
Connect back to remote and edit the config file.
ssh username@remote_host
sudo vim /etc/ssh/sshd_config
Add the following lines to the config file.
LoginGraceTime 1m
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
PermitEmptyPasswords no
IgnoreRhosts yes
Protocol 2
AllowUsers username
Before disabling password authentication, test the public key authentication by restarting sshd
, exiting the session and reconnecting.
If it is not asking for your password anymore but logs you in, the key is working.
Restart the service.
sudo systemctl restart sshd
방화벽 구성
The next part step is to configure the firewall. Firewalld은 CentOS에 사전 설치되어 있습니다.들어오는 모든 트래픽이 승인 없이 차단되도록 기본 영역을 차단으로 변경합니다. 공용 리소스 그룹에 로컬 머신의 공용 IP를 추가하십시오. 각 그룹에 여러 소스를 추가할 수 있으므로 이것은 기본적으로 IP 화이트리스트입니다. 마지막으로 사용하지 않는 두 서비스를 제거하고 SSH만 사용 가능한 상태로 둡니다.
sudo firewall-cmd --set-default-zone=block
sudo firewall-cmd --permanent --zone=public --add-source=my.public.ip.address
sudo firewall-cmd --permanent --zone=public --remove-service=cockpit --remove-service=dhcpv6-client
sudo firewall-cmd --reload
구성을 확인하십시오.
sudo firewall-cmd --list-all
sudo firewall-cmd --zone=public --list-all
IPV6 비활성화
Next, disable IPV6 all together as it's not needed and reduces the attack surface.
sudo vim /etc/sysctl.d/disableipv6.conf
Place the following entry to disable IPv6 for all adapter
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# A particular network card instead of default can be accessed
# for example for the imaginary card enp0s3
# net.ipv6.conf.enp0s3.disable_ipv6 = 1
Restart the Service
sudo systemctl restart systemd-sysctl
If the below command does not return anything, ipv6, is disabled.
ip a | grep inet6
Fail2Ban 설정
Lastly, install Fail2ban . fail2ban은 로그 파일(예:/var/log/apache/error_log)을 검사하고 악성 징후를 나타내는 IP를 차단합니다.sudo dnf install epel-release
sudo dnf install fail2ban
sudo systemctl start fail2ban
sudo systemctl enable fail2ban
SSH를 제외한 모든 것이 차단됩니다. 이 특정 사용 사례에 대한 일부 구성을 추가합니다.
sudo vim /etc/fail2ban/fail.d/ssh.conf
다음 설정은 2시간 동안 3번의 로그인 시도 실패 후 모든 IP를 영구 차단합니다. 이 시점에서 우리는 우리 외에 다른 사람이 연결할 수 있다고 기대하지 않습니다. 일부 중복성은 해를 끼칠 수 없습니다.
[DEFAULT]
bantime = -1
findtime = 2h
maxretry = 3
[sshd]
enabled = true
워크플로우
Now the development environment is secure. All connections to the outside world and are cut off and only the ssh connection to the local machine is open. How does the actually workflow look like now? There are essentially two major ways, old and new school.
올드 스쿨 일명 Vim me out, Bro
첫 번째 방법은 오랫동안 해왔던 방식이다. 기본 작업 환경은 원격 호스트에 설치된 Vim입니다. 어떤 사람들은 tmux 및 또는 zsh을 함께 사용하는 것을 좋아합니다. 실제로 매우 강력한 조합입니다. 이러한 도구를 마스터하면 어떤 기능도 놓칠 필요가 없습니다.
새로운 학교 일명 VS 코드 GUI
VS Code은 뛰어난 원격 개발 지원 기능을 제공합니다. 원격 호스트에 확장을 설치하고 로컬에서 GUI를 사용할 수 있습니다.
자세한 내용은 official docs 을 참조하십시오.
포트 포워딩 / SSH 터널
Ok, you can write some code now, that's great but how can an application actually be viewed? The answer is simple, run the app on the remote server on some port. Then forward whatever is sent on this port to the local machine.
Let's say you just started a React dev server on the remote host. The React app is being served at localhost:8080
. You can now connect with a new shell but this time, only to forward the ports.
ssh -L -O localhost:6000:localhost:8080 username@remote_host
Navigate to localhost:6000
in the browser of your local machine and see the application.
마무리
We have learned how to secure a remote development server, taking care of various configurations such the firewall and ssh. We have also looked at possible workflows for our environment and at SSH Tunneling.
It was an exiting trip, I hope you enjoyed it as much as I did.
Thank you.
Reference
이 문제에 관하여(원격 개발 서버 설정 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/codingsafari/how-to-setup-a-remote-development-server-46ln텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)