Qualquer um pode fazer um script de firewall em iptables, mamão com açucar

Iniciado por ucastrobr, 19 de Novembro de 2007, 17:12

tópico anterior - próximo tópico

ucastrobr

Abra um editor de texto (observação tem que ser gedit, vi, nano, não me vá abrir openoffice ou abiword)
Aplicações->Acessórios->Editor de texto

Cole isso dentro do seu editor:
    #!/bin/bash

    # Este script deve ser usado em Desktops apenas, não possui qualquer
    # especialização para uso em servidores de segurança ou ambientes em produção
    # oferece apenas o nível básico de proteção, para maiores informações consultar
    # a documentação oficial do iptables e sites especializados em segurança
    #
    # Criado por Allan Garcia
    # allan.garcia@gmail.com
    # V 1.0

    . /lib/lsb/init-functions

    IPTABLES="/sbin/iptables"
    IPTABLES_SAVE="/sbin/iptables-save"
    IPTABLES_RESTORE="/sbin/iptables-restore"
    IPTABLES_RULES="/etc/default/iptables"
    SAVE_RESTORE_OPTIONS="-c"

    fillbasicrules() {
    ${IPTABLES} -F
    ${IPTABLES} -X
    ${IPTABLES} -P INPUT DROP
    ${IPTABLES} -P FORWARD DROP
    ${IPTABLES} -P OUTPUT DROP
    ${IPTABLES} -N Ubuntu-Firewall-1-INPUT
    ${IPTABLES} -A INPUT -j Ubuntu-Firewall-1-INPUT
    ${IPTABLES} -A FORWARD -j Ubuntu-Firewall-1-INPUT
    ${IPTABLES} -A OUTPUT -j ACCEPT
    ${IPTABLES} -A Ubuntu-Firewall-1-INPUT -i lo -j ACCEPT
    ${IPTABLES} -A Ubuntu-Firewall-1-INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
    ${IPTABLES} -A Ubuntu-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
    ${IPTABLES} -A Ubuntu-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited
    }

    checkrules() {
    if [ ! -f ${IPTABLES_RULES} ]; then
    echo -n "There is no rules configured, can I suggest some (y/n) [y]?"
    read input
    if [ -z $input ] || [ "$input" == "y" ] || [ "$input" == "yes" ] || [ "$input" == "Y" ] || [ "$input" == "YES" ]; then
    fillbasicrules
    save
    else
    echo "Not starting iptables. First create some rules then run"
    echo "\"/etc/init.d/iptables save\""
    return 1
    fi
    fi
    }

    save() {
    ${IPTABLES_SAVE} ${SAVE_RESTORE_OPTIONS} > ${IPTABLES_RULES}
    return $?
    }

    start() {
    checkrules || return 1
    ${IPTABLES_RESTORE} ${SAVE_RESTORE_OPTIONS} < ${IPTABLES_RULES}
    return $?
    }

    stop() {
    for table in `cat /proc/net/ip_tables_names`; do
    ${IPTABLES} -F -t $table
    ${IPTABLES} -X -t $table
    if [ $table == nat ]; then
    ${IPTABLES} -t $table -P PREROUTING ACCEPT
    ${IPTABLES} -t $table -P POSTROUTING ACCEPT
    ${IPTABLES} -t $table -P OUTPUT ACCEPT
    elif [ $table == mangle ]; then
    ${IPTABLES} -t $table -P PREROUTING ACCEPT
    ${IPTABLES} -t $table -P INPUT ACCEPT
    ${IPTABLES} -t $table -P FORWARD ACCEPT
    ${IPTABLES} -t $table -P OUTPUT ACCEPT
    ${IPTABLES} -t $table -P POSTROUTING ACCEPT
    elif [ $table == filter ]; then
    ${IPTABLES} -t $table -P INPUT ACCEPT
    ${IPTABLES} -t $table -P FORWARD ACCEPT
    ${IPTABLES} -t $table -P OUTPUT ACCEPT
    fi
    done
    }

    restart() {
    for table in `cat /proc/net/ip_tables_names`; do
    ${IPTABLES} -F -t $table
    ${IPTABLES} -X -t $table
    done
    start
    }

    case "$1″ in
    save)
    echo -n "Saving iptables state..."
    save
    if [ $? -eq 0 ]; then
    echo " ok"
    else
    echo " error!"
    fi
    ;;

    start)
    log_begin_msg "Loading iptables state and starting firewall..."
    start
    log_end_msg $?
    ;;

    stop)
    log_begin_msg "Stopping firewall..."
    stop
    log_end_msg 0
    ;;

    restart)
    log_begin_msg "Stopping firewall..."
    restart
    log_end_msg $?
    ;;

    *)
    echo "Usage: /etc/init.d/iptables {start|stop|restart|save}" >&2
    exit 1
    ;;

    esac

    exit 0


