최근 관련 게시글 중 /usr/local/bin/sshfilter.sh의 코드 문제로 인해 해외 ip 차단 및 정상적인 ssh 접속이 작동하지 않는 경우가 있습니다.
/var/log/syslog에서 아래 로그와 같이 문제가 생겨 ssh 원격 접속이 되지 않는 분들은 바로 2번으로 넘어가 shell script만변경하면 됩니다.
ssh를 세팅하다 보면 보안 세팅으로 해외 ip 차단이 필요하다. 하루에도 수십번씩 해외에서 무작위로 ip에 접근을 시도하고 있기 때문이다. 마침 Ubuntu 24.04 버전을 서버에 새로 설치한 터라 새로운 버전을 체험할 겸 ssh 보안 세팅을 헤주기로 했다.
목차
1. GeoIP Country Database 설치
2. Shell Script 작성 !인터넷에 올라와있는 코드 오류 수정!
3. SSH 잠금 설정
4. 정상 작동 테스트
5. GEOIP의 주기적 UPDATE
1. GeoIP Country Database 설치
ip 구분을 위해 geoiplookup 명령어와 GeoIP country database를 설치한다.
sudo apt-get install geoip-bin geoip-database
명령어를 입력하여 작동하는지 테스트
geoiplookup 8.8.8.8
GeoIP Country Edition: US, United States가 나오면 정상 작동하는 것이다.
2. Shell Script 작성
sudo vi /usr/local/bin/sshfilter.sh
/usr/local/bin/sshfilter.sh 에 아래 내용을 입력하고 저장한다.
#!/bin/bash
ALLOW_COUNTRIES="KR"
if [ $# -ne 1 ]; then
echo "Usage: `basename $0` <ip>" 1>&2
exit 1
fi
IP=$1
# IPv6 주소 IPv4 주소로 변환
if [[ $IP =~ ^::ffff: ]]; then
IP=$(echo $IP | sed 's/^::ffff://')
fi
COUNTRY=$(/usr/bin/geoiplookup $IP | awk -F ": " '{ print $2 }' | awk -F "," '{ print $1 }' | head -n 1)
if [ "$COUNTRY" = "IP Address not found" ] || [[ $ALLOW_COUNTRIES =~ $COUNTRY ]]; then
exit 0
else
logger "DENY sshd connection from $IP ($COUNTRY)"
exit 1
fi
!! 기존의 코드는 ipv6에선 정상작동하지 않는 오류가 있어서
ipv6에서 ipv4로 변경해주는 코드를 추가하였다 !!
소유권과 실행 권한을 변경해준다.
sudo chown root:root /usr/local/bin/sshfilter.sh
sudo chmod 775 /usr/local/bin/sshfilter.sh
3. SSH 잠금 설정
sudo vi /etc/hosts.deny
아래 내용 새로 추가
sshd: ALL
sudo vi /etc/hosts.allow
sshd: ALL: aclexec /usr/local/bin/sshfilter.sh %a
간단하게 설명을 하자면 hosts.deny로 기본적으로 모든 접속을 허용하지 않도록 하되, hosts.allow를 통해 원하는 ip만 접속을 허용시켜줬다. 이 때 접속을 허용 ip는 sshfilter.sh를 통해 구분해줬다.
4. 정상 작동 테스트
/usr/local/bin/sshfilter.sh 8.8.8.8
sudo vi /var/log/syslog
ctrl+End를 통해 맨 아래 DENY sshd connection from 8.8.8.8 (US)가 있으면 정상 작동 중인 것이다.
5. GEOIP의 주기적 UPDATE
주기적으로 ip를 업데이트 해주는 파일 생성한다.
sudo vi /etc/cron.monthly/updatingGeoIP
아래대로 내용을 작성한다.
#!/bin/bash
cd /tmp
wget -q http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
if [ -f GeoIP.dat.gz ]
then
gzip -d GeoIP.dat.gz
rm -f /usr/share/GeoIP/GeoIP.dat
mv -f GeoIP.dat /usr/share/GeoIP/GeoIP.dat
else
echo "The GeoIP library could not be downloaded and updated"
fi
여기까지 문제가 없다면 ssh 보안 세팅인 해외 ip 차단은 끝이다.
reference
[1]
'ubuntu > ssh' 카테고리의 다른 글
[우분투] ssh 다중 접속 설정 (0) | 2024.08.31 |
---|---|
[우분투] ssh 보안 세팅 (해외 ip 차단, fail2ban) (0) | 2024.08.31 |
[우분투] fail2ban 관련 간단 명령어 (0) | 2024.08.30 |
[우분투] fail2ban 설정 (0) | 2024.08.30 |
[우분투] 24.04 자동 화면 잠금 해제 (0) | 2024.08.27 |