%EB%A5%BC%20%ED%86%B5%ED%95%B4%20%EB%B0%A9%ED%99%94%EB%B2%BD%EC%9C%BC%EB%A1%9C%20%EB%B3%B4%ED%98%B8%EB%90%98%EB%8A%94%20%EC%84%9C%EB%B2%84%20%EC%82%AC%EC%9A%A9.png)
SSH를 통해 Debian 6 서버에서 작업해야 합니다. 서버는 방화벽으로 보호되며 SSH 연결은 사용자 IP를 기준으로 필터링됩니다.
안타깝게도 동적 IP를 사용하는 ISP 제공업체가 있습니다. 이는 매일 변경됩니다.
파일에 저장된 IP를 읽고 이를 방화벽의 예외 목록에 추가하는 간단한 스크립트를 작성했습니다. 하지만 이제는 서버에 연결할 때마다 다음이 필요합니다.
- 내 IP를 서버로 보내기
- 웹 콘솔에 로그인
- 방화벽 다시 시작
동적 IP가 있는 경우 방화벽으로 보호되는 SSH 연결을 관리하는 더 쉽고 자동화된 방법이 있습니까?
답변1
현재 저는 세 가지 방법을 생각해 볼 수 있습니다.
첫 번째는 knockd
- 내가 가장 좋아하는 - (http://www.zeroflux.org/projects/knock/) 기억하는 포트 순서만 구성하고 knockd
참조한 IP 주소에 대해 SSH를 켜십시오. knockd
데비안 패키지에서 사용 가능한 샘플 구성( /etc/knockd.conf
)은 다음과 같습니다:
[options]
logfile = /var/log/knockd.log
[opencloseSSH]
sequence = 2221,2222,2223
seq_timeout = 5
tcpflags = syn
start_command = /usr/sbin/iptables -I INPUT -i enp0s8 -s %IP% -p tcp --dport 22 -j ACCEPT
cmd_timeout = 15
stop_command = /usr/sbin/iptables -D INPUT -i enp0s8 -s %IP% -p tcp --dport 22 -j ACCEPT
이 방법은 knockd
지정된 포트에서 시퀀스를 수신하고(동일할 수도 있음) 시퀀스가 5초 이내에 적중되면 포트가 열립니다. 15초 후에 규칙이 다시 삭제되므로 성공적인 로그인은 이 15초 이내에 시작되어야 합니다.
두 번째는 iptables 체인을 정기적으로 새로 고치는 것과 결합된 동적 DNS를 기반으로 합니다.
iptables -N SSH
iptables -A INPUT -p tcp -m tcp --dport 22 -j SSH
예를 들어 1분마다 다음 스크립트를 실행하도록 cronjob을 예약합니다.
#!/bin/bash
iptables -F SSH
iptables -A SSH -s ddns-entry.com -j ACCEPT
이렇게 하면 선택한 시간 간격마다 SSH 체인이 새로 고쳐지고 다시 채워집니다.
대안으로, Debian 6 호스트에 저장된 IP 주소를 입력할 수 있는 (비밀번호로 보호된) 웹 페이지를 만들 수 있습니다 /tmp/currip
. 1분마다 실행되도록 cron 작업을 예약하거나 inotify/incron을 사용하는 것이 더 좋습니다. 그리고 파일을 확인 /tmp/currip
하고 iptables
파일에 나열된 주소를 사용하도록 규칙을 변경합니다. 이는 사용 중인 네트워크 스택 유형에 따라 크게 달라지므로 여기에는 예제를 나열하지 않겠습니다.
답변2
가장 간단한 대답: 사용동적 도메인 이름 확인
다음과 같은 일부 무료(개인용) 옵션이 있습니다.noip.com, 또는dyndns.org
편집하다:
규칙을 지속적으로 업데이트하는 스크립트를 만들어야 합니다(예를 들어) iptables
. 전에 이것을 언급하는 것을 잊어버렸습니다. (@lambert에게 감사드립니다)
편집 2: 나는 그렇게 아름다운 솔루션을 사용하지 않았지만 시도해 볼 수 있습니다이것간단한 Python 스크립트.