script firewall.sh

Iniciado por vitorss, 08 de Novembro de 2012, 21:11

tópico anterior - próximo tópico

vitorss

Olá Zekkerj!


Comentei todas as linhas referente ao módulo state e inclui na 3ª linha do script o conteúdo abaixo:

iptables -A FORWARD -p tcp -d $RANG -s 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT


E executei: ./firewall.sh restart, porém, ocorre o seguinte erro:

./firewall.sh: line 143: para: command not found ad argument '0/0'
Try 'iptables -h' 'iptables --help' for more information

Valeu mano!
Abç.
Vitor.

*** Ver script abaixo ***

#!/bin/bash
#Firewall.sh

iniciar(){

iptables -A FORWARD -p tcp -d $RANG -s 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT
IFINT="eth1"
IFEXT="eth0"
DMZ="eth2"
MASCARA="255.255.255.0"
RANG="192.168.100.0/24"
RANGDMZ="192.168.120.0/24"

echo 1 > /proc/sys/net/ipv4/ip_forward

modprobe ip_conntrack_pptp
modprobe ip_nat_pptp
modprobe ip_tables
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
modprobe ip_conntrack
modprobe iptable_nat

echo "Modulos Carregados"

iptables -F
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -F -t nat
iptables -F POSTROUTING -t nat
iptables -F PREROUTING -t nat
iptables -X

echo "Tabela Limpa"

echo "Definindo Politicas de Acesso"

iptables -P FORWARD DROP
iptables -P INPUT ACCEPT

echo "Iniciando Novas Regras"

iptables -t nat -A PREROUTING -p tcp -m tcp --dport 139 -m state --state NEW -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 138 -m state --state NEW -j ACCEPT

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 1723 -j DNAT --to 192.168.100.100
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 389 -j DNAT --to 192.168.100.100
iptables -t nat -A PREROUTING -i eth0 -p gre -j DNAT --to 192.168.100.100

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.100.100
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 5900 -j DNAT --to-destination 192.168.100.203
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 5800 -j DNAT --to-destination 192.168.100.203

iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 10001 -j DNAT --to-destination 192.168.100.251

iptables -t nat -A POSTROUTING -s $RANG -o eth0 -j SNAT --to 178.94.185.14
iptables -t nat -A POSTROUTING -s $RANGDMZ -o eth0 -j SNAT --to 178.94.185.14

iptables -A FORWARD -s $RANG -i eth1 -p tcp --dport 465 -j ACCEPT
iptables -A FORWARD -p tcp -s $RANG -d 0/0 --dport 465 -j ACCEPT
#iptables -A FORWARD -p tcp -d $RANG -s 0/0 --sport 465 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -p tcp -s $RANG -d 0/0 --dport 587 -j ACCEPT
#iptables -A FORWARD -p tcp -d $RANG -s 0/0 --dport 587 -j state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -s $RANG -i eth1 -p tcp --dport 220 -j ACCEPT
iptables -A FORWARD -s $RANG -i eth1 -p udp --dport 220 -j ACCEPT

iptables -A FORWARD -s $RANG -i eth1 -p tcp --dport 3006 -j ACCEPT
iptables -A FORWARD -s $RANG -i eth1 -p udp --dport 3006 -j ACCEPT

iptables -A FORWARD -s $RANG -p tcp --dport 5000 -j ACCEPT
iptables -A FORWARD -s $RANG -p udp --dport 5000 -j ACCEPT

iptables -A FORWARD -p tcp -s $RANG -d 0/0 --dport 443 -j ACCEPT
#iptables -A FORWARD -p tcp -d $RANG -s 0/0 --dport 443 -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A FORWARD -p tcp -s $RANG -d 0/0 --dport 1863 -j ACCEPT
#iptables -A FORWARD -p tcp -d $RANG -s 0/0 --dport 1863 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -p udp -s $RANG -s 0/0 -j ACCEPT
#iptables -A FORWARD -p udp -d $RANG -s 0/0 -m state --state ESTABLISHED, RELATED -j ACCEPT

iptables -A FORWARD -s $RANG -p udp -m udp --dport 21 -j ACCEPT
iptables -A FORWARD -s $RANG -p tcp -m tcp --dport 22 -j ACCEPT

iptables -A FORWARD -s $RANG -p tcp -m tcp --dport 110 -j ACCEPT
iptables -A FORWARD -s $RANG -p tcp -m tcp --dport 25 -j ACCEPT
iptables -A FORWARD -s $RANG -p tcp -m tcp --dport 587 -j ACCEPT

iptables -A FORWARD -s $RANG -p tcp -m tcp --dport 1863 -j ACCEPT
iptables -A FORWARD -s $RANG -i eth1 -p tcp --dport 7001 -j ACCEPT
iptables -A FORWARD -s $RANG -i eth1 -p udp --dport 7001 -j ACCEPT

iptables -A FORWARD -s $RANG -i eth1 -p tcp --dport 5004:65535 -j ACCEPT
iptables -A FORWARD -s $RANG -i eth1 -p udp --dport 5004:65535 -j ACCEPT

iptables -A FORWARD -s $RANG -i eth1 -p tcp --dport 5061 -j ACCEPT
iptables -A FORWARD -s $RANG -i eth1 -p udp --dport 5061 -j ACCEPT
iptables -A FORWARD -d 192.168.100.100 -s www.facebook.com -j DROP
iptables -A INPUT -d 192.168.100.100 -s www.facebook.com -j DROP

iptables -A FORWARD -m mac --mac-source 88:53:2E:57:B0:52 -j ACCEPT
iptables -A FORWARD -m mac --mac-source 00:19:5B:3B:B0:26 -j ACCEPT

iptables -A FORWARD -s 192.168.100.15 -p tcp -j ACCEPT
iptables -A FORWARD -s 192.168.100.15 -p udp -j ACCEPT
iptables -A FORWARD -s 192.168.100.15 -p tcp -j ACCEPT
iptables -A FORWARD -s 192.168.100.15 -p udp -j ACCEPT

iptables -A FORWARD -s 192.168.120.1 -p tcp -j ACCEPT
iptables -A FORWARD -s 192.168.120.1 -p udp -j ACCEPT
iptables -A FORWARD -s 192.168.120.1 -p tcp -j ACCEPT
iptables -A FORWARD -s 192.168.120.1 -p udp -j ACCEPT

iptables -A INPUT -s $RANGDMZ -j ACCEPT
iptables -A FORWARD -s $RANGDMZ -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s $RANG -j ACCEPT

iptables -A INPUT -s 201.0.150.218 -p tcp -j ACCEPT

#iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

echo "Regras Ativas"

}
parar(){
iptables -F
iptables -X
ipatbles -t nat -F
iptables -P FORWARD ACCEPT
ipatbles -P INPUT ACCEPT

echo "Regras Ativas"
}

