Tenho que criar um script que carregue meu IP atual sempre que eu fizer login via SSH.
Esse IP vai ser jogado pra um arquivo no seguinte formato:
Alow from IP-que-script-pegar
E ae vou dar um Deny All no final do arquivo de configuração do apache.
Pra fazer o script que pega o IP da conexão SSH vamos usar uma variável de aplicação.
A variável $SSH_CLIENT tem como saída o seguinte texto:
201.2.31.238 56377 22
Pra
que o meu script dê certo, preciso que fiquei apenas o IP, ou seja, a
primeira coluna. Pra isso vamos modificar o comando echo $SSH_CLIENT
adicionando um carinha chamado awk. Veja como fica:
# echo $SSH_CLIENT | awk '{ print $1 }'# 201.2.31.238
o Print $1 mostra apenas a primeira coluna, o seja o IP. Pronto agora ficou fácil.
Script
#!/bin/baship_ssh=($(echo $SSH_CLIENT | awk '{ print $1 }'))echo allow from $ip_ssh > /etc/apache2/myipwaitservice apache2 reload/bin/bash
Agora ele vai escrever no arquivo meuip o seguinte texto:
allow from 201.2.31.238
Importante
observar que quando colocamos o parametro '>' ele sempre vai
escrever na primeira linha do arquivo. Se colocarmos '>>' ele
sempre irá escrever abaixo da última linha. No meu caso quero que ele
deixe apenas o meu IP atual no arquivo por isso usei o '>'.
Mas
ainda não acho que esse script esteja bom o suficiente. Imaginem a
situação, sempre que eu fechar a conexão SSH e abrir novamente ele irá
executar o script e consequentemente irá reiniciar o apache.
Seria
mais interessante se ele reiniciasse o apache apenas se meu ip tivesse
mudado nos casos onde houvesse queda de conexão, por exemplo.
Então vamos fazer uma pequena modificação:
#!/bin/bash
ip_ssh=($(echo $SSH_CLIENT | awk '{ print $1 }'))
ip_antigo=($(cat ~/.myscripts/checkip/myip | awk '{ print $3 }'))
checkip(){
if [[ ${ip_ssh} != ${ip_antigo} ]]; then
echo allow from $ip_ssh > ~/.myscripts/checkip/myip
sudo /etc/init.d/apache2 restart
fi
}
checkip
/bin/bash
ATENÇÃO:
Muito cuidado para não deixar de adicionar o comando /bin/bash ao final
do arquivo. Esse comando é o responsável por fechar o script e voltar
ao SSH. Caso contrário, após se conectar e executar o script, o SSH irá
sempre fechar.
Agora SE os Ips forem iguais, ele vai
apenas enviar a mensagem 'são iguais' e vai enviar isso pra um arquivo
vazio. Agora se forem diferentes, ele irá escrever o nome ip no arquivo
'myip' e reiniciar o apache.
Setamos as permissões de execução ao script:
sudo chmod a+x /usr/local/bin/checkip
Só que se eu deixar desta forma, ele não vai ficar legal pois quando chegar na linha que reinicia o apache, vai pedir a senha do Administrador (sudo). Então para que ele não peça senha alguma e execute vamos fazer o seguinte: no terminal digitamos: sudo visudo
Ao final do arquivo iremos adicionar a seguinte entrada:
kaput ALL = NOPASSWD: /etc/init.d/apache2
Ou seja, toda vez que o usuário kaput digita sudo /etc/init.d/apache2 restart o sistema irá executar o comando sem perguntar o password (NOPASSWD).
A
primeira parte já foi agora só resta dizer pro servidor SSH executar
esse script toda vez que uma nova conexão for feita no SSH.
Pra isso vamos editar o arquivo ~/.profile: nano ~/.profile
E adicione ao final do arquivo o comando que chama nosso script: checkip
Pronto, agora vamos finalmente pro ultimo passo que é a configuração do apache.
Basicamente ficou assim:
<VirtualHost *:80>E adicione ao final do arquivo o comando que chama nosso script: checkip
Pronto, agora vamos finalmente pro ultimo passo que é a configuração do apache.
Basicamente ficou assim:
ServerAdmin webmaster@localhost
DocumentRoot /var/www
<Directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
Include /home/kaput/.myscripts/checkip/myip
</Directory>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Dentro do arquivo myip esta a configuração que permite apenas o meu IP conectado atualmente via SSH.
Em adição a isso, ainda podemos configurar um usuário e senha e dizer para o apache satisfazer as duas exigências.
Em adição a isso, ainda podemos configurar um usuário e senha e dizer para o apache satisfazer as duas exigências.
Missão cumprida!!
Nenhum comentário:
Postar um comentário