Firewall Iptables

Publicado por Perfil removido (última atualização em 10/08/2010)

[ Hits: 18.028 ]

Download 4682.firewall.sh




Estou disponibilizando o script do firewall que eu criei desde a primeira vez que comecei a mexer com o iptables e aos poucos fui atualizando e deixando tudo comentando para saber pra que serve cada uma das portas que são mais usadas.

A maioria das regras estão comentadas, somente o que é realmente necessário como o http, https, dns, ftp está liberado quando habilitar o firewall.

Quando for instalar um servidor Apache, Squid ou liberar a conexão ao MSN/Gmail, por exemplo, basta procurar a regra, descomentar e "reload" o firewall.

  



Esconder código-fonte

#!/bin/bash
#
# Shell Script - Firewall
# =======================
# Autor:- CESAR AUGUSTUS SILVA
#

iptables=/sbin/iptables

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 "Módulo ${module[$n]} carregado."
    fi
done

. /lib/lsb/init-functions

# IP da Rede
network=192.168.0.0/24

# Interface da Rede Local - LAN
ilan=eth0

# Interface da Rede Externa - Internet
inet=ppp0

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

# Apagando chains
$iptables -X
$iptables -t nat -X
$iptables -t mangle -X

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

# Mascaramento
$iptables -t nat -A POSTROUTING -o $inet -j MASQUERADE

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

do_start () {

    # Política
    $iptables -P INPUT DROP
    $iptables -P OUTPUT ACCEPT
    $iptables -P FORWARD DROP

    # Manter Conexões Estabelecidas
    $iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
    $iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

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

    i=/proc/sys/net/ipv4
    echo 1 > $i/ipv4/tcp_syncookies
    echo 1 > $i/icmp_echo_ignore_broadcasts
    echo 1 > $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
    $iptables -A INPUT -m state --state INVALID -j DROP

    # Proteção contra os "Ping of Death"
    $iptables -A INPUT -i $inet -p icmp --icmp-type 8 -m limit --limit 5/m -j DROP
    $iptables -A INPUT -i $inet -p icmp --icmp-type 0 -j ACCEPT
    $iptables -A INPUT -i $ilan -p icmp -j ACCEPT

    # Proteção contra Port Scanner
    $iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 5/m -j ACCEPT

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

    ########### SERVIDORES ###########

    # Apache - Servidor Web
    #$iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

    # Apache TomCat - Servidor Web
    #$iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    # Bind - Servidor DNS
    #$iptables -A INPUT -p udp --dport 53 -j ACCEPT

    # DanGuardian - Servidor Proxy
    #$iptables -A INPUT -p tcp --dport 8080 -j ACCEPT

    # ProFTP - Servidor FTP
    #$iptables -A INPUT -p tcp --dport 21 -j ACCEPT
    #$iptables -A INPUT -p tcp -m multiport --dports 49152:49162 -j ACCEPT

    # Postfix - Servidor de E-mail
    #$iptables -A INPUT -i $ilan -p tcp -m multiport --dports 25,110 -j ACCEPT
    #$iptables -A INPUT -i $ilan -p tcp -m multiport --dports 465,995 -j ACCEPT
    #$iptables -A INPUT -i $ilan -p tcp --sport 25 -j ACCEPT

    # PostgreSQL - Servidor Postgresql
    #$iptables -A INPUT -i $ilan -p tcp --dport 5432 -j ACCEPT

    # SSH - Servidor SSH
    #$iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 -j DROP
    #$iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set
    #$iptables -A INPUT -p tcp --dport 22 -j ACCEPT

    # VNC - Servidor de Acesso Remoto
    #$iptables -A INPUT -p tcp --dport 5900 -j ACCEPT

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

    # AIM
    #$iptables -A INPUT -i $inet -p tcp --sport 5190 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 5190 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 5190 -j ACCEPT
    
    # DNS - Serviço de Nomes de Dominios
    $iptables -A INPUT -p tcp -m multiport --sports 53,5353 -j ACCEPT
    $iptables -A INPUT -p udp -m multiport --sports 53,5353 -j ACCEPT
    #$iptables -A FORWARD -p tcp -m multiport --sports 53,5353 -j ACCEPT
    #$iptables -A FORWARD -p udp -m multiport --sports 53,5353 -j ACCEPT
    #$iptables -A FORWARD -p tcp -m multiport --dports 53,5353 -j ACCEPT
    #$iptables -A FORWARD -p udp -m multiport --dports 53,5353 -j ACCEPT

    # FTP - Protocolo de Transferência de Arquivo
    $iptables -A INPUT -i $inet -p tcp --sport 21 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 21 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 21 -j ACCEPT

    # HTTP - Protocolo de Transferência de Hypertext
    $iptables -A INPUT -i $inet -p tcp -m multiport --sports 80,8080 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp -m multiport --sports 80,8080 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp -m multiport --dports 80,8080 -j ACCEPT

    # HTTPS - Protocolo de Transferência de Hypertext Seguro
    $iptables -A INPUT -i $inet -p tcp --sport 443 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 443 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 443 -j ACCEPT

    # IAPP - Protocolo de Ponto de Acesso
    #$iptables -A INPUT -i $ilan -p udp --sport 2313 -j ACCEPT

    # IPP - Protocolo de Impressão na Internet
    #$iptables -A INPUT -i $ilan -p tcp --dport 631 -j ACCEPT
    #$iptables -A INPUT -i $ilan -p udp -m multiport --dports 138,631 -j ACCEPT

    # IRC - Internet Relay Chat
    #$iptables -A INPUT -i $inet -p tcp --sport 6667 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 6667 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 6667 -j ACCEPT

    # Microsoft-DS - Serviços de Diretório da Microsoft
    #$iptables -A INPUT -i $ilan -p tcp --dport 445 -j ACCEPT
    #$iptables -A INPUT -i $ilan -p tcp -m multiport --sports 139,445 -j ACCEPT

    # MSNMS - Serviço de Mensageiro de Rede da Microsoft
    #$iptables -A INPUT -i $inet -p tcp -m multiport --sports 1863,1900 -j ACCEPT
    #$iptables -A INPUT -i $inet -p udp --sport 1900 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp -m multiport --sports 1863,7001 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p udp --sport 7001 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp -m multiport --dports 1863,7001 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p udp --dport 7001 -j ACCEPT

    # NETBIOS-SSN - Serviço de Sessão NetBIOS
    #$iptables -A INPUT -i $ilan -p udp -m multiport --dports 137,138 -j ACCEPT
    #$iptables -A INPUT -i $ilan -p tcp --dport 139 -j ACCEPT

    # NO-IP - Provedor de DNS Dinâmico
    #$iptables -A INPUT -i $inet -p tcp --sport 8245 -j ACCEPT

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

    # POP3S - Protocolo de Correio Seguro
    #$iptables -A INPUT -i $inet -p tcp --sport 995 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 995 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 995 -j ACCEPT

    # SSDP - Protocolo para Descoberta de Serviços Simples
    #$iptables -A INPUT -i $ilan -p udp --dport 1900 -j ACCEPT

    # SSH - Shell Seguro
    #$iptables -A INPUT -p tcp --sport 22 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 22 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 22 -j ACCEPT

    # SSMTP - Protocolo Simples para Transferência de Correio Seguro
    #$iptables -A INPUT -i $inet -p tcp -m multiport --sports 465,587 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 465 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 465 -j ACCEPT

    # TELNET
    #$iptables -A INPUT -p tcp --sport 23 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 23 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 23 -j ACCEPT

    # VNC - Computação em Rede Virtual
    #$iptables -A INPUT -p tcp --sport 5900 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 5900 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 5900 -j ACCEPT

    # XMPP - Protocolo de Presença e Mensagens Extensiva
    #$iptables -A INPUT -i $inet -p tcp --sport 5222 -j ACCEPT
    #$iptables -A FORWARD -i $inet -p tcp --sport 5222 -j ACCEPT
    #$iptables -A FORWARD -o $inet -p tcp --dport 5222 -j ACCEPT
    
    # LOGs
    $iptables -A INPUT -p tcp -m multiport ! --dports 0:1056 -j DROP
    $iptables -A INPUT -p udp -j DROP
    $iptables -A INPUT -m limit --limit 3/m --limit-burst 3 -j LOG --log-prefix "LOG-FW: "

    $iptables -t mangle -A FORWARD -o $inet -p tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:1536 -j TCPMSS --clamp-mss-to-pmtu
}

do_stop () {
    # Política
    $iptables -P INPUT ACCEPT
    $iptables -P OUTPUT ACCEPT
    $iptables -P FORWARD ACCEPT
}

case "$1" in
    start)
        log_daemon_msg "Starting Firewall iptables"
        do_start
        log_end_msg $?
        ;;
    stop)
        log_daemon_msg "Stopping Firewall iptables"
        do_stop
        log_end_msg $?
        ;;
    reload)
        log_action_begin_msg "Reloading Firewall configuration..."
        echo "Reloading Firewall configuration rules."
        do_start
        log_action_end_msg $?
        ;;
    *)
        log_success_msg "Usage: $0 {start|stop|reload}"
        exit 1
esac

exit 0

Scripts recomendados

Gerador de PPP para USB (Palm OS e Pocket PC)

Unificando arquivos de bloqueio e liberação no squid

Converter CSV para Ldif

Projeto Wine's Faces

Dropando IPs


  

Comentários
[1] Comentário enviado por everlolo em 17/05/2011 - 09:35h

Amigo,

Eu só não entendi qual a função da linha "$INET=ppp0". Em meu servidor, a placa mãe que está no modem é a eth0. É preciso mudar alguma coisa nesta linha?

[2] Comentário enviado por everlolo em 17/05/2011 - 09:58h

Tentei utilizar esse seu firewall e a internet e MSN da estação parou de funcionar. A única coisa que fiz foi mudar a linha "network=192.168.0.0/24" para "network=192.168.1.0/24" e a linha "ilan=eth0" para "ilan=eth1", e tb descomentei os comandos pro squid.

[3] Comentário enviado por removido em 17/05/2011 - 10:50h

Everton, não me lembro se este script está desatualizado, mas tá uma olhada nesse aqui:
http://blog.cesar.augustus.nom.br/instalando-o-firewall-no-linux.html

$INET = adiciona a interface da placa de rede que é usado para conectar a internet.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts