Como permitir o acesso SSH/FTP com base no país usando o Geoip

Como permitir o acesso SSH/FTP com base no país usando o Geoip

O banco de dados GeoIP possui registros de localização geográfica com base no endereço IP. Usando este banco de dados, podemos procurar qualquer IP pertencente a qual país usando a linha de comando Linux. Este artigo o ajudará a permitir acesso SSH ou FTP (VSFTPD) com base no país do usuário. Este exemplo usa invólucros de TCP para proteger seus serviços.

Instale o banco de dados Geoip e GeoIP

Primeiro, instale o Geoip Binary para Linux e seu banco de dados com base no seu sistema operacional. Para os usuários do CentOS e Redhat, o Binário e o banco de dados Geoip são combinados em um único pacote.

No CentOS e Redhat:
sudo yum install geoip  
No Ubuntu e Debian:
sudo apt-get install geoip-bin geoip-database  

Crie o script de filtro SSH/FTP

Agora, crie um script de shell que verifique todos os endereços IP de conexão recebida e pesquisam seu país correspondente usando o banco de dados GeoIP e permitiu apenas aqueles países cujo código é definido em Allow_countries variável no script.

vim/usr/local/bin/ipfilter.sh  
#!/Bin/Bash # Licença: WTFPL # Códigos de país separados por espaço em maiúsculos espaciais para aceitar allow_countries = "em nós" Logdeny_facility = "AuthPriv.Observe "se [$ # -ne 1]; então echo" Uso: 'nome de base $ 0' "1> & 2 Exit 0 # Retornar verdadeiro no caso da edição de configuração fi se [[" 'eco $ 1 | grep ': "" != ""]]; então country = "/usr/bin/geoiplookup6" $ 1 "| awk -f": "" print $ 2 '| awk -f "," 'print $ 1' | Cabeça -n 1 'else country = "/usr/bin/geoiplookup" $ 1 "| awk -f": "" print $ 2' | awk -f "," 'print $ 1' | cabeça -n 1 'fi [[$ country = "endereço IP não encontrado" || $ Allow_countries = ~ $ country]] && Response = "permitir" || Resposta = "negar" se [["$ resposta" == "permitir"]]; Em seguida, Logger -P $ logdeny_facility "$ Responder SSHD Connection de $ 1 ($ country)" Sair 0 else Logger -P $ Logdeny_facility "$ Responder SSHD Connection de $ 1 ($ country)" Sair 1 FI 

Script SROUCE: https: // GIST.Github.com/jokey2k/a74f56955124880749e7

Faça este script executável

chmod +x/usr/local/bin/ipfilter.sh  

Restringir conexões SSH/FTP

Agora aplique restrições de SSH e FTP usando invólucros TCP. Primeiro, precisamos negar a todos adicionando abaixo a linha em /etc/hosts.negar.

/etc/hosts.negar:

sshd: tudo vsftpd: todos 

Agora edite /etc/hosts.permitir e permita apenas os IPs permitidos pelo seu script de filtro IP.

/etc/hosts.permitir:

sshd: all: spawn/usr/local/bin/ipfilter.sh %a vsftp: all: spawn/usr/local/bin/ipfilter.sh %a 

Acima das restrições de FTP são apenas para VSFTPD. Além disso, verifique se você ativou (tcp_wrappers = sim) em sua configuração vsftpd. Você também pode criar regras semelhantes para qualquer outro serviço suportado por um wrapper TCP.

Teste

Por fim, teste seu servidor, login usando SSH ou FTP de locais diferentes e analisados ​​e analise os arquivos de log de acesso. Abaixo estão alguns logs de demonstração criados pelo IPFilter.sh.

27 de fevereiro 13:03:29 Tecadmin Raiz: negar a conexão SSHD de 212.191.246.202 (PL) 27 de fevereiro 13:34:28 Tecadmin Raiz: negar a conexão SSHD de 212.181.246.202 (SE) 27 de fevereiro 13:34:36 Tecadmin Raiz: negar a conexão SSHD de 211.181.246.203 (KR) 27 de fevereiro 13:35:00 Tecadmin Raiz: negar a conexão SSHD de 221.191.146.204 (JP) 27 de fevereiro 15:11:04 Tecadmin Raiz: Permitir a conexão SSHD de 49.15.212.12 (in) 27 de fevereiro 15:11:09 Tecadmin Raiz: Permitir a conexão SSHD de 149.15.212.12 (EUA) 27 de fevereiro 15:11:22 Tecadmin Raiz: Permitir a conexão SSHD de 49.15.156.123 (in) 27 de fevereiro 15:11:32 Tecadmin Raiz: Permitir conexão SSHD de 231.15.156.123 (endereço IP não encontrado) 27 de fevereiro 15:14:04 Tecadmin Raiz: negar a conexão SSHD de 111.15.15.123 (CN) 27 de fevereiro 15:14:56 Tecadmin Raiz: Permitir conexão SSHD de 49.15.110.123 (in) 

Em toras, você pode dizer que todos os IPs pertencentes aos EUA (Estados Unidos) e na (Índia) são permitidos. Além disso, se algum IP não corresponder no banco de dados GEOIP será permitido por padrão. O restante dos IPs de outros países correspondentes são negados.