다른 대륙의 원격 위치에 Ubuntu 11.04 서버가 있어서 물리적으로 액세스할 수 없습니다. 나는 오직 ssh
(and)를 통해서만 상호작용하고 scp
, 그런 식으로만 상호작용하려고 합니다.
보안상의 이유로 ssh
.
온라인에서 지침을 찾아보았지만 이해가 모호했습니다. 지금까지 내가 수집한 것은 "iptables"를 "새로 고침"해야 하고 일부 파일을 편집한 /etc/hosts
다음(아마?) 머신을 재부팅해야 한다는 것입니다.
하지만 분명히 이 작업에는 매우 조심해야 합니다. 잘못하면 실수로 SSH 포트를 닫아 서버에 액세스하지 못하게 될 수 있기 때문입니다.
이 작업을 수행하기 전에 저는 완벽한 단계를 설정하고 싶었습니다.
그렇다면 액세스 권한을 유지하면서 모든 포트를 어떻게 닫을 수 있습니까?
보너스 질문:이 작업을 수행하는 동안 포트를 22에서 비표준 포트로 변경해야 합니까 ssh
? 정말 차이가 있나요?
답변1
먼저 iptables 규칙을 새로 고치는 작은 스크립트를 작성하십시오.
#!/bin/bash
echo "Stopping firewall and allowing everyone..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
(아마도 "nat" 및 "mangle" 명령은 필요하지 않을 것입니다.) 이름을 "flush.sh"로 지정하고 스크립트를 "/root" 디렉토리에 배치합니다. "chmod +xlush.sh"를 기억하세요.
무해한 iptables 규칙을 추가하여 스크립트를 테스트하세요.
iptables -A INPUT -p tcp -j ACCEPT
그런 다음 명령줄에서 스크립트를 실행합니다. 추가한 규칙이 사라졌는지 확인하세요.
10분마다 실행되도록 루트의 crontab에 스크립트를 추가합니다.
*/10 * * * * /root/flush.sh
스크립트 테스트를 위해 무해한 iptables 규칙을 다시 추가합니다. 10분 정도 기다린 후 cron 작업이 성공적으로 실행되고 규칙이 삭제되었는지 확인하세요.
이 시점에서 10분마다 실행되는 flash.sh 안전망을 사용하여 iptables 규칙 세트를 디버깅할 수 있어야 합니다. 규칙 디버깅을 마친 후 lush.sh 스크립트를 실행하는 crontab의 행을 주석 처리합니다.
규칙을 배치하는 위치는 분포에 따라 다소 다릅니다. 우분투의 경우 다음을 확인하세요.이 링크. 마지막으로 방화벽 규칙을 영구적으로 설정하기 위한 두 가지 옵션(/etc/network/interfaces 및 Network Manager를 사용하여 구성)이 표시됩니다. 서버를 실행하고 있으므로 전자 옵션이 더 나을 것입니다.
자신을 잠그지 않는 한 iptables 규칙을 변경하거나 새로 고치기 위해 재부팅할 필요가 없습니다.
비밀번호가 아닌 공개 키 인증을 사용하여 루트만 로그인할 수 있도록 sshd를 구성하는 것이 가장 좋습니다.
어디에서나 로그인할 수 있는 사무실 서버와 같이 고정 IP 주소를 가진 보안 게이트웨이가 있는 경우 해당 게이트웨이의 SSH만 허용하도록 원격 서버에 iptables 규칙을 설정하는 것이 좋습니다.
SSH 포트를 22에서 다른 포트로 변경하는 것은 대부분의 포트 스캐너가 새 SSH 포트를 빠르게 찾기 때문에 매우 제한적입니다.