저는 http와 https가 있는 apache, jabber, 관리용 openssh 서버와 같은 여러 서비스를 실행하는 데비안 머신을 가지고 있습니다. ssh-server는 포트 22에서 실행되고 있지 않습니다. 포트 62111과 같습니다. 저는 pass2ban을 사용하여 openssh를 보호합니다. 따라서 공격자가 포트 62111에서 SSH에 연결을 시도할 때마다 그는 두 번의 시도를 거쳐 포트 62111에서 Fail2ban에 의해 이틀 동안 금지됩니다.
포트 22에서 (가짜) SSH 서버를 시작하고 싶습니다. 누군가가 해당 포트에 연결하려고 할 때마다 그는 금지됩니다.모두영원히 또는 적어도 내가 iptables 규칙을 삭제할 때까지 iptables를 통해 포팅하세요. 모든 관리자가 올바른 SSH 포트를 알고 있기 때문에 합법적인 SSH 연결은 포트 22로 SSH를 시도하지 않습니다.
공격자는 포트 22를 먼저 공격하려고 시도한다는 아이디어입니다. 그러므로 그는 포트 62111에 SSH를 시도할 기회조차 갖지 못했습니다. 나는 그 크래커가 내 웹사이트를 보는 것에 대해 신경 쓰지 않습니다. 따라서 모든 포트(80 및 443 포함)에서 차단해도 괜찮습니다.
이 작업을 수행하는 방법에 대한 제안이 있으십니까?
답변1
나는 편집증에 대한 또 다른 해결책을 제안하려고 노력할 것입니다 :)
http://www.portknocking.org/view/
미리 정의된 일련의 닫힌 포트에 대한 연결 시도를 요구함으로써 작동합니다. 올바른 포트 "노크"(연결 시도) 순서가 수신되면 방화벽은 연결을 허용하기 위해 특정 포트를 엽니다.
물론 SSH 키 인증만 가능합니다.
답변2
좋은 생각이 없습니다 (IMHO).
포트 22에 연결한다고 해서 자동으로 누군가가 서버에 침입하려고 한다는 의미는 아닙니다.
해커/크래커로부터 서버를 보호하려면 몇 가지 간단한 규칙(예)을 따르십시오.
- Fail2ban과 같은 도구를 현명하게 사용하십시오.
- 서비스(ssh, http,...)를 항상 최신 상태로 유지하세요.
- 강력한 비밀번호를 사용하고 순환형으로 변경하세요.
- SSHD에 SSH 키를 사용하고 비밀번호 인증을 비활성화합니다.
답변3
다른 포트에서 sshd를 실행하고 여전히 동일한 failure2ban 등을 사용하고 싶습니다. 여기에서 매우 훌륭하고 유사한 설명서를 찾았습니다.http://www.kudos.be/multiple_sshd
여기에 다시 게시하고 내용을 변경하겠습니다.
목표는 두 개의 서로 다른 포트에서 동일한 데몬을 실행하고 하나의 인스턴스에서 모든 종류의 인증을 비활성화하는 것입니다.
구성 복사:
CD /etc/ssh/sshd_config /etc/ssh/sshd_config-fake
이에 따라 구성을 변경하십시오.
Port
,SyslogFacility
, 문자열 변경*Authentication
(가짜인 경우 비활성화),PidFile
심볼릭 링크 생성: ln -s /usr/sbin/sshd /usr/sbin/sshd-fake
init 스크립트를 생성하고
cp /etc/init.d/sshd /etc/init.d/sshd-fake
그에 따라 sshd-fake 파일의 내용을 수정합니다./etc/sysconfig/sshd-fake를 변경하세요:
OPTIONS="-f /etc/ssh/sshd_config-fake"
서비스 추가
chkconfig --add sshd-fake
PAM 구성을 생성합니다:
cp /etc/pam.d/sshd /etc/pam.d/sshd-fake
/etc/pam.d/sshd-fake를 편집하고 모든 것을 허용하지 않거나 파일에 나열된 사용자를 허용하는 것과 같은 다른 방법을 사용하십시오.http://linux.die.net/man/8/pam_listfile
서비스 다시 시작:
service sshd restart;service sshd-fake restart;chkconfig sshd-fake on
그에 따라 Fail2ban을 구성하십시오.
답변4
가장 우아하지는 않지만 빠르고 기능적이어야 합니다.
iptables -I INPUT --m recent --name blocked --rcheck -j DROP
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --name blocked --set
설명:
입력 체인에 방화벽 규칙(상단)을 삽입하여 패킷의 소스 주소가 현재 "차단" 목록에 있는지 확인하고, 그렇다면 삭제합니다.
포트 22에 대한 모든 연결 시도의 소스 주소를 "차단" 목록에 추가하는 다른 방화벽 규칙(방금 삽입한 것 위에)을 입력 체인에 삽입합니다.
포트 22에서 실제로 (가짜) 서버나 리스너를 실행할 필요가 전혀 없습니다.
편집: 내 답변을 보면 다음과 같은 방법으로 차단 목록의 시간을 초과해야 할 수도 있다는 점을 추가하고 싶습니다.
"영원히 또는 적어도 내가 iptables 규칙을 삭제할 때까지"
나중에(몇 시간 또는 몇 분 내에) 합법적인 사용자에게 재할당될 동적 IP 주소로부터 많은 적중을 받게 되기 때문입니다.
보다:http://www.netfilter.org/documentation/HOWTO/netfilter-extensions-HOWTO-3.html#ss3.16