Feche o arquivo que aparecerá a opção "salvar como" aparecerá uma janelinha coloque o nome digitando "iptables" sem aspas é claro. E salve o arquivo.
Pode verificar que ele está em sua pasta pessoal, home.
Agora abra um terminal qualquer e digite: (OBS: Para colar o comando num terminal basta acionar CTRL+C  e clicar no terminal e acionar SHIFT+INSERT que colará)
Comandos cole um por vez na sequência correta, comando 1:
cd /etc/init.d/

Comando 2:
sudo -s

Comando 3:
mv /home/usuáriox/iptables ./     (Nota o usuáriox você terá que colocar o nome do seu)

Comando 4:
chown root.root iptables

Comando 5:
chmod 755 iptables

Comando 6:
exit

AGORA ESTA PARTE EM COR VERDE É OPCIONAL PARA QUEM QUISER COLOCAR MAIS REGRAS EMBORA AS REGRAS DO SCRIPT ACIMA É O SUFICIENTE. Pule esta parte.
Se você iniciar o iptables sem criar regras, o próprio script irá lhe sugerir um conjunto inicial de regras, caso queira criar seu próprio conjunto de regras, faça-o e depois salve usando o comando


sudo /etc/init.d/iptables start

O conjunto de regras sugerido é suficiente para proteger seu computador pessoal, todavia para uma configuração mais avançada recomento uma leitura mais aprofundada na documentação do iptables (man iptables).

Após a regras salvas inicie o iptables usando o comando 7

sudo /etc/init.d/iptables start

Para habilitar a inicialização sempre que o computador ligar execute comando 8

sudo update-rc.d iptables defaults

Pronto! Seu firewall está configurado para carregar na inicialização do computador

Última observação:
Esse script está muito bom, mas faz com que o NetworkManager do ubuntu deixe de funcionar. Para isto nao acontecer o script tem de ser colocado em /etc/NetworkManager/dispatcher.d/01iptables
deste modo o NM continua a funcionar.
Fonte de matéria:Allan Garcia
Spock – "After a time, you may find that having is not so pleasing a thing, after all, as wanting. It is not logical, but it is often true."
("Depois um de tempo você vai perceber que ter algo pode não ser tão prazeroso quanto deseja-lo. Isto não é lógico, mas frequentemente é verdade.")

AquaMan

Bacana a sugestão, mas como sou ainda novato no Linux, isto significa que quando ligo o micro com Ubuntu eu não estou protegido? É preciso que eu siga este passo-a-passo para ter um firewall ativado no Ubuntu?

Uso o 7.04 e o 7.10.

Abarços!

(AMD Athlon 64 3.5Ghz/1Gb RAM/80Gb+250Gb/Geforce FX 6200 128Mb/Palm T5)

ucastrobr

Sim o iptables já está instalado mas sem nenhuma regra, sem nenhuma proteção contra invasores.
Não precisa desesperar porque dificilmente um desktop de usuário normal precisará usá-los a não ser que seja de empresas. Mesmo assim um homem prevenido vale por dois.
Tem que ativá-lo ou pelo script que acima acionei ou pelo firestarter um programa gráfico que irá ditar as regras do iptables.
Eu prefiro pelo script mais simples e menos burocracia.
Spock – "After a time, you may find that having is not so pleasing a thing, after all, as wanting. It is not logical, but it is often true."
("Depois um de tempo você vai perceber que ter algo pode não ser tão prazeroso quanto deseja-lo. Isto não é lógico, mas frequentemente é verdade.")

rjbgbo

ucastrobr, minha conexão de Internet é via rádio e meu provedor faz o controle de firewall. Eu também preciso fazer tal ativação?
Linux User #440843 | Ubuntu User #11469

ucastrobr

A minha conexão também é via rádio e veja bem um hacker pode invadir seu provedor e acessar informações de seus usuários, quanto mais proteção melhor.
Spock – "After a time, you may find that having is not so pleasing a thing, after all, as wanting. It is not logical, but it is often true."
("Depois um de tempo você vai perceber que ter algo pode não ser tão prazeroso quanto deseja-lo. Isto não é lógico, mas frequentemente é verdade.")

rjbgbo

Citação de: ucastrobr online 19 de Novembro de 2007, 19:03
A minha conexão também é via rádio e veja bem um hacker pode invadir seu provedor e acessar informações de seus usuários, quanto mais proteção melhor.