case "$1" in
"start") iniciar;;
"stop") parar;;
"restart") para; iniciar;;
*) echo "Usar start stop"
esac

vitorss

Olá pessoal!


Zekkerj!


Eu comentei todas as linhas referente ao módulo state e inclui na 3ª linha do script o conteúdo abaixo, cfe o Zekkerj me instruiu:

iptables -A FORWARD -p tcp -d $RANG -s 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT


E executei: ./firewall.sh restart, porém, ocorre o seguinte erro:

./firewall.sh: line 143: para: command not found ad argument '0/0'
Try 'iptables -h' 'iptables --help' for more information


Por favor, alguém pode me ajudar?


Abrç.
Vitor.

zekkerj

CitarNão entendo muito de Scripts.. Mas .sh e #!/bin/bash são coisas diferentes, mesmo que desempenham o mesmo propósito..
Extensão de arquivo, no linux, é cosmético. Vc pode perfeitamente nomear seu script como "script.exe" ou "script.doc" sem alterar o seu funcionamento. Se ele tiver o bit de execução, e iniciar com o shebang correto, tá valendo.

Mudar de "/bin/bash" p/ "/bin/sh" também vai ter pouca ou nenhuma diferença, pois até onde eu lembro, esses arquivos são links simbólicos. No máximo algumas extensões não-padrão do Bash não vão ser ativadas.

