Muito bom, parabéns.
Muito bom, parabéns.
sem problemas com a 5.5 .. retorne somente se tiver achado algum bug
ok, muito obrigado... vou deixar 5.5 e qq noticia posto aqui...vlw
Pessoal, os procedimentos aqui surtiram resultado, todos meus rocket´s que estavam com problema agora estão a todo vapor desde terça-feira sem travar.
Obrigado a todos do fórum e a vc Alexandre que sempre encontra soluções e as posta aqui Under fazendo deste Fórum uma ferramenta poderosa.
Abraço a todos e sucesso.
Mudei para o 5.3.5 assim que postaram o problema (foi mais ou menos na mesma época que estava testando os Rockets), e quando saiu o 5.5 atualizei e estao funcionando bem.
Desculpe se já perguntaram, mas tava lendo o changelog da versão 5.3.5 e lá fala que corrigiram o seguinte bug:
"HTTP server security exploit"
Esse bug foi corrigido nessa versão 5.3.3 postada aqui no tópico? To usando-a pq to tendo um problema com a 5.3.5 e a 5.5 piorou mais ainda. Por enquanto essa 5.3.3 tá estável.
a 5.3.3 do http://189.84.0.10/ubnt.php esta com a falha corrigida..
Muito Obrigado Pela dica ajudou mesmo Gente eu estava com esse problema aki na minha rede, como minha rede e meia grandinha fiz uma adaptação do Putty com o Dude Server, pra rodar em todos os meus clientes, sem precisar entrar um por um, e estavam quase todas infectadas, por isso viviam travando, se alguem precisar de fazer essa adaptaçãoe só entrar em contato.
obrigado!!!
isacloko, tem como vc postar para gente as regras que vc implementou para fazer na rede toda!??
eu me interesso!
valeu abracos
Seria de grande ajuda mesmo, afinal com uma rede grande com vários UNBT infectados isso seria muito bom.
Boa tarde.
Há um tópico[1] aqui no Under-Linux, que descreve um código em Python[2] e Paramiko[3], que demonstra como executar comandos SSH em lote, em diferentes dispositivos.
Uso essa combinação de ferramentas para distribuir regras de firewall, fazer upgrade/update de roteadores, entre outras coisas. Executar dois rm, um cfgmtd e um reboot, será suave.
Espero que o código seja útil.
[1] https://under-linux.org/f143/registrando-log-149969/
[2] http://www.python.org
[3] http://www.lag.net/paramiko/
Saudações,
Trober
boa tard trober, agradeco seus links e sua atencao. vi os topicos que vc participou falando sobre paramiko e ssh, ai dei mais uma googlada e meio que cheguei a uma conclusao, porem estou com 2 duvidas gostaria que vc me ajuda-se.
bom, instalei o paramiko no meu slackware que se comunica com as airgrids infectadas, segui o site e deu td certo vou postar aqui tbm:
$ wget http://www.lag.net/paramiko/download/paramiko-1.7.6.tar.gz
$ tar xzf paramiko-1.7.6.tar.gz
$ cd paramiko-1.7.6
$ python setup.py build
$ su -c "python setup.py install"
depois de instalado, eu tenho que criar um arquivo com a extensao
.py com os comandos dentro. bom entao pesquisando cheguei a esses
comandos, nao sei se esta certo, corrija caso esteja errado, coloquei
o nome de removewormlote.py com as seguintes linhas:
#!/usr/bin/env python
cmd1 = "rm /etc/persistent/rc.poststart"
cmd2 = "rm -rf /etc/persistent/.skynet"
cmd3 = "cfgmtd -w -p /etc/"
cmd4 = "reboot"
host = '192.168.100.0/24' ##SCOBO DA MINHA REDE AIRGRID!!???
user = 'ubnt'
passwd = 'ubnt'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(host, username=user, password=passwd)
stdin, stdout, stderr = ssh.exec_command(cmd1)
stdin, stdout, stderr = ssh.exec_command(cmd2)
stdin, stdout, stderr = ssh.exec_command(cmd3)
stdin, stdout, stderr = ssh.exec_command(cmd4)
stdin.write(passwd + '\n')
stdin.flush()
print stdout.readlines()
ssh.close()
bom minha duvida é como comunico com tds os airgrids sem ter que colocar ip
de cada cliente, 1 por 1. no caso ai eu coloquei o scobo da rede toda
porem nao sei se vai funcionar!!! eh isso mesmo ou nao?
minha segunda duvida eh: como sao 3 comandos representei como cmd1, cmd2 e cm3.
vai funcionar ou tem que ser de outra maneira?
bom aguardo, muit obrigado pela ajuda ate agora.
Não é possível comunicar com todos ao mesmo tempo. É uma operação por lote. A conexão SSH é "um para um". O que você precisa, é ter uma arquivo (csv, xml, ini, txt), com os endereços IP de todos os seus clientes. O seu script lerá esse arquivo, e terá um referencial de conexão.
Não vai funcionar. Host é sempre /32 (em IPv4). Menos específico que isso é network. Como a conexão SSH é "um para um", não pode ser o escopo da rede.
Você pode usar de operadores lógicos do shell, como por exemplo: cmd1 && cmd2 && cmd3 && cmd. O operador && somente executará o comando subsequente se a ação anterior ocorrer com êxito (EXIT_STATUS == 0).
Se quiser usar mais comandos, ou caso um tenha o risco de EXIT_STATUS != 0 (como a remoção de um diretório que não existe mais), é melhor fazer um for, while , until, foreach, ou outro tipo de laço, para rodar os comandos.
Espero ter ajudado.
Saudações,
Trober
como faco isso? no caso eu crio um arquivo com toda a lista de ips, vamos supor, desculpe se estiver errado pois nao sou programador!!
vamo la, eu crio um arquiv com tds os enderecos de ip com o nome de listaips.txt (coloquei txt nao sei pq foi apenas um exemplo!), ai la dentro tem:
192.168.0.100
192.168.0.101
192.168.0.102 .... e assim vai tds as airgrids infectadas...
ai la no script, em host onde eu coloquei o escopo da rede, que esta errado, eu coloco o endereco onde se encontra esse arquivo txt??
ex.:
host= '/listaips.txt'
simples assim ou estou totalmente errado???? hehehe
agradeco a sua disposição...
Olá.
Fiz uma aplicação para você, desde que concorde com as seguintes isenções.
1) Não há na aplicação qualquer verificação de consistência e integridade. Se o arquivo de hosts estiver deformado, com formato inválido, a aplicação não verificará esses erros. O código parte do princípio que você compôs corretamente o formato dos arquivos. Fique atento ao preenchimento de commands.txt e hosts.csv. Esses arquivos não podem ter linhas em branco.
2) A aplicação foi totalmente validada por PEP8, apenas. Outros validadores, como PyLint, não foram considerados.
3) A aplicação foi feita para ser executada em FreeBSD. Para executar em GNU/Linux, faça as adaptações no shebang (a primeira linha do arquivo, aquela que começa com #!/).
4) Se um dos hosts estiver off-line, não há tratamento para ignorar o insucesso da conexão e passar para o próximo ativo de rede. A aplicação considera que todos os hosts estão on-line e com serviço de SSH rodando.
5) Se concorda com as isenções acima, prossiga a leitura:
Código-fonte da aplicação, em Python.
Código :#!/usr/local/bin/python # -*- encoding: utf-8 -*- import csv import paramiko from datetime import datetime def CommandLoad(File): """ Read command file sets and return it. """ FILE = open(File, "r+") varList = [] for varLine in FILE: varList.append(varLine) FILE.close() return varList def HostLoad(File): """ Read each host in hosts file. """ CSVFile = open(File, 'r') Data = csv.reader(CSVFile) for Row in Data: IP = str(Row[0]) PORT = int(Row[1]) LOGIN = str(Row[2]) PASSWORD = str(Row[3]) FILENAME = str(IP) + '-' + str( datetime.now().strftime("%Y-%m-%d-%H%M")) SaveLog(FILENAME, SSHConnect(IP, PORT, LOGIN, PASSWORD)) def SaveLog(Filename, List): """ Save output (stdout) in file. """ varFile = open(Filename, "w") varFile.writelines(List) varFile.close() def SSHConnect(Host, Port, Login, Password): """ Connect to devices. """ ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(Host, port=Port, username=Login, password=Password) List = [] for Commands in CommandLoad("commands.txt"): stdin, stdout, stderr = ssh.exec_command(Commands) for line in stdout: List.append(line.replace('\r', '')) ssh.close() return List HostLoad("hosts.csv")
Estrutura de hosts.csv, sendo composto por IP, porta, login e senha, valores estes separados por vírgula, conforme sugere o formato do arquivo CSV (comma separated values). ESTE ARQUIVO NÃO PODE TER LINHAS EM BRANCO.
Código :172.30.0.2,22,ubnt,larry 172.30.0.3,22,ubnt,moe 172.30.0.4,22,ubnt,curly
Estrutura de commands.txt, arquivo que tem todos os comandos que você deseja executar nos hosts definidos em hosts.csv. ESTE ARQUIVO NÃO PODE TER LINHAS EM BRANCO.
Código :rm /etc/persistent/rc.poststart rm -rf /etc/persistent/.skynet cfgmtd -w -p /etc/ reboot
Com isso, você já resolve o problema. Todos os comandos declarados no arquivo commands.txt, serão executados em todos os hosts descritos em hosts.csv.
Testa e nos avisa.
Saudações,
Trober
trober, muito obrigado por deixar td mastigado agora eh soh engolir!!hehe
isso vai ajudar muito, o unico problemas eh encontrar tds airgrids on-line para rodar o script!
uma ultima coisa, no hosts.csv e commands.txt eu tenho que colocar o
#!/usr/local/bin/python na primeira linha ou apenas no arquivo .py????
bom e uma ultima duvida, no caso nas setoriais eu removi o virus e coloquei o firmware do alexandre, agora sempre lembro dele quando acesso o aircontrol pois aparece do lado da versao do firmware o a.correa!! nada mais justo pois seu firmware nao barra o up em 1mb igual oultimo disponivel no site da ubnt! nao estou reclamando!!! hehehe
enfim, depois de atualizado ele corrige o buq, e nao infecta mais, nos airgrids, se eu apenas remover o virus e nao atualizar o firmware, sera que outros airgrids que eu ainda nao removi o virus pode infectar esses que eu ja removi, pois apenas removi e nao atualizei o firmware??
ah eu dei um drop no ip que o virus manda informacao, igual o alexandre recomendou! mais acho q ele se espalha sem a necessidade de se comunicar com esse ip??
abracos a tods, muito obrigado trober e tbm ao alexandre correa !
sucesso e felicidades....
Você pode fazer um controle de exception, para tratar os AirGrid que estão desligados.
Somente no arquivo de extensão .py.
Não uso produtos Ubiquiti, por isso, não tenho opinião sobre essa parte da sua mensagem, apesar de ser o foco principal desse tópico.
Fico feliz em ter ajudado
Saudações,
Trober
trober, cara deu td certo, to passando aqui soh pra agradecer novamente msm. eu listei apenas as on-lines, e rodei e executou certinho!
em relacao ao virus da minha pergunta anterior, nao se espalha nao.
abracos
Que boa notícia
Você pode usar o nMap, com -n -sP, em conjunto com a opção -oG (grepable), filtrando só os hosts ativos (UP), e com uns awk para lá, uns sed para lá, você monta dinamicamente seu arquivo hosts.csv, sem ter de tratar exception no Python
Não uso Ubiquiti, mas é sempre bom saber. Grato pela informação
Para você também.
Saudações,
Trober