Opa ucastrobr, vou providenciar isso
Obrigado.
Linux User #440843 | Ubuntu User #11469

gabriel0085

Citação de: rjbgbo online 19 de Novembro de 2007, 23:01
Citação de: ucastrobr online 19 de Novembro de 2007, 19:03
A minha conexão também é via rádio e veja bem um hacker pode invadir seu provedor e acessar informações de seus usuários, quanto mais proteção melhor.

Opa ucastrobr, vou providenciar isso
Obrigado.

Ricardo,

se não quiser ter muito trabalho criando um script, basta usar o Firestarter, que é justamente um scrpt gráfico e facilitado para o iptables.

Mas se quiser aprender um pouco o tópico é ótimo.

Valeu ucastorbr, mais um ótimo tópico pra quem 'tá afim de fuçar no sistema.

ucastrobr

Obrigado Gabriel, o uso do script simplificado é apenas para os iniciantes começarem a pegar o gosto fazendo seu primeiro script, afinal só usar interface gráfica para tudo é mais confortável mas não acrescenta nada ao aprendizado.
Spock – "After a time, you may find that having is not so pleasing a thing, after all, as wanting. It is not logical, but it is often true."
("Depois um de tempo você vai perceber que ter algo pode não ser tão prazeroso quanto deseja-lo. Isto não é lógico, mas frequentemente é verdade.")

rjbgbo

Pois é optei mesmo é claro pelo gráfico Firestarter, mas tô c/ um dúvida:
Ainda ñ o configurei p/ inicializar na sessão, por causa dele sempre pedir ao abrir a senha, neste fórum encontrei 2 casos sobre o assunto:
http://ubuntuforum-br.org/index.php/topic,2862.msg15403.html#msg15403
http://ubuntuforum-br.org/index.php/topic,15913.msg85342.html#msg85342

Ainda vou dar minha checada no fórum internacional sobre o caso.
Linux User #440843 | Ubuntu User #11469

gabriel0085

Citação de: rjbgbo online 20 de Novembro de 2007, 20:54
Pois é optei mesmo é claro pelo gráfico Firestarter, mas tô c/ um dúvida:
Ainda ñ o configurei p/ inicializar na sessão, por causa dele sempre pedir ao abrir a senha, neste fórum encontrei 2 casos sobre o assunto:
http://ubuntuforum-br.org/index.php/topic,2862.msg15403.html#msg15403
http://ubuntuforum-br.org/index.php/topic,15913.msg85342.html#msg85342

Ainda vou dar minha checada no fórum internacional sobre o caso.


A dica do primeiro link que você colocou funciona perfeitamente com o firestarter.

Com a dica ele irá iniciar minimizado no systray e não irá pedir senha.

Esse método é seguro.

Citarcoloquei o firestarter para iniciar junto com a sessão, e agora ele sempre me pede senha ao entrar no gnome. Quero eliminar essa segunda senha, e para isso pensei em usar o sudoers para abrir o firestarter como root sem senha.

ficou assim o meu sudoers:
# /etc/sudoers
#
# Defaults

Defaults   !lecture,tty_tickets,!fqdn

# User privilege specification
root   ALL=(ALL) ALL

# Members of the admin group may gain root privileges
%admin   ALL=(ALL) ALL
%admin   ALL=NOPASSWD: /usr/bin/firestarter

-------------------------


Eu pertenço ao grupo admin, no entanto por algum motivo não está funcionando na inicialização. Recebo a mensagem de que eu preciso de permissões de root para rodar. No entanto, chamando $ sudo firestarter funciona ok.

vejam isso:
$ sudo -l
User alexandre may run the following commands on this host:
    (ALL) ALL
    (root) NOPASSWD: /usr/bin/firestarter

rjbgbo

Amigos, ucastrobr e gabriel0085, encontrei um bom tuto de como instalar e configurar o Firestarter p/ iniciar junto c/ o Linux, s/ pedir senha:

http://ubuntuforum-br.org/index.php/topic,28364.0.html

também sugiro esse tópico - http://ubuntuforum-br.org/index.php/topic,17835.0.html
C/ um tuto anterior/ postado nesse fórum
Linux User #440843 | Ubuntu User #11469

alarcon

Realmente seguir um roteiro é mamão com açúcar, mais entender o que está fazendo e conseqüentemente as regras do iptables para a partir daí você criar o seu próprio firewall, é que é mais complicado. Agora mais fácil ainda é instalar o Firestarter. ;)

Agora deixo como contribuição este excelente link do guia do hardware para quem quer entender um pouco sobre iptables e firewall no linux:

http://www.guiadohardware.net/tutoriais/linux-escrevendo-scripts-firewall/