특정 개인 IP가 SSH(RSA 키 쌍)를 통해 Linux 서버에 로그인하도록 허용하려면 어떻게 해야 합니까?
답변1
구성을 통해 연결할 수 있는 호스트를 제한할 수 있습니다.TCP 래퍼 또는 필터링된 네트워크 트래픽 사용(방화벽)iptables. 클라이언트 IP 주소를 기반으로 다양한 인증 방법을 사용하려면 SSH 데몬(옵션 3)을 구성하세요.
옵션 1: IPTABLES 필터링 사용
iptables 규칙은 첫 번째 규칙이 일치할 때까지 순차적으로 평가됩니다.
예를 들어 192.168.0.0/24 네트워크의 트래픽을 허용하고, 그렇지 않으면 포트 22로의 트래픽을 삭제합니다. DROP
iptables 기본 정책이 구성된 경우에는 이 규칙이 필요하지 않습니다 DROP
.
iptables -A INPUT -p tcp --dport 22 --source 192.168.0.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j DROP
규칙을 삭제하기 전에 더 많은 네트워크/호스트와 일치하도록 규칙을 더 추가할 수 있습니다. 네트워크 또는 호스트 주소가 많은 경우 다음을 사용해야 합니다.IP 세트기준 치수. 게다가이플랑그모든 범위의 IP 주소를 사용할 수 있는 모듈입니다.
Iptable은 재부팅 후에도 지속되지 않습니다. 시작 시 iptables를 복원하려면 일부 메커니즘을 구성해야 합니다.
iptables
IPv4 트래픽에만 적용됩니다. SSH 수신 IPv6 주소가 있는 시스템을 사용하여 필요한 구성을 완료할 수 있습니다 ip6tables
.
옵션 2: TCP 래퍼 사용
참고: tcpwrappers에 대한 지원이 제거되었으므로 최신 배포판에서는 옵션이 아닐 수 있습니다.오픈SSH 6.7
TCP 래퍼를 사용하여 연결할 수 있는 호스트를 구성할 수도 있습니다. TCP 래퍼를 사용하면 IP 주소 외에도 규칙에 호스트 이름을 사용할 수 있습니다.
기본적으로 모든 호스트는 거부됩니다.
/etc/hosts.deny
:
sshd : ALL
그런 다음 호스트.allow에 허용된 호스트를 나열하십시오. 예를 들어 네트워크를 허용합니다.192.168.0.0/24그리고로컬 호스트.
/etc/hosts.allow
:
sshd : 192.168.0.0/24
sshd : 127.0.0.1
sshd : [::1]
옵션 3: SSH 데몬 구성
클라이언트 주소/호스트 이름을 기반으로 다양한 인증 방법을 사용하도록 sshd_config에서 ssh 데몬을 구성할 수 있습니다. 다른 호스트가 연결하는 것을 방지하려면 iptables 또는 TCP 래퍼를 사용해야 합니다.
먼저 기본 인증 방법을 제거합니다.
PasswordAuthentication no
PubkeyAuthentication no
Match Address
그런 다음 파일 끝의 a 뒤에 필요한 인증 방법을 추가합니다. Match
파일 끝 부분에 배치하는 것이 중요합니다. 그 이후의 모든 구성 행은 다음 Match
행까지 조건 블록 내에 배치되기 때문입니다. 예를 들어:
Match Address 127.0.0.*
PubkeyAuthentication yes
다른 클라이언트는 계속 연결할 수 있지만 사용 가능한 인증 방법이 없기 때문에 로그인에 실패합니다.
일치 매개변수 및 허용되는 조건부 구성 옵션은 다음에 설명되어 있습니다. sshd_config 매뉴얼 페이지. 일치하는 패턴은 다음과 같이 기록됩니다.ssh_config 매뉴얼 페이지.
답변2
다음은 이전 답변을 확장하기 위한 SSH 데몬에 대한 몇 가지 추가 구성입니다.
AllowUsers
파일의 옵션을 사용하여 사용자 필터링을 추가합니다sshd_config
.AllowUsers [email protected].* [email protected].* otherid1 otherid2
이를 통해존도그리고관리자 2
192.168.1.*
주소 에서만상위 1위,상위 2위어디에서나..ssh/authorized_keys
SSH 키 또는 CA 기반 키를 특정 사용자의 홈 디렉터리에 있는 파일의 주소 집합으로 제한합니다.from="192.168.1.*,192.168.2.*" ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABA...etc...mnMo7n1DD useralias
이 예에서 사용자 별칭의 공개 키는 지정된 주소에 대해서만 유효합니다.
답변3
UFW(간단한 방화벽)를 설치해도 괜찮다면:
sudo ufw allow from 192.168.1.0/24 to any port 22
편집하다: 앞서 언급한 것처럼, 인증을 위해 비밀번호 대신 키를 사용하는 것이 더 좋으며, 이는 편집을 통해 수행할 수 있습니다./etc/ssh/sshd_config
:
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
답변4
클라이언트 인증에 SSH CA를 사용하는 경우 source-address
인증서에 서명할 때 옵션을 지정할 수 있습니다.
ssh-keygen -s ca_privkey -O source-address=172.16.0.0/16 id_rsa.pub
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
이 인증서는 해당 주소를 지정하지 않는 한 특정 주소 id_rsa-cert.pub
에서 172.16.0.0/16
호스트에 로그인하는 데에만 사용할 수 있습니다 127.0.0.1
.
man 1 ssh-keygen
더 자세한 내용을 알고 싶다면 여기 좋은 문서가 있습니다.