Configuração Manual do Firewall no Redhat IPTables

1

Estou tentando configurar um firewall complexo para minha equipe. Estamos analisando seis interfaces com diferentes tipos de zonas e fluxos de segurança.

Eu tenho um script de configuração de firewall limpo e bem documentado, mas se eu executar o comando iptables-save, os resultados obviamente não terão comentários. Os resultados também estarão fora de sincronia com nossa política documentada.

Existe uma maneira legal e limpa de usar meu próprio arquivo de configuração no Redhat sem desfazer os scripts do Rube Goldberg da Redhat? ao mesmo tempo, eu gostaria de garantir que esses mesmos scripts não pisarem na minha configuração ou, por exemplo, rasgar o firewall bem abertos assim que alguém fizer um ifdown / ifup.

    
por mgjk 01.04.2011 / 19:29

4 respostas

3

Sugiro escrever um script, por exemplo:

#!/bin/bash

## Firewall flushing etc
for t in raw nat mangle filter; do
  iptables -t $t -F
  iptables -t $t -X
done

## Default policies
while read table chain policy; do
  [[ -z $table ]] && continue  ## Skip empty lines
  iptables -t $table -P $chain $policy
done <<< "
  raw    PREROUTING DROP
  filter FORWARD    DROP
  filter INPUT      DROP
  filter OUTPUT     ACCEPT
"

## These rules perform foo
iptables ...
iptables ...

## These rules perform bar
iptables ...
iptables ...

... and so on ...

## Save them
iptables-save > /etc/firewall-rules.conf

exit 0

Em seguida, edite rc.local e adicione:

/sbin/iptables-restore < /etc/firewall-rules.conf

Logo antes da linha exit 0 .

Agora, se você precisar modificar seu firewall, basta editar e executar o primeiro script.

    
por 02.04.2011 / 07:01
1

A maneira mais fácil de gerenciar suas configurações do iptables no RHEL é simplesmente ignorar inteiramente os scripts de configuração fornecidos pelo sistema. Eu gerencio todos os meus sistemas RHEL com fantoche, e uso uma abordagem baseada em fragmentos de acordo com os Padrões Iptables do Módulo .

Isso pode não funcionar para você se você não for uma loja de marionetes, mas a base disso tudo é criar o arquivo /etc/sysconfig/iptables diretamente. Essa abordagem provavelmente funcionará bem muito para você. Desta forma, você ainda pode manter seus comentários e ordenar as regras como quiser.

    
por 01.04.2011 / 19:41
1

Como eu já disse, o IMHO escrevendo scripts SHELL para configurar o iptables é uma abordagem burra.

As próprias instalações do iptables permitem implementar 99,99% das políticas sem a necessidade de trazer algumas coisas adicionais, como SHELL-scripting, por exemplo. g.

Se você precisar que os comentários sejam salvos dentro da sua configuração do iptables, use -m comment --comment ""

    
por 02.04.2011 / 08:52
0

Você pode criar seu próprio script de inicialização e adicioná-lo aos seus serviços existentes com o chkconfig.

Aqui está um modelo que eu uso com frequência.

Ele libera todas as regras e as substitui por um conjunto personalizado que permite ssh, http e https in.

#!/bin/bash
#
# firewall  firewall script
# description:  a firewall script
# chkconfig: 2345 91 09
#

IPTABLES=/sbin/iptables

start() {
    ret=0
    # input chain
    $IPTABLES -A INPUT -m state --state INVALID -j DROP || ret=1
    $IPTABLES -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT || ret=1
    $IPTABLES -A INPUT -i lo -j ACCEPT || ret=1
    $IPTABLES -A INPUT -p tcp --dport 22 --syn -m state --state NEW -j ACCEPT || ret=1
    $IPTABLES -A INPUT -p tcp --dport 80 --syn -m state --state NEW -j ACCEPT || ret=1
    $IPTABLES -A INPUT -p tcp --dport 443 --syn -m state --state NEW -j ACCEPT || ret=1
    # output chain
    $IPTABLES -A OUTPUT -m state --state INVALID -j DROP || ret=1
    $IPTABLES -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT || ret=1
    $IPTABLES -A OUTPUT -o lo -j ACCEPT || ret=1
    return $ret
}

stop() {
    ret=0
    $IPTABLES -F || ret=1
    $IPTABLES -F -t nat || ret=1
    $IPTABLES -X || ret=1
    $IPTABLES -P INPUT ACCEPT || ret=1
    $IPTABLES -P OUTPUT ACCEPT || ret=1
    $IPTABLES -P FORWARD ACCEPT || ret=1
    return $ret
}

panic() {
    ret=0
    $IPTABLES -F || ret=1
    $IPTABLES -F -t nat || ret=1
    $IPTABLES -X || ret=1
    $IPTABLES -P INPUT DROP || ret=1
    $IPTABLES -P OUTPUT DROP || ret=1
    $IPTABLES -P FORWARD DROP || ret=1
    $IPTABLES -Z || ret=1
    $IPTABLES -t nat -Z || ret=1
    return $ret
}

status() {
    $IPTABLES -t filter -L -v --line-numbers
    $IPTABLES -t nat -L -v --line-numbers
    return 0
}

restart() {
    stop
    start
}

case "$1" in
    start)
        stop
        start
        RETVAL=$?
        ;;
    stop)
        stop
        RETVAL=$?
        ;;
    restart)
        restart
        RETVAL=$?
        ;;
    status)
        status
        RETVAL=$?
        ;;
    panic)
        panic
        RETVAL=$?
            ;;
    *)
        echo $"Usage: $0 {start|stop|restart|status|panic}"
        exit 1
        ;;
esac

exit $RETVAL

Você pode colocar esse script em /etc/init.d/ , torná-lo executável e executar chkconfig firewall --add && chkconfig firewall on .

Agora você pode habilitar o firewall com service firewall start , service firewall panic interrompe todo o tráfego de rede e service firewall stop desabilita o firewall.
Eu acho que você entendeu a ideia.

A principal vantagem deste sistema é que você tem um script que pode ser strongmente customizado e escrito nos comentários, sem tocar em nenhuma das configurações existentes do iptables do sistema operacional.

    
por 01.04.2011 / 19:48