O problema do vitorss é no texto do arquivo, na linha 143 ou na linha anterior. Como ele não postou número de linha, fica difícil de encontrar o erro. Eu já olhei várias vezes o post dele e não consegui ver o que está errado.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

zekkerj

vitorss, agora que consegui parar pra ver o seu script. Quando eu pedi que você colocasse a regra antes das outras, era pra colocar como primeira das regras do iptables, não no início absoluto do script. Quando vc colocou essa regra na terceira linha, vc acaba usando a regra sem que a variável de ambiente esteja definida --- o que causa o erro que vc relatou na linha 3.

Outra coisa que eu acho que vc deve fazer, não crie tantas condições pra liberar o retorno de tráfego. Apenas libere o retorno, se está retornando é pq vc já permitiu a saída. Fica mais simples, e quanto mais simples a solução, com o mesmo resultado, melhor ela é.

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


Veja que eu não filtrei TCP nem UDP, não filtrei origem ou destino, não filtrei porta. Está voltando? É um pacote de uma conexão válida? Ou, é uma conexão que foi aberta como parte do comportamento desse aplicativo? Então libera, não precisa ficar testando caso a caso.

Outras dicas que eu posso te passar:

- Quando você não quer filtrar a origem e/ou o destino do pacote, simplesmente não coloque o filtro. "-s 0/0" e "-d 0/0" não precisam ser escritos.

- Quando você quer filtrar o protocolo de transporte ("-p tcp" ou "-p udp"), não é preciso especificar o módulo ("-m tcp" ou "-m udp").

- Se você já está usando filtragem por estados na entrada ("--state ESTABLISHED,RELATED"), vc pode passar a filtrar a saída de forma mais simples, para conexões TCP, usando o flag "--syn" para aceitar/rejeitar pedidos de abertura de conexão:

iptables -A INPUT -p tcp -s $RANG --dport 3128 -j ACCEPT
iptables -A FORWARD -p tcp --syn -m multiport --dport 80,81,82,443,22,23,25,110,143 -j ACCEPT
iptables -A FORWARD -p udp --dport 53 -j ACCEPT

Aqui eu também usei o módulo "multiport" pra juntar várias linhas numa só.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

vitorss

Olá Arthur Bernardes,

Obrigado pela força...

Mas como o Zekkerj postou...

Mudar de "/bin/bash" p/ "/bin/sh" também vai ter pouca ou nenhuma diferença, pois até onde eu lembro, esses arquivos são links simbólicos. No máximo algumas extensões não-padrão do Bash não vão ser ativadas.

Zekkerj,

Estou grato pelas valiosas dicas quanto tornar mais simples a solução. Posteriormente, irei sem dúvida dar uma compactada no script e conto na medida de suas possibilidades, com sua preciosa ajuda.

Portanto, gostaria de mencionar que inclui a linha no início das regras iptables, e não mais ocorreu este erro, porém, ocorre outro, cfe descrito abaixo:


./firewall.sh: 135: ./firewall.sh: para: not found

Obs.: "Está linha no script é a seguinte:

"restart") para; iniciar;;

Por favor, se puder e quando possível, me ajude?


Abrç.
Vitor.

zekkerj

Citar./firewall.sh: 135: ./firewall.sh: para: not found

Obs.: "Está linha no script é a seguinte:

"restart") para; iniciar;;

Por favor, se puder e quando possível, me ajude?

O nome da função é "parar", não "para". ;)
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

vitorss

Zekkerj, meu mano!

Me desculpe!
As muitas regras me fazem delirar... hehehehe...

Grato pela atenção e eficiência.

Abç.
Vitor.

zekkerj

CitarAs muitas regras me fazem delirar... hehehehe...
No começo é assim mesmo.

Depois piora!!! ;D
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D