배경
파일을 추출하기 위해 타사 SFTP 사이트에 연결하는 서비스가 있습니다. 타사에는 특정 사용자가 연결을 시도하면 들어오는 IP를 자동으로 차단하는 시스템이 있습니다. 누군가 금지된 사용자를 사용하여 일부 연결을 시도하고 있습니다. 이는 레거시 시스템이고 모든 사용자가 루트로 시스템에 액세스할 수 있기 때문입니다. 이 사람이 sftp root@remote-site를 시도할 때마다 동일한 원격 SFTP에 의존하는 여러 애플리케이션이 중단됩니다.
질문 SSH를 사용하여 특정 user@site로 나가는 연결을 차단하는 방법이 있습니까? 일치 규칙은 기본적으로 전달되는 sshd_config에 대한 것입니다. SSH 클라이언트에 해당하는 것이 있습니까?
답변1
예를 들어 다음과 같이 사용해야 합니다 iptable
.
ssh
192.168.1.0/24 서브넷으로 나가는 연결 차단
iptables -I OUTPUT -d 192.168.1.0/24 -p tcp --dport 22 -j REJECT
그런 다음 확인
ssh -v 192.168.1.6
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug1: Connecting to 192.168.1.6 [192.168.1.6] port 22.
debug1: connect to address 192.168.1.6 port 22: **Connection refused**
ssh: connect to host 192.168.1.6 port 22: **Connection refused**
답변2
이것성냥sshd_config에 대한 규칙은 ssh_config, 특히 다음 /etc/ssh/ssh_config
을 포함하도록 편집할 수 있는 전역 파일에도 적용됩니다.
Match host site user root
Hostname DontDoThat
SSH 또는 SFTP를 사용할 때 호스트 이름이 대체됩니다.
$ sftp root@site
Couldn't read packet: Connection reset by peer
$ sudo sftp site
ssh: Could not resolve hostname dontdothat: Name or service not known
물론 사용자의 ~/.ssh/config
파일은 여전히 이 설정을 재정의할 수 있습니다.
일치하는 줄에 스크립트 호출(0을 종료해야 함)을 추가하여 sftp를 실행하는 사람에 대한 정보를 기록할 수 있습니다(예: exec "/bin/mylogger somearg..."
작은따옴표 사용 안 함).
답변3
나가는 SSH 연결을 허용하려면 언제든지 iptables "users" 모듈을 사용할 수 있습니다.
iptables -A OUTPUT -o eth0 -p tcp --destination-port 22 -m owner --uid-owner {USERNAME} -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --destination-port 22 -j DROP
이렇게 하면 나가는 모든 SSH 연결이 차단되지만 {USERNAME}이 이를 실행할 수는 있습니다.