SSH 서버 주변의 보안이 절대적으로 불침 투성이되도록하기 위해 어떤 조치를 취해야합니까?
이것은 처음부터 커뮤니티 위키가 될 것이므로 사람들이 서버를 보호하기 위해 무엇을하는지 볼 수 있습니다.
SSH 서버 주변의 보안이 절대적으로 불침 투성이되도록하기 위해 어떤 조치를 취해야합니까?
이것은 처음부터 커뮤니티 위키가 될 것이므로 사람들이 서버를 보호하기 위해 무엇을하는지 볼 수 있습니다.
답변:
암호 대신 인증을 위해 공개 / 개인 키 쌍을 사용하십시오.
서버에 액세스해야하는 모든 컴퓨터에 대해 암호로 보호 된 SSH 키를 생성하십시오.
ssh-keygen
허용 된 컴퓨터에서 공개 키 SSH 액세스를 허용하십시오.
~/.ssh/id_rsa.pub
각 컴퓨터 의 내용을 ~/.ssh/authorized_keys
서버 의 개별 라인에 복사 하거나 ssh-copy-id [server IP address]
액세스 권한이 부여 된 모든 컴퓨터에서 실행 하십시오 (프롬프트에 서버 암호를 입력해야합니다).
비밀번호 SSH 액세스를 비활성화하십시오.
를 열고 /etc/ssh/sshd_config
라는 줄을 찾아로 #PasswordAuthentication yes
변경합니다 PasswordAuthentication no
. SSH 서버 데몬을 다시 시작하여 변경 사항을 적용하십시오 ( sudo service ssh restart
).
이제 서버에 SSH를 연결할 수있는 유일한 방법은의 줄과 일치하는 키를 사용하는 것입니다 ~/.ssh/authorized_keys
. 이 방법을 사용하여, 나는 그들이 내 암호를 추측하더라도이 거부되기 때문에 무력 공격에 대해 걱정하지 않는다. 오늘날의 기술로 는 공개 / 개인 키 쌍을 무차별 적으로 강제하는 것은 불가능 합니다.
내가 제안 할게:
무차별 강제 로그인 시도를 방지하기 위해 fail2ban 사용
SSH를 통한 루트로 로그인 비활성화 이는 공격자가 사용자 이름과 비밀번호를 모두 파악하여 공격을 더욱 어렵게해야한다는 것을 의미합니다.
에 추가 PermitRootLogin no
하십시오 /etc/ssh/sshd_config
.
서버에 SSH 할 수있는 사용자를 제한합니다. 그룹 별 또는 특정 사용자 별.
서버에 SSH를 연결할 수있는 사람을 추가 AllowGroups group1 group2
하거나 AllowUsers user1 user2
제한합니다.
다른 답변은 보안을 제공하지만 로그를 더 조용하게 만들고 계정이 잠길 가능성이 적은 방법이 있습니다.
서버를 포트 22에서 다른 서버로 이동하십시오. 게이트웨이 또는 서버에서
보안을 강화하지는 않지만 모든 임의의 인터넷 스캐너가 로그 파일을 복잡하게 만들지 않음을 의미합니다.
HOTP 또는 TOTP로 2 단계 인증을 사용하십시오 . 13.10부터 사용할 수 있습니다.
여기에는 다른 답변에서와 같이 비밀번호 인증을 통한 공개 키 인증 사용이 포함되지만 사용자는 자신의 개인 키 외에 두 번째 요소 장치를 보유하고 있음을 증명해야합니다.
요약:
sudo apt-get install libpam-google-authenticator
각 사용자가 google-authenticator
명령을 실행 ~/.google-authenticator
하도록하여 2 단계 장치 (예 : Google Authenticator Android 앱) 를 생성 하고 구성하도록합니다.
편집 /etc/ssh/sshd_config
및 설정 :
ChallengeResponseAuthentication yes
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive
을 (를) sudo service ssh reload
변경하려면을 (를) 실행하십시오 /etc/ssh/sshd_config
.
행을 편집 /etc/pam.d/sshd
하고 바꾸십시오.
@include common-auth
와:
auth required pam_google_authenticator.so
다른 구성 옵션에 대한 자세한 내용은 작년의 블로그 게시물입니다 . Ubuntu의 2 단계 ssh 인증 개선 .
올바른 로그인 정보 " DenyHØsts " 를 제공하지 못한 sshd 블록 클라이언트 IP 가이 작업을 매우 효과적으로 수행 할 수있게하십시오. 나는 어떤 방식 으로든 대외에서 접근 할 수있는 모든 Linux 상자에 이것을 설치했습니다.
이렇게하면 SSHD에 대한 강제 공격이 효과적이지 않지만 암호를 잊어 버린 경우 자신을 잠그는 방법 (0)을 기억하십시오. 액세스 할 수없는 원격 서버에서 문제가 될 수 있습니다.
가장 쉬운 방법은 다음과 같습니다. ufw ( "복잡하지 않은 방화벽")를 설치하고이를 사용하여 들어오는 연결을 제한하십시오.
명령 프롬프트에서 다음을 입력하십시오.
$ sudo ufw limit OpenSSH
경우 UFW가 설치되어 있지 않은,이 작업을 수행하고 다시 시도 :
$ sudo aptitude install ufw
많은 공격자가 SSH 서버를 사용하여 암호를 무차별하게 시도합니다. 동일한 IP 주소에서 30 초마다 6 개의 연결 만 허용합니다.
추가 보안을 원하거나 회사 네트워크 내부의 SSH 서버에 액세스해야하는 경우 익명 소프트웨어 Tor를 사용하여 숨겨진 서비스 를 설정했습니다 .
localhost
./etc/tor/torrc
. HiddenServiceDir /var/lib/tor/ssh
및을 설정하십시오 HiddenServicePort 22 127.0.0.1:22
.var/lib/tor/ssh/hostname
. 와 같은 이름이 d6frsudqtx123vxf.onion
있습니다. 이것은 숨겨진 서비스의 주소입니다.$HOME/.ssh/config
몇 줄을 열고 추가하십시오.
Host myhost
HostName d6frsudqtx123vxf.onion
ProxyCommand socat STDIO SOCKS4A:127.0.0.1:%h:%p,socksport=9050
또한 로컬 호스트에 Tor가 필요합니다. 그것이 설치되어 있으면 들어갈 수 ssh myhost
있고 SSH는 Tor를 통해 연결을 엽니 다. 다른 쪽의 SSH 서버는 로컬 호스트에서만 포트를 엽니 다. 따라서 아무도 "일반 인터넷"을 통해 연결할 수 없습니다.
이 주제에 관한 데비안 관리 기사가 있습니다. 기본적인 SSH 서버 구성과 방화벽 규칙을 다룹니다. SSH 서버를 강화하는 것도 흥미로울 수 있습니다.
문서 : SSH 액세스 보안 유지를 참조하십시오 .
SSH 강화에 대한 나의 접근 방식은 ... 복잡합니다. 다음 항목은 네트워크의 가장 가장자리에서 서버 자체에 이르기까지 내가 어떻게하는지에 관한 것입니다.
차단 목록에 알려진 서비스 스캐너 및 서명이있는 IDS / IPS를 통한 트래픽의 경계 수준 필터링. 내 경계 방화벽을 통해 Snort에서이 작업을 수행합니다 (이 방법은 pfSense 어플라이언스입니다). 때로는 VPS와 같이이 작업을 수행 할 수없는 경우도 있습니다.
SSH 포트의 방화벽 / 네트워크 필터링. 특정 시스템 만 내 SSH 서버에 도달 할 수 있도록 명시 적으로 허용합니다. 이것은 내 네트워크 경계에있는 pfSense 방화벽 또는 명시 적으로 구성되는 각 서버의 방화벽을 통해 수행됩니다. 그래도 내가 할 수없는 경우가 있습니다 (방화벽이 물건을 테스트하는 데 도움이되지 않는 개인 펜 테스트 또는 보안 테스트 랩 환경을 제외하고는 거의 해당되지 않습니다).
내 pfSense 또는 내부 네트워크를 NAT하고 인터넷과 시스템에서 분리하는 경계 방화벽과 함께 VPN 전용 서버 액세스 . 인터넷에 연결된 포트가 없기 때문에 서버에 접속하기 위해 VPN을 네트워크에 연결해야합니다. 이것은 모든 VPS에서 제대로 작동하지는 않지만 # 2와 함께 해당 서버에 VPN을 연결하여 하나의 VPS를 '게이트웨이'로 설정 한 다음 다른 상자에 IP를 허용 할 수 있습니다. 그런 식으로 VPN이 가능한 하나의 상자 인 SSH를 사용할 수 있거나없는 것을 정확히 알고 있습니다. (또는 pfSense 뒤의 홈 네트워크에서 VPN 연결이며 VPN 액세스가 가능한 유일한 사람입니다).
# 3을 수행 할 수없는 경우 fail2ban 은 4 번의 시도 실패 후 차단하고 1 시간 이상 IP를 차단하도록 구성되어 지속적으로 무차별 공격을하는 사람들에 대한 적절한 보호 기능을 제공합니다. fail2ban을 구성하는 것은 쉽지 않습니다 ...
SSH 포트를 변경하여 포트 난독 화. 그러나이 방법은 추가 보안 조치 없이는 수행하지 않는 것이 좋습니다. "불안을 통한 보안"이라는 용어는 이미 많은 경우에 반박되어 논쟁의 여지가 있습니다. IDS / IPS 및 네트워크 필터링과 함께이 작업을 수행했지만 여전히 자체적으로 수행하는 것은 매우 좋지 않습니다.
Duo Security의 2 단계 인증 솔루션을 통한 필수 2 단계 인증 . 내 SSH 서버 중 하나마다 Duo가 구성되어있어 2FA 프롬프트가 발생하고 각 액세스를 확인해야합니다. (이것은 궁극적으로 유용한 기능입니다. 누군가 암호 문구가 있거나 침입하더라도 Duo PAM 플러그인을 통과 할 수 없기 때문입니다). 이것은 무단 액세스로부터 SSH 서버를 보호하는 가장 큰 보호 기능 중 하나입니다. 각 사용자 로그인은 Duo의 구성된 사용자와 다시 연결되어야하며, 제한적인 세트가 있으므로 시스템에 새 사용자를 등록 할 수 없습니다.
SSH를 보호하기위한 2 센트. 또는 적어도 접근에 대한 나의 생각.
Google OTP를 사용하는 대신 RedHat에서 FreeOTP 앱을 체크 아웃 할 수 있습니다. 때로는 앱을 업데이트 할 때 당신을 잠급니다! ;-)
Yubikey, eToken PASS 또는 NG와 같은 다른 하드웨어 토큰을 사용하거나 많은 사용자 또는 많은 서버가있는 경우 오픈 소스 2 단계 인증 백엔드를 사용하고자 할 수 있습니다.
최근 에이 작업을 수행하는 방법에 대한 작은 자습서를 작성했습니다. 기본적으로 PKI를 사용해야하고 튜토리얼에서는 보안을 강화하기 위해 2 단계 인증을 사용하는 방법도 보여줍니다. 그중 아무 것도 사용하지 않더라도 약한 암호 제품군 및 기타 기본 사항을 제거하여 서버를 보호하는 데 약간의 어려움이 있습니다. https://joscor.com/blog/hardening-openssh-server-ubuntu-14-04/
많은 수의 사용자 / 인증서의 경우 LDAP 통합을 고려하십시오. 대규모 조직은 인증서가 인증 또는 전자 메일 서명에 사용되는지 여부에 관계없이 배지 또는 Fob에 저장된 사용자 자격 증명 및 인증서의 저장소로 LDAP를 사용합니다. 예를 들어 openLDAP, openDJ, Active Directory, Oracle Universal Directory, IBM Directory Server, snareWorks 등이 있습니다.
컴퓨터와 그룹은 중앙 자격 증명 관리를 제공하는 LDAP로 관리 할 수도 있습니다. 그런 식으로 헬프 데스크는 많은 인구를 처리 할 수있는 원 스톱 상점을 가질 수 있습니다.
다음은 centOS 통합에 대한 링크입니다. http://itdavid.blogspot.com/2013/11/howto-configure-openssh-to-fetch-public.html
geoIP 데이터베이스를 사용하여 원산지를 기준으로 차단할 수도 있습니다.
기본적으로 미국에 거주하는 경우 러시아의 누군가가 SSH에 연결해야 할 이유가 없으므로 SSH가 자동으로 차단됩니다.
스크립트는 https://www.axllent.org/docs/view/ssh-geoip/ 에서 찾을 수 있습니다.
iptables 명령을 추가하여 (내 드롭 릿에 한 것) 해당 트래픽의 모든 트래픽을 자동으로 드롭 할 수 있습니다.