Este script libera apenas as portas mais comuns para os usuários da rede interna (80, 21, 22, 25, 110, 443, 53 e 3128). O proxy transparente está ativo, redirecionando toda requisição da porta 80 para a 3128. Todos os demais pacotes serão rejeitados!
#!/bin/bash
echo
echo "=========================================="
echo "| :: SETTING IPTABLES'S CONFIGURATION :: |"
echo "=========================================="
### Passo 1: Limpando as regras ###
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
echo "Cleaning all rules .................[ OK ]"
# Definindo a Politica Default das Cadeias
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
echo "Setting default rules ..............[ OK ]"
### Passo 2: Desabilitar o trafego IP entre as placas de rede ###
echo "0" > /proc/sys/net/ipv4/ip_forward
echo "Setting ip_forward: OFF ............[ OK ]"
# Configurando a Protecao anti-spoofing
for spoofing in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo "1" > $spoofing
done
echo "Setting anti-spoofing protection ...[ OK ]"
# Impedimos que um atacante possa maliciosamente alterar alguma rota
echo 0 > /proc/sys/net/ipv4/conf/all/accept_redirects
echo "Setting anti-redirects .............[ OK ]"
# Utilizado em diversos ataques, isso possibilita que o atacante determine o "caminho" que seu
# pacote vai percorrer (roteadores) ate seu destino. Junto com spoof, isso se torna muito perigoso.
echo 0 > /proc/sys/net/ipv4/conf/all/accept_source_route
echo "Setting anti-source_route ..........[ OK ]"
# Protecao contra responses bogus
echo 1 > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
echo "Setting anti-bugus_response ........[ OK ]"
# Protecao contra ataques de syn flood (inicio da conexao TCP). Tenta conter ataques de DoS.
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo "Setting anti-synflood protection ...[ OK ]"
### Passo 3: Carregando os modulos do iptables ###
modprobe ip_tables
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
modprobe ipt_MASQUERADE
echo "Loading iptables's modules .........[ OK ]"
### Passo 4: Agora, vamos definir o que pode passar e o que nao ###
####################
# Cadeia de Entrada
# LOCALHOST - ACEITA TODOS OS PACOTES
iptables -A INPUT -i lo -j ACCEPT
# PORTA 80 - ACEITA PARA A REDE LOCAL
iptables -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT
# PORTA 22 - ACEITA PARA A REDE LOCAL
iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT
# No iptables, temos de dizer quais sockets sao validos em uma conexao
iptables -A INPUT -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Setting rules for INPUT ............[ OK ]"
################################
# Cadeia de Reenvio (FORWARD).
# Primeiro, ativar o mascaramento (nat).
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
echo "Activating IP Mask .................[ OK ]"
# Agora dizemos quem e o que podem acessar externamente
# No iptables, o controle do acesso a rede externa e feito na cadeia "FORWARD"
# COMPUTADOR DO CHEFE - ACEITA TODOS OS PACOTES
iptables -A FORWARD -s 192.168.3.50 -j ACCEPT
# PORTA 3128 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth1 -p tcp --dport 3128 -j ACCEPT
# Redireciona porta 80 para 3128 (squid)
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
# PORTA 53 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth1 -p udp --dport 53 -j ACCEPT
# PORTA 110 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth1 -p tcp --dport 110 -j ACCEPT
# PORTA 25 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth1 -p tcp --dport 25 -j ACCEPT
# PORTA 443 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth1 -p tcp --dport 443 -j ACCEPT
# PORTA 21 - ACEITA PARA A REDE LOCAL
iptables -A FORWARD -i eth1 -p tcp --dport 21 -j ACCEPT
# No iptables, temos de dizer quais sockets sao validos em uma conexao
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Setting rules for FORWARD ..........[ OK ]"
# Finalmente: Habilitando o trafego IP, entre as Interfaces de rede
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "Setting ip_forward: ON .............[ OK ]"
echo "Finished!! Firewall: OK! ...........[ OK ]"
echo "=========================================="
echo
Comentários
[1] Comentário enviado por removido em 22/07/2004 - 11:53h
Corrigindo: Script de firewall que libera apenas as portas mais comuns para a rede. Tem suporte a PROXY transparente.
[7] Comentário enviado por lacierdias em 08/08/2004 - 09:29h
ficou exelente mas não entendi pq vc repetiu a regra dos sockets duas vezes:
No iptables, temos de dizer quais sockets sao validos em uma conexao
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
echo "Setting rules for FORWARD ..........[ OK ]"
[10] Comentário enviado por removido em 20/08/2004 - 10:06h
Olá amigos achei esse script super legal mais no meu slackware esta dando o seguinte erro, o que pode ser :
oot@esquadra:/etc/rc.d# sh rc.firewall
: command not found:
: command not found: echo
==========================================
| :: SETTING IPTABLES'S CONFIGURATION :: |
==========================================
: command not found:
iptables: No chain/target/match by that name
iptables: No chain/target/match by that name
iptables: No chain/target/match by that name
Cleaning all rules .................[ OK ]
: command not found3:
iptables: Bad policy name
iptables: Bad policy name
iptables: Bad policy name
Setting default rules ..............[ OK ]
: command not found9:
: No such file or directory/sys/net/ipv4/ip_forward
Setting ip_forward: OFF ............[ OK ]
: command not found3:
'c.firewall: line 25: syntax error near unexpected token `do
'c.firewall: line 25: `for spoofing in /proc/sys/net/ipv4/conf/*/rp_filter; do
[12] Comentário enviado por removido em 03/09/2004 - 22:02h
Na minha opinião isto não funciona de forma segura:
iptables -A FORWARD -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT
Explicação:
A idéia do "state" é verificar o estado da conexão,certo?
No caso "ESTABLISHED,RELATED" você verifica conexões Estabelecidas e Relacionadas, ou seja, conexões pré-estabelecidas e relatada que são pacotes referentes a pacotes icmp ou ftp por exemplo.
Acho que o erro ocorre quando você coloca a opção NEW que indica conexões Novas.
No caso para verificarmos conexões novas deveríamos fazer uma outra regra.
O que você acha?
Gostaria de ser corrigido caso tenha me equivocado.
Obrigado!
[15] Comentário enviado por removido em 10/09/2004 - 10:48h
Olá Darvin!
Achei interessante o seu comentário sobre o script de firewall, e isso me gerou umas dúvidas! Acho que juntos podemos tentar chegar a solução correta e mais segura para este script.
Vou falar sobre meu ponto de vista... No caso de conexões estabelecidas ou relacionadas, não há problema... são conexões ativas que passaram pelas regras e são permitidas.
Já o estado NEW, no meu ponto de vista, é quando alguma máquina tenta estabelecer uma nova conexão com o servidor, então essa requisição vem com estado "novo"... e logo depois, se for aceita, se tornará "estabelecida".
Acredito que se o estado "NEW" não for permitido, novas conexões não serão aceitas, mantendo apenas as que já estiverem ativas.
[19] Comentário enviado por bonaldo em 29/09/2004 - 12:43h
Caras, depois que coloquei o IPtables pra compartilhar a conexao aqui, não consigo acessar sites FTP externo, por exemplo ftp.unicamp.br , o que pode estar havendo aqui.
Obrigado.
Carlos
[20] Comentário enviado por removido em 29/09/2004 - 23:19h
Carlos... você tem que acessar FTPs usando "passive mode"... senão não vai rolar mesmo! A maioria dos clientes FTP tem essa opção, incluvise o "Internet Explorer"... Veja em Ferramentas > opções da internet > avançado
[21] Comentário enviado por removido em 07/10/2004 - 11:52h
Ola pessoal,
Estou com uma duvida estou usando esse firewall em uma pequena rede que requer a utilização do pcAnyWare para manutenção de máquinas acessados de fora da minha rede. Como eu implemento isso no firewall ?
[26] Comentário enviado por ropessoa em 20/01/2007 - 03:52h
Primeiramente, parabéns pelo script. Muito bem explicado, o que é ótimo para mim que estou tentando entender as regras...
Com relação a abertura de portas, não sei o que fiz anteriormente que mesmo colocando a linha "iptables -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT" na ordem correta, ela não funciona. Não consigo acessar meu roteador através de um computador cliente na rede. Será possivel alguma alteração no Kernel com algum outro script? Pq regra iptables aparentemente não é...
Abraços e obrigado!
[28] Comentário enviado por fbssolucoes em 31/05/2007 - 09:47h
achei interessante a sua regra, pois o chefe pelo jeito está liberado, mas na minha empresa não deu certo o chefe não ficou fora do squid só com aquela regra.
Como que eu devo proceder para o IP do chefe não passar pela porta do squid e sim ficar totalmente liberado?
[32] Comentário enviado por ton.work em 23/08/2010 - 10:06h
sei que faz tempo desde a ultima mensagem mas poderia me dizer aqui onde está o erro ?
==========================================
| :: SETTING IPTABLES'S CONFIGURATION :: |
==========================================
/etc/init.d/firewall: line 9: ip_tables: command not found
/etc/init.d/firewall: line 10: iptables: command not found
/etc/init.d/firewall: line 11: iptables: command not found
Cleaning all rules .................[ OK ]
/etc/init.d/firewall: line 15: iptables: command not found
/etc/init.d/firewall: line 16: iptables: command not found
/etc/init.d/firewall: line 17: iptables: command not found
Setting default rules ..............[ OK ]
Setting ip_forward: OFF ............[ OK ]
Setting anti-spoofing protection ...[ OK ]
Setting anti-redirects .............[ OK ]
Setting anti-source_route ..........[ OK ]
Setting anti-bugus_response ........[ OK ]
Setting anti-synflood protection ...[ OK ]
Loading iptables's modules .........[ OK ]
/etc/init.d/firewall: line 60: iptables: command not found
/etc/init.d/firewall: line 63: iptables: command not found
/etc/init.d/firewall: line 66: iptables: command not found
/etc/init.d/firewall: line 69: iptables: command not found
Setting rules for INPUT ............[ OK ]
/etc/init.d/firewall: line 76: iptables: command not found
/etc/init.d/firewall: line 77: iptables: command not found
Activating IP Mask .................[ OK ]
/etc/init.d/firewall: line 84: iptables: command not found
/etc/init.d/firewall: line 87: iptables: command not found
/etc/init.d/firewall: line 90: iptables: command not found
/etc/init.d/firewall: line 93: iptables: command not found
/etc/init.d/firewall: line 96: iptables: command not found
/etc/init.d/firewall: line 99: iptables: command not found
/etc/init.d/firewall: line 102: iptables: command not found
/etc/init.d/firewall: line 105: iptables: command not found
/etc/init.d/firewall: line 108: iptables: command not found
Setting rules for FORWARD ..........[ OK ]
Setting ip_forward: ON .............[ OK ]
Finished!! Firewall: OK! ...........[ OK ]
==========================================