quarta-feira, 27 de novembro de 2013

Exemplo de Firewall no Linux



#!/bin/sh

# Variáveis
 # -------------------------------------------------------
 iptables=/sbin/iptables
 IF_EXTERNA=eth0
 IF_INTERNA=eth1


# Ativa módulos
 # -------------------------------------------------------
 /sbin/modprobe iptable_nat
 /sbin/modprobe ip_conntrack
 /sbin/modprobe ip_conntrack_ftp
 /sbin/modprobe ip_nat_ftp
 /sbin/modprobe ipt_LOG
 /sbin/modprobe ipt_REJECT
 /sbin/modprobe ipt_MASQUERADE


# Ativa roteamento no kernel
 # -------------------------------------------------------
 echo "1" > /proc/sys/net/ipv4/ip_forward


# Proteção contra IP spoofing
 # -------------------------------------------------------
 echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter


# Zera regras
 # -------------------------------------------------------
 $iptables -F
 $iptables -X
 $iptables -F -t nat
 $iptables -X -t nat
 $iptables -F -t mangle
 $iptables -X -t mangle


# Determina a política padrão
# -------------------------------------------------------
 $iptables -P INPUT DROP
 $iptables -P OUTPUT DROP
 $iptables -P FORWARD DROP


#################################################
 # Tabela FILTER
 #################################################


# Dropa pacotes TCP indesejáveis
 # -------------------------------------------------------
 $iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j LOG --log-level 6 --log-prefix "FIREWALL: NEW sem syn: "
$iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP


# Dropa pacotes mal formados
 # -------------------------------------------------------
 $iptables -A INPUT -i $IF_EXTERNA -m unclean -j LOG --log-level 6 --log-prefix "FIREWALL: pacote mal formado: "
$iptables -A INPUT -i $IF_EXTERNA -m unclean -j DROP


# Aceita os pacotes que realmente devem entrar
 # -------------------------------------------------------
 $iptables -A INPUT -i ! $IF_EXTERNA -j ACCEPT
 $iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
 $iptables -A OUTPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
 $iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT


# Proteção contra trinoo
# -------------------------------------------------------
 $iptables -N TRINOO
 $iptables -A TRINOO -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trinoo: "
$iptables -A TRINOO -j DROP
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27444 -j TRINOO
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 27665 -j TRINOO
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 31335 -j TRINOO
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 34555 -j TRINOO
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 35555 -j TRINOO


# Proteção contra tronjans
# -------------------------------------------------------
 $iptables -N TROJAN
 $iptables -A TROJAN -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: trojan: "
$iptables -A TROJAN -j DROP
$iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 666 -j TROJAN
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 4000 -j TROJAN
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6000 -j TROJAN
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 6006 -j TROJAN
 $iptables -A INPUT -p TCP -i $IF_EXTERNA --dport 16660 -j TROJAN


# Proteção contra worms
 # -------------------------------------------------------
 $iptables -A FORWARD -p tcp --dport 135 -i $IF_INTERNA -j REJECT


# Proteção contra syn-flood
 # -------------------------------------------------------
 $iptables -A FORWARD -p tcp --syn -m limit --limit 2/s -j ACCEPT


# Proteção contra ping da morte
 # -------------------------------------------------------
 $iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT


# Proteção contra port scanners
 # -------------------------------------------------------
 $iptables -N SCANNER
$iptables -A SCANNER -m limit --limit 15/m -j LOG --log-level 6 --log-prefix "FIREWALL: port scanner: "
$iptables -A SCANNER -j DROP
$iptables -A INPUT -p tcp --tcp-flags ALL FIN,URG,PSH -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL NONE -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL ALL -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL FIN,SYN -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -i $IF_EXTERNA -j SCANNER
$iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -i $IF_EXTERNA -j SCANNER


# Loga tentativa de acesso a determinadas portas
 # -------------------------------------------------------
 $iptables -A INPUT -p tcp --dport 21 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: ftp: "
 $iptables -A INPUT -p tcp --dport 23 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: telnet: "
 $iptables -A INPUT -p tcp --dport 25 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: smtp: "
 $iptables -A INPUT -p tcp --dport 80 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: http: "
 $iptables -A INPUT -p tcp --dport 110 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: pop3: "
 $iptables -A INPUT -p udp --dport 111 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: rpc: "
 $iptables -A INPUT -p tcp --dport 113 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: identd: "
 $iptables -A INPUT -p tcp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
 $iptables -A INPUT -p udp --dport 137:139 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: samba: "
 $iptables -A INPUT -p tcp --dport 161:162 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: snmp: "
 $iptables -A INPUT -p tcp --dport 6667:6668 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: irc: "
 $iptables -A INPUT -p tcp --dport 3128 -i $IF_EXTERNA -j LOG --log-level 6 --log-prefix "FIREWALL: squid: "


# Libera acesso externo a determinadas portas
 # -------------------------------------------------------
 $iptables -A INPUT -p tcp --dport 22 -i $IF_EXTERNA -j ACCEPT


# Libera acesso de smtp para fora apenas para o IP XXX.XXX.XXX.XXX
 # -------------------------------------------------------
 #$iptables -A FORWARD -p tcp -d ! XXX.XXX.XXX.XXX --dport 25 -j LOG --log-level 6 --log-prefix "FIREWALL: SMTP proibido: "
 #$iptables -A FORWARD -p tcp -d ! XXX.XXX.XXX.XXX --dport 25 -j REJECT


#################################################
 # Tabela NAT
 #################################################


# Ativa mascaramento de saída
 # -------------------------------------------------------
 $iptables -A POSTROUTING -t nat -o $IF_EXTERNA -j MASQUERADE


# Proxy transparente
 # -------------------------------------------------------
 #$iptables -t nat -A PREROUTING -i $IF_INTERNA -p tcp --dport 80 -j REDIRECT --to-port 3128
 #$iptables -t nat -A PREROUTING -i $IF_INTERNA -p tcp --dport 8080 -j REDIRECT --to-port 3128


# Redireciona portas para outros servidores
 # -------------------------------------------------------
 #$iptables -t nat -A PREROUTING -d 192.168.200.1 -p tcp --dport 22 -j DNAT --to-destination 10.0.0.1


# Redireciona portas na própria máquina
 # -------------------------------------------------------
 #$iptables -A PREROUTING -t nat -d 192.168.200.1 -p tcp --dport 5922 -j REDIRECT --to-ports 22

Nenhum comentário:

Postar um comentário