Fedora 18 - Firewall para desktop + script de inicialização

Publicado por Perfil removido em 14/06/2013

[ Hits: 7.320 ]

 


Fedora 18 - Firewall para desktop + script de inicialização



Olá amigos, estou postando um firewall que criei para minha máquina a fim de ajudar pessoas que estão procurando um modelo para começar seus estudos. Falarei também como colocar seu script de firewall na inicialização do sistema.

Obs.: no caso utilizei a distribuição Fedora 18, que gosto muito, e criei um script de firewall para desktop utilizando o iptables. Não entrarei em detalhes aprofundados sobre o script de firewall.

Primeiramente crie um arquivo, copie e cole o script de firewall e salve-o com o nome e no local que desejar, no meu caso criei o script com o nome de rc.firewall e salvei-o no diretório /etc/rc.d/, devido a questões de organização.

Após criar o script, é necessário que se crie um link simbólico deste script para o diretório /etc/init.d/ que é o diretório onde geralmente são armazenados os scripts de inicialização dos serviços.

# ln -s /etc/rc.d/rc.firewall /etc/init.d/rc.firewall

Feito isso, para verificar quais serviços estão na inicialização do sistema digite o seguinte comando:

# chkconfig -l | grep on

O comando chkconfig disponibiliza uma maneira de se gerenciar a inicialização de serviços e os runlevels que serão inicializados no sistema via linha de comando.

O chkconfig -l lista todos os serviços, independentemente de estarem ou não sendo inicializados no sistema, e o grep filtrará apenas a saída padrão que contém a palavra "on", que serão os que iniciam com o sistema.

Para adicionar seu script na inicialização do sistema basta digitar o seguinte comando:

# chkconfig --level 235 /etc/init.d/rc.firewall on
  • --level → especifica em quais runlevels o serviço será inicializado com o sistema.
  • on → indicará que será iniciado com o sistema

Para inicializar este script basta digitar:

# service rc.firewall start

Segue o conteúdo do script:

#!/bin/bash
#
# Script: Firewall
# Autor: Gustavo Linause
# Data: 12/05/2013

# chkconfig: 345 20 80
# description: rc.firewall


module[0]="iptable_filter"
module[1]="iptable_nat"
module[2]="iptable_mangle"

for ((n=0;$n<=2;n++)); do
    if [ "`lsmod | grep ${module[$n]}`" = "" ]; then
        /sbin/modprobe ${module[$n]}
        echo -e "\nMódulo ${module[$n]} carregado."
    fi
done

#variavel path iptables
ipt=/sbin/iptables

# IP da Rede
lan=10.0.0.0/24

# Interface da Rede Local - LAN
ilan=p6p1

# Ativando o redirecionamento de pacotes
echo 1 > /proc/sys/net/ipv4/ip_forward

do_start () {

    # Removendo regras
    $ipt -F
    $ipt -t nat -F
    $ipt -t mangle -F

    # Apagando chains
    $ipt -X
    $ipt -t nat -X
    $ipt -t mangle -X
    $ipt -t nat -F POSTROUTING
    $ipt -t nat -F PREROUTING

    # Zerando contadores
    $ipt -Z
    $ipt -t nat -Z
    $ipt -t mangle -Z


    # Default policies
    $ipt -P OUTPUT ACCEPT
    $ipt -P INPUT DROP
    $ipt -P FORWARD DROP

    # Liberando o Tráfego na Interface loopback
    $ipt -t filter -A INPUT -i lo -j ACCEPT

    # Manter Conexões Estabelecidas
    $ipt -t filter -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED,RELATED -j ACCEPT
    $ipt -t filter -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED,RELATED -j ACCEPT

    # Liberando ping
    $ipt -t filter -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
    $ipt -t filter -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

    ########### PROTEÇÕES ###########

    #i=/proc/sys/net/ipv4
    echo 1 > $i/tcp_syncookies
    echo 0 > $i/icmp_echo_ignore_broadcasts
    echo 0 > $i/icmp_ignore_bogus_error_responses

    for i in /proc/sys/net/ipv4/conf/*; do
        echo 0 > $i/accept_redirects
        echo 0 > $i/accept_source_route
        echo 1 > $i/log_martians
        echo 1 > $i/rp_filter
    done

   # Proteção contra Ataques
   $ipt -t filter -A INPUT -m conntrack --ctstate RELATED,INVALID -j DROP


   ############# PROTOCOLOS E SERVIÇOS #############


    # DNS - Serviço de Nomes de Dominios
    $ipt -t filter -A INPUT -i $ilan -p tcp -m tcp --dport 53 -j ACCEPT
    $ipt -t filter -A INPUT -i $ilan -p udp -m udp --dport 53 -j ACCEPT

    #HTTP/HTTPS - Protocolo de Transferência de Hypertext
    $ipt -t filter -A INPUT -i $ilan -p tcp -m tcp --dport 80 -j ACCEPT
    $ipt -t filter -A INPUT -i $ilan -p tcp -m tcp --dport 433 -j ACCEPT

    # NTP - Protocolo para sincronização dos relógios
    $ipt -t filter -A INPUT  -p udp --sport 123 -j ACCEPT
    $ipt -t filter -A FORWARD -p udp --sport 123 -j ACCEPT
    $ipt -t filter -A FORWARD -p udp --dport 123 -j ACCEPT

    # SSH - Shell Seguro
    $ipt -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

    # LOGs
    $ipt -t filter -A INPUT -p tcp -m tcp --dport 22 -j LOG --log-prefix "[Acesso SSH: ]"
    $ipt -t filter -A OUTPUT -p tcp -m tcp --dport 22 -j LOG --log-prefix "[Acesso SSH: ]"
    $ipt -I INPUT 1 -m limit -p tcp --destination-port 22 -j LOG --log-level 1 --log-prefix "[ Acesso SSH: ]"

    # log all the rest before dropping
    #$ipt -A INPUT   -j LOG --log-prefix "[INPUT: ] "
    #$ipt -A OUTPUT  -j LOG --log-prefix "[OUTPUT: ]"
    #$ipt -A FORWARD -j LOG --log-prefix "[FORWARD: ]"

}

do_stop () {

    # Removendo regras
    $ipt -F
    $ipt -t nat -F
    $ipt -t mangle -F

    # Apagando chains
    $ipt -X
    $ipt -t nat -X
    $ipt -t mangle -X
    $ipt -t nat -F POSTROUTING
    $ipt -t nat -F PREROUTING

    # Zerando contadores
    $ipt -Z
    $ipt -t nat -Z
    $ipt -t mangle -Z

        $ipt -P INPUT ACCEPT
        $ipt -P OUTPUT ACCEPT
        $ipt -P FORWARD ACCEPT
}

do_status () {
    $ipt -nL
}

case "$1" in

    start)
    echo -e "Starting Firewall iptables     [ OK ]\n"
        do_start
        ;;

    stop)
        echo -e "\nStopping Firewall iptables."
    do_stop
        ;;

    restart)
        echo -e "\nReloading Firewall configuration rules."
        do_start
        ;;

    status)
        echo -e "\nShowing the rules firewall."
        do_status
        ;;

    *)
        echo -e "\nStopping Firewall iptables\n"
        echo -e "\nUso: rc.firewall {start|stop|status|restart}\n"
        exit 1
esac

exit 0

Espero ter ajudado, abraço a todos!

Outras dicas deste autor

AptonCD no Ubuntu: FATAL - Failed to fork

Vídeo-aula: Criando um pacote .deb

Instalação do Java 8 no Linux Mint e Ubuntu

MongoDB no Python 3

Instalando LibreOffice 6.0 no Linux Mint 18

Leitura recomendada

Administrando seu dia-a-dia no Linux com Konqueror

Grc - deixando a saída de seus comandos coloridos

Substituindo o calendário do LXDE pelo Orage

Interfaces de rede - Comandos para iniciantes e intermediários

Como dar Permissão de Execução a Arquivo (script ou binário) no GNU/Linux - Abordagem Prática

  

Comentários
[1] Comentário enviado por danniel-lara em 14/06/2013 - 11:30h

Valeu pela dica , muito bom mesmo

[2] Comentário enviado por alotus em 06/02/2014 - 11:52h

Olá Amigo..

Eu estou o usando o firewalld do Fedora 18. Muito complicado. Bem acontece que está funcionando para envio de emails.

Eu tenho um servidor Lotus Notes Domino num IP 192.168.0.6 enviando emails pela porta 25

Acontece que o Firewalld está no Servidor 192.168.0.21 com duas placas uma ligada ao modem GVT e outra na rede interna.

Eu tenho tentando receber emails pelo Lotus Domino, envio pelo Gmail e nada. O Lotus Domino Consegue enviar para GMAIL, etc.

Mas, não consigo receber. A Mensagem não chega. Eu configurei o NAT do Modem GVT para passar o email da porta 25.

que comando no iptables devo usar para redirecionar os pacotes da porta 25 no ip 192.168.0.21 que chegam (inbound) para o servidor 192.168.0.6 na porta 25?

Pode Ajudar?

Abs

Everton

[3] Comentário enviado por removido em 06/02/2014 - 12:16h

Olá, a princípio seria este comando, executa ae, e comenta se resolveu, qualquer coisa tento te ajudar, abraço!

ipt=/sbin/iptables
#eth0 -> interface de entrada

$ipt -t nat -A PREROUTING -p tcp -i eth0 -d 192.168.021 --dport 25 -j REDIRECT --to 192.168.0.6:25



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts