programa para bloquear portas

1. programa para bloquear portas

paulo machado
madlinux2

(usa Outra)

Enviado em 18/04/2009 - 17:12h

estou fazendo um programinha pra bloquear portas no sistema. no momento, não estou conseguindo inserir nada no arquivo portas.txt, que está no mesmo diretório dos scrips fireslack e bantex. primeiramente, quero escrever no arquivo portas, todas as portas que serão bloqueadas, para só a partir daí inserir as regras de bloqueio. porém, qd coloco um número e escolho bloquear, o shell fecha, junto com o programa. podem me ajudar a descobrir o erro?

#!/bin/bash

#fireslack.sh - provê uma interface gráfica para a #ferramenta iptables

#Autor: Paulo Vitor <opalaruby@pop.com.br>

#Este programa recebe como parâmetro uma informação do usuário a respeito
# de uma porta, vindo a retornar o bloqueio ou liberação desta.

#Histórico:

#v.0.1 2008-10-02, Paulo Vitor:
# -Versão de testes, iniciando apenas as interfaces gráficas,
# sem inserção/remoção de dados
#v.0.2 2009-01-05, Paulo Vitor:
# -Versão de testes, com mais recursos gráficos,
# ainda sem inserção/remoção de dados; troca do nome SlackWall (já existente em outro programa) por FireSlack

#Licença: GPL

#mostra uma caixa com essa mensagem
#dialog --msgbox 'Olá, bem vindo ao Slackwall' 5 40

#primeira interface inicial
#dialog --title "Slackwall"\
# --menu "O que deseja fazer?" 0 0 0 Listar "Lista portas bloqueadas"\
# Bloquear "Bloqueia portas" Liberar "Libera portas"

#o comando a seguir define o arquivo portas (no mesmo diretório que o script principal) como nosso banco de dados, ou seja, a base onde serão armazenados esses dados
BANCO=portas.txt


#o comando source busca o script bantex.sh, que será o gerenciador do banco de dados textual
source bantex.sh || {
echo "Ocorreu algum erro ao buscar o script bantex"
return 1
}

#primeiramente, usamos o while para transformar o programa num loop, ou seja, para que o programa não seja finalizado após cada ação do usuário e sim, volte ao menu principal
#while :
#do

#primeira janela do programa a seguir
acao=$(dialog --stdout --menu "Bem vindo ao FireSlack! O que deseja fazer?" 0 0 0\
Bloquear "Bloqueia uma porta do sistema"\
Liberar "Libera uma porta do sistema"\
Listar "Lista as portas bloqueadas")

#o bloco a seguir se aplica quando o usuário escolhe a opção Bloquear
case "$acao" in
Bloquear)
xlogin = $(dialog --title "Bloquear Porta" --stdout --inputbox "Digite o número da porta:" 0 0)
[ "$xlogin" ] || exit 1

#o trecho a seguir confere se a porta já não está bloqueada; se estiver, mostra um aviso.

tem_chave "$xlogin" && {
msg = "A porta '$xlogin' já está bloqueada."
dialog --msgbox "$msg" 6 40
exit 1
}
;;
#o bloco a seguir se aplica quando o usuário escolhe a opção Listar


Listar)
#lista das portas (apaga a primeira linha)
temp=$(mktemp -t lixo.XXXXXX)
pega_campo 1 | sed 1d > "$temp"
dialog --title "Portas Bloqueadas" --textbox "$temp" 13 40
rm $temp
;;

esac

#done


#!/bin/bash


#bantex.sh - Gerenciador do Banco Textual

#Biblioteca de funções para gerenciar os dados no banco textual

#2009-01-07, Paulo Vitor
# -Primeiros códigos, para inserção, exclusão e listagem.



#a seguir, é definido o separador padrão, caso seja necessário usar, no futuro
SEP=:

#a seguir, é definido um arquivo temporário
TEMP=temp.$$

#a seguir, o primeiro teste, para definição da relação entre o arquivo texto e o banco.
[ "$BANCO" ] || {
echo "Ocorreu algum erro na relação entre o banco de dados e o arquivo de gravação dos dados."
return 1
}

#a função a seguir é pra verificar se a chave $1 já existe no banco de dados
tem_chave() {
grep -i -q "^$1$SEP" "$BANCO"
}


#o trecho a seguir apaga o registro (chave $1) do banco, verificando se a chave existe
apaga_registro() {
tem_chave "$1" || return #se não tem, ele volta, sem tentar apagar
grep -i -v "^$1$SEP" "$BANCO" > "$TEMP" #apagando a chave
mv "$TEMP" "$BANCO" #regravando o banco
}


#o trecho a seguir cuida da inserção do registro $* no banco, verificando se não já existe no banco
insere_registro() {
local chave = $(echo "$1" | cut -d $SEP -f1) #pegando o primeiro campo
if tem_chave "$chave"; then #se tiver, ele retorna, mostrando uma mensagem
echo "A porta '$chave' já está bloqueada."
return 1
else
echo "$*" >> "$BANCO" #gravando o registro, mostrando uma mensagem
echo "Porta '$chave' bloqueada com sucesso!"
fi
return 0
}


#o trecho a seguir verifica a questão das permissões de leitura e escrita

#[ -r "$BANCO" -a -w "$BANCO" ] || {
# echo "Confira as permissões de leitura e escrita"
# return 1
#} #nesse, caso, se o arquivo do banco não existir, ou não tiver permissões de acesso, será exibida uma msg

echo "Script chegou a linha final sem erros aparentes."



  


2. Re: programa para bloquear portas

Jeferson dos Santos
lordhulk

(usa Ubuntu)

Enviado em 06/09/2009 - 22:41h

A julgar o nome "bantex" e a estrutura, creio que tenha usado o livro do Aurélio Marinho.
Antes de mais nada, vá com calma e faça o programa fazer o q vc precisa em primeiro lugar, pra depois ir dando interatividade.
O script suzerd, que consta no livro, lhe permite perfeitamente inserir registros dentro de um banco de dados em formato texto. Sugiro baixar os fontes e trabalhar nele.

vc poderia fazer tb algo simples. Por exemplo, a ideia de adicionar uma linha de um arquivo:
#-----------------------------------------------------------
dialogo ()
{
resposta=$(dialog --stdout --backtitle "$titulofundo" \
--inputbox "$1" 0 0 "$2")

retorno=$?
}


dialogo "Qual porta deseja bloquear?"
echo "iptables -t nat -A INPUT -p tcp --dport "$resposta"" >> portas.txt
#--------------------------------------------


Com isso vc ja joga a regra de iptables pronta no arquivo. Aí vc vai implementando pouco a pouco. Graças a esse livro escrevo varios programas nesse estilo e te aconselho a devora-lo até ver onde está errando...









Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts