외부에 SSH오픈이 필요한 경우 필수보안설정.
안녕하세요. 달소입니다.
이번글은 혹혹혹시나..외부에 SSH를 오픈할 필요가 생긴다면 반드시 해야할 보안 관련 설정입니다.
기본적으로 SSH와 같은 원격 터미널 포트는 오픈하지않는편이 가장좋지만 피치못하게 오픈해야하는 경우라면 우리가 오라클 클라우드를 접근하듯이 설정해주시는게 가장 좋습니다.
일반적인 홈 네트워크 환경이라면 단순히 포트포워딩으로 ssh만 오픈해주셔도 되지만 이럴경우 스캔성 공격이나 brute force 공격에 매우 위험하게 노출되기때문에 아래와같은 설정을 반드시 진행해주시는게 좋습니다.
**VPN으로 내부서버에 접속 후 연결하시는게 가장 좋습니다
1. SSH를 Key값으로만 접속가능하게하기.
SSH를 일반 id/pw가 아닌 key값으로 로그인할 수 있도록 설정해주신다면 안전한 방법중 하나입니다..
GCP나 오라클클라우드등에서 사용하는 방식이 이러한 key인증 방식입니다.
https://svrforum.com/os/369753
2. 외부 노출되는 SSH 포트변경하기.
포트포워딩을하실때 정직하게 22:22 이렇게 포트포워딩을 하시지 마시고 9898:22와 같이 포트를 변경해주시는게 좋습니다.
아예 서비스하는 ssh포트를 바꿔도 무방합니다. vi /etc/ssh/sshd.conf 의 ports 설정
22번은 well known 포트라고 알려진 포트에 속하기때문에 공격자들의 가장 손쉬운 먹잇감입니다.
3. IP로 통제하기.
Source IP를 통제하는 방법입니다. 원천적으로 접근하고자하는 ip를 알고계시고 해당 ip만 iptables나 pfsense/opnsense 와 같은 방화벽에서 source ip로 통제해주시면됩니다.
*불특정 ip에서 접속하셔야하는 환경이라면.. 설정하시면안됩니다
iptables -I INPUT -p tcp -s [SourceIP] --dport 22[SSH포트번호] -j ACCEPT
iptables -L 로 정책 확인 후
service iptables save로 정책 저장.
pfsense/opnsense나 기타 방화벽/라우터를 쓰신다면 아예 포트포워딩 설정시에도 Source ip 필터링이 가능합니다.
source port는 어떤 포트에서 접속할지모르니 any로 두셔야합니다.
이정도의 보안설정이 귀찮으시다면,,, 외부로 SSH노출은 가급적 안하시는게좋습니다
2차인증 걸어서 otp 쓰는 것도 좋더라고요..
OTP는 무적이죠!!
ssh 접속할때 authy 같은 앱으로 opt 연결할 수 있는 가이드가 있을까요?
관심은 있는데 방법을 어디서부터 찾아야할지 궁금한 부분이네요.
간단하게 cockpit에 otp를 붙여서 쓰시면됩니다!
https://blog.dalso.org/article/linux-cockpit-otp
외부에서 굳이 접속해야되면 내부에 작은 VPN 서버 만들어서 하는게 제일 좋은거 같긴 합니다
오 이걸 빼먹었네요..!
저같은경우 rsync로 동기화해야되는데 어쩔수없이 오픈해야하네요 ㅠㅠ
외부에서 사용중인 서버에 vpn접속을했을때 영향도가 확인하기무서워서..ㅎ
key가 힘들다면 pw는 영대소문자 숫자 특수문자 포함해서 길게 해주면 좋죠... 그리고 sshd 설정에 MaxAuthTries 이부분 설정해주시면 좋습니다
나중에 시도 한번 해봐야겠네요
저는 포트번호 바꾸고
로그인 실패시 접속 막아주는 fail2ban이랑 OTP 걸어두고 사용하고 있습니다
이정도 해놔도 문제 생기면 그건 어쩔 수 없는거라고 타협을..
이정도면 훌륭하죠 ㅎㅎ
클플 ZERO TRUST 에 프록시+2차인증하면 사실상뭐...
그정도면...ㅎㅎ 보안상으로는 훌륭합니닷
cmt alert