Sobre este documento
Como criar um firewall e como iniciar em diversas distribuições,
original em formato texto com marcações para conversão em HTML, processo
automatizado com scripts e txt2tags.
Resumo de comandos e regras de iptables mais utilizados, (na minha opinião e como eu uso, copiar e colar).
Dificilmente os comandos e dicas atenderão suas necessidades, muitos nem
são compativeis com sua instalação ou nem servem para seu uso, tente
adaptar ao seu ambiente, use como fonte de consulta e referencia.
Todas as dicas e exemplos neste tutorial, considera a instalação default
da distribuição, nada de compilar kernel, instalar patch ou
modificações no kernel.
Também não considera o uso de firewall da própria distro, as referencias
a ele são para desativar ou usar em substituição ao indicado neste
howto.
- Considere que firewall não são somente regras de Iptables, veja algumas dicas em;
-
- http://www.zago.eti.br/firewall/firewall.txt
-
Considere que não existe um firewall padrão, são muitas possibilidades,
cada rede tem suas particularidades, neste documento tem algumas regras e
dicas para entender o principio de como funciona, não use como
firewall, use somente como script de referencia para consulta ou modelo
inicial, implemente suas regras especificas, pesquise sobre o assunto,
neste diretório tem muitos modelos e indicações nas mensagens da
Linux-br.
Testar firewall
- Teste o seu firewall nestes sites:
-
- http://scan.sygatetech.com/
-
- Direto na página de testes das portas
-
- http://scan.sygatetech.com/stealthscan.html
-
- http://www.auditmypc.com/
-
- https://grc.com/x/ne.dll?bh0bkyd2
-
Navegue nos sites acima, tem diversas opções de testes, verifique no
resultado, quais portas estão abertas, quando aparece portas que não
devem ser acessadas via internet neste servidor, estas portas tem que
ser fechadas, edite o teu scrip de firewall e acrescente mais uma regra
especifica para fechar a porta, ou parar o serviço, volte ao site e
faça novo teste.
Configure de forma que sejam listadas somente as portas dos serviços que
voce disponibilizou para acesso via internet, porta 80 para servidor
web, porta 22 para ssh e assim por diante.
Tudo que não pode ter acesso de fora deve ser fechado, fechar a porta,
ou melhor, deverá aparecer nos testes acima como fechadas ou não
listadas.
Pode acessar de qualquer estação da rede, o teste de volta sempre é feito no micro que está de cara para internet.
Tem muitas dicas nas mensagens deste documento e outros arquivos deste
diretório com FAQ especificos sobre port scanner, firewall etc..
Firewall com proxy na mesma maquina e outras regras
- Dicas e exemplos com o modelo;
-
- http://www.zago.eti.br/firewall/fireaula.sh
-
Ambiente, micro com duas placas de rede configuradas, uma eth? ligada ao
modem ADSL, conexão configurada e com acesso normal à internet, outra
eth? ligado ao HUB com comunicação normal com as maquinas da rede
interna, responde ao ping ou outro serviço como ssh.
Precisa conferir e fazer alguns ajustes;
Placas de rede, observe estas variaveis no inicio do script
EXTERNA=eth0
INTERNA=eth1
eth1 = placa de rede INTERNA (rede local) - ligada ao HUB e conectada com as maquinas da rede interna
eth0 = placa de rede EXTERNA (internet) - ligada ao modem ADSL ou router
ou outro equipamento que sai ou entra da internet, conectada com o
mundo (internet)
Ajuste o device nestas variaveis conforme sua rede, lembre que conexões com pppoe utiliza o device ppp0 em lugar de eth?
Utilizar variáveis é opcional, facilta muito na administração, troca ou copia para outra instalação.
Comente as linhas que não utiliza, veja neste documento mais detalhes nos tópicos especificos sobre cada serviço.
Neste script as linhas de comando iniciam com "$iptables", este sinal
($) no inicio da linha indique está usando uma variável de nome
"iptables", nesta variável indica o caminho completo do iptables.
iptables=/usr/sbin/iptables
Pode tentar sem indicação do caminho, basta remover o sinal ($) de todas
as linhas que iniciam com ($iptables) ou colocar o caminho para o seu
iptables, o comando which retorna o caminho completo
which iptables
Pegue o resultado e compare se o local é o mesmo do script, sendo
diferente precisa alterar na criação da variável iptables, pode tentar
criar a variável com.
iptables=$(which iptables)
Resumindo, teste todos os exemplos abaixo que um deles deve funcionar.
iptables
/usr/sbin/iptables
ou criar e usar a variável iptables apontando para iptables em sua instalação.
iptables=/usr/sbin/iptables
$iptables
carregando modulos
A maioria das distros utiliza modulos, se preferir pode compilar o
kernel com este recurso, considere que trabalhar com modulos é mais
prático, pode iniciar ou parar somente o serviço (modulo), pode até
compilar o modulo ou atualizar sem alterar nada no kernel e portanto sem
reiniciar a maquina.
em breve farei algumas anotações sobre a finalidade de cada modulo.
##### carregar modulos
# fazer NAT, de forma geral compartilha a interenet com forward
/sbin/modprobe iptable_nat
# resolve os problemas de FTP, sempre que tiver problemas com acesso a sites de FTP,
#lentidão, problemas de login ou acesso, tente carregar estes modulos relacionados a FTP.
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_nat_ftp
# utlizado nas opções que geram log.
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
Cuidado com esta opção zera regras, tem outra regra logo abaixo que
mantem as conexões existentes, quando fizer qualquer alteração nas
regras, precisa executar o script para carregar as novas regras, as
regras abaixo removem as anteriores mas mantem as conexões existentes.
##### Zera regras
$iptables -F
$iptables -X
$iptables -F -t nat
$iptables -X -t nat
$iptables -F -t mangle
$iptables -X -t mangle
$iptables -P INPUT DROP
$iptables -P OUTPUT DROP
$iptables -P FORWARD DROP
Coloque após as regras abaixo, suas regras de bloqueio, log e outros controles, em seguida as regras de redirecionamento....
##### Filtros - DROP nos pacotes TCP indesejaveis
$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
##### ACCEPT (libera) pacotes de retorno da internet
$iptables -A INPUT -i ! $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
Exemplos e dicas sobre as regras de Iptables
Conectividade Social excluir do proxy
Este um serviço da Caixa Economica, geralmente utilizado por
funcionarios do departamento pessoal das empresas, utiliza o navegador
mas não pode passar pelo proxy, inventaram uma conexão segura na porta
80, a solução que encontrei foi excluir o IP da Caixa do proxy, funciona
com esta regra.
##### Liberar Conectividade Social para todos
# liberando acesso a toda a rede 200.201 e pode liberar sites alem da CAIXA.
$iptables -t nat -A PREROUTING -p tcp -d 200.201.0.0/16 -j ACCEPT
$iptables -A FORWARD -p tcp -d 200.201.0.0/16 -j ACCEPT
- Tem mais dicas e detalhes sobre isto em;
-
- http://www.zago.eti.br/squid/conectividade-social.html
-
Samba - fechando as portas para o mundo
Precisa liberar as portas do netbios 136 a 139, libere somente para sua rede interna.
# Fechando as portas do samba o perigo mora aqui caso fique de cara para a internet.
$iptables -A INPUT -p tcp -i $EXTERNA --syn --dport 139 -j DROP
$iptables -A INPUT -p tcp -i $EXTERNA --syn --dport 138 -j DROP
$iptables -A INPUT -p tcp -i $EXTERNA --syn --dport 137 -j DROP
Por questão de segurança não se deve rodar Samba junto com firewall, não
tem incompatibilidades nem conflito entre estes serviços, podem rodar
na mesma maquina, considere que Samba não deve dar as caras na internet,
um eventual incidente nesta maquina pode comprometer seus dados e
informações, quando rodar Samba na mesma maquina, feche as portas 137,
138 e 139, tem que fechar somente para acessos da internet, em maquinas
que não roda Samba pode remover as linhas acima.
Use este exemplo de regra para fechar a porta de outros serviços rodando
na maquina, principalmente quando não devem ouvir nem atender
requisições vindo da internet
Outra opção, quem já fechou tudo precisa abrir as portas para acesso das maquinas da rede interna, alguns exemplos.
$iptables -I INPUT -p tcp -s 192.168.1.0/24 -d 192.168.1.254 --dport 138,139 -j ACCEPT
Onde 192.168.1.0 é sua rede e 192.168.1.254 seu servidor Samba.
Permitir de qualquer origem, depende de outras regras do firewall negando acesso via internet.
$iptables -A INPUT -p tcp --destination-port 139 -j ACCEPT
MAC ADRESS - controle pelo numero da placa de rede
Regras de IPtables pelo numero da placa de rede MAC ADRESS, o exemplo
abaixo nega qualquer acesso com origem na placa de rede identificada com
o MAC (00:E0:7D:E3:5F:1E), neste caso não importa o IP da maquina, a
ordem da regra no firewall é muito importante, aplicar antes do
redirecionado do proxy e não ter regra anterior liberando o acesso.
Para testar, troque o MAC do exemplo abaixo pelo de uma maquina da sua
rede, depois de rodar o script do firewall a maquina não acessa mais
nada na internet, o NAT está negado.
$iptables -t nat -A PREROUTING -i $INTERNA -m mac --mac-source 00:E0:7D:E3:5F:1E -j DROP
Com esta regra, qualquer pacote proveniente deste MAC serão descartados,
não permine NAT e não navega, não conecta por ssh nem outro meio.
Inverter a regra para liberar, troque DROP por ACCEPT
Outros exemplos.
Negar somente para portas 80 e 3128
$iptables -A INPUT -p tcp -m multiport --dport 80,3128 -m mac --mac-source 00:E0:7D:E3:5F:1E -j DROP
Permitir conexão via ssh
$iptables -A INPUT -m mac --mac-source 00:E0:7D:E3:5F:1E -p tcp --dport 22 -j ACCEPT
# teste com mac da m7mia para liberar somente ssh (porta 22)
$iptables -A INPUT -p tcp -m multiport --dport 22 -m mac --mac-source 00:40:F4:5B:9E:A7 -j ACCEPT
$iptables -A INPUT -m mac --mac-source 00:40:F4:5B:9E:A7 -p tcp --dport 22 -j ACCEPT
$iptables -t nat -A PREROUTING -p tcp -m multiport --dport 22 -m mac --mac-source 00:40:F4:5B:9E:A7 -j ACCEPT
$iptables -t nat -A PREROUTING -i $INTERNA -m mac --mac-source 00:40:F4:5B:9E:A7 -j DROP
- Tem mais exemplos nas mensagens do FAQ.
-
- http://www.zago.eti.br/firewall/iptables-mac.txt
-
porta 25 e 110 e-mail
Regras de firewal para quem trabalha com tudo fechado e libera somente o
necessário, neste exemplo de firewall, para fechar tudo e abrir somente
o necessário, deve comentar as linhas.
$iptables -A POSTROUTING -t nat -o $EXTERNA -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
com estas linhas acima comentadas não é possível navegar nem enviar ou
receber e-mail, para liberar a navegação tem exemplos neste tutorial ,
pode liberar pelo firewall ou pelo proxy (squid) quando redirecionado.
Quanto ao envio e recebimento de e-mail segue alguns exemplos, liberação
para todos, somente para determinado dominio, somente por maquina da
rede, combinando IP interno com dominio e etc. Veja os comentarios para
cada regra.
# Estas regras abaixo permite que todos os smtp e pop funcionan, precisa comentar estas linhas para refinar o controle por dominio ou por maquina, sem estas regras a controle passa a valer as demais regras do firewall no controle da porta 25 e 110
iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -d 0/0 -p tcp --dport 110 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.1.1/24 -d 0/0 -p tcp --dport 25 -j MASQUERADE
Liberando smtp somente para uma maquina e um destino (provedor)
$iptables -t nat -A POSTROUTING -s 192.168.1.211/32 -p tcp --dport 25,110 -d smtp.bol.com.br -j MASQUERADE
ou
$iptables -t nat -A POSTROUTING -s 192.168.1.211/32 -p tcp --dport 25 -d smtp.bol.com.br -j MASQUERADE
#$iptables -t nat -A POSTROUTING -s 192.168.1.211/32 -p tcp --dport 110 -d pop.sao.terra.com.br -j MASQUERADE
Squid - proxy - redirecionamento
A regra que redireciona o trafego da porta 80 para 3128 Squid, tem que
ficar antes da regra que faz NAT para forçar o uso do proxy, assim
estações com navegador configurado para usar proxy cai nas regras do
proxy, se tentar sem proxy não navega.
No script fireaula.sh tem estas regras sobre Squid.
##### Squid - proxy
#utilize somente uma das opções abaixo, comente as demais
# redireciona o trafego da porta 80 para 3128, execeto a estacao
# com IP 192.168.1.6
#$iptables -t nat -A PREROUTING -i $INTERNA -s \! 192.168.1.6 -p tcp -m multiport --dport 80,443 -j REDIRECT --to-ports 3128
# redireciona o trafego da prota 80 para 3128 (squid)
$iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128
Tem duas regras, ambas se aplicam quando roda o Squid na mesma maquina firewall, a segunda está habilitada;
$iptables -t nat -A PREROUTING -p tcp -m multiport -s 192.168.1.0/24 --dport 80,443 -j REDIRECT --to-ports 3128
esta regra redireciona todo o trafego da porta 80 e 443 para a porta
3128, com isto as estações só navegam pelas regras do squid, na estação
configure o navegador para usar proxy na porta 3128 e IP do servidor
proxy.
A primeira regra que está comentada;
#$iptables -t nat -A PREROUTING -i $INTERNA -s \! 192.168.1.6 -p tcp -m multiport --dport 80,443 -j REDIRECT --to-ports 3128
esta regra também faz o redirecionamento como na anterior, com exclusão
de uma maquina do proxy, neste exemplo a estação com IP 192.168.1.6 vai
navegar sem passar pelo proxy, este recurso ajuda muito na solução de
problemas, quando tem problemas com acesso a sites especificos, tem
sites que não pode acessar via proxy, nestes casos para acessar sem
passar pelo proxy, troque o IP citado na regra pelo IP da estação que
vai usar no teste, use o navegador sem proxy e tente acesso, observe que
a linha eatá comentada, deve usar somente uma das regras, quando
habilitar a primeira comente a segunda e vice versa.
Considere utilizar instalações de testes, pode montar outro servidor
proxy na rede, servidor de e-mail interno ou outro serviço, para excluir
esta maquina de testes do proxy, utilize a exclusão acima, quando for
mais de uma maquina utilize o exemplo abaixo.
Liberar IP (estações) com acesso por fora do proxy
Excluir mais de uma estação do proxy, no firewall tem este exemplo para liberar por portas, multiplas portas.
##### excluir estacoes do proxy, passa direto pelo NAT
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 80,443 -j ACCEPT
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.53/32 -p tcp -m multiport --dport 80,443 -j ACCEPT
Utilize uma regra para cada IP, neste exemplo acima as estações com IP
192.168.1.37 e 53 não precisa configurar proxy no navegador e acessam
internet por fora do proxy, estas regras obrigatoriamente tem que ser
adicionadas no firewall, antes da regra do redireionamento do Squid,
observe no Firewall a posição delas em relação a regra do
redirecionamento para a porta 3128.
Outro exemplo de formato da regra. liberar a porta 80 para determinado IP de origem
$iptables -t nat -A PREROUTING -s 192.168.1.53 -p tcp -i $INTERNA --dport 80 -j ACCEPT
Outro exemplo de formato da regra para liberar acesso a tudo
# micro zago 192.168.1.53
$iptables -t nat -A PREROUTING -s 192.168.1.53 -d 0.0.0.0/0 -j ACCEPT
Lembrando que Squid não é firewall, é servidor proxy e controla somente o
que passa pela porta 80, não pode redirecionar outras portas, portanto
serviços como cliente de e-mail nas estações não passarão pelo controle
do Squid nem serão afetados pelas regras acima, sobre este e outros
serviços veja o tópico sobre NAT.
Outro exemplo para liberar um IP da rede , liberar todas as portas, algo como tirar um IP do firewall e passar direto
# em tetes
# Regra para fazer NAT de tudo. e para todos
#$iptables -A POSTROUTING -t nat -o $IF_EXTERNA -j MASQUERADE
# Regra para fazer SNAT para destino especifico
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o $EXTERNA -j SNAT --to 200.200.200.200/24
# Regra para liberar um IP interno, fazer nat de tudo, de todas as portas, neste exemplo libera o IP interno 192.168.1.218
$iptables -t nat -A PREROUTING -i $IF_INTERNA -s 192.168.1.218/32 -j ACCEPT
Controle via iptables e por estação (IP da estação), tem mais exemplos
em outros tópicos deste tutorial, neste tem algumas dicas sobre controle
por IP de origem para acesso externo passando pela porta 25, 110, 80 e
443, tente modificar ou adaptar ao seu ambiente, altere IP indicado nas
regras abaixo para o da estação que deseja testar regra.
Modificando o exemplo com NAT para liberar estação do proxy, temos esta
regra no firewall liberando estação para navegar sem passar pelo proxy.
##### excluir estacoes do proxy, passa direto pelo NAT
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 80,443 -j ACCEPT
Proibir porta 80 e 443 na estação especifica. Faça copia da regra acima e
modifique a regra para rejeitar, proibir determinado IP de navegar,
basta alterar na copia da regra, IP e de ACCEPT por DROP.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 80,443 -j DROP
Impedir ou liberar acesso a e-mail via clientes de e-mail local (na estação), fechar as portas 25 e 110, como neste exemplo.
Esta regra impede cliente de e-mail acessar servidores externos (provedores), fechar portas 25 e 110.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 25,110 -j DROP
Libera cliente de e-mail para acessar servidores externos (provedores), liberar porta 25 e 110.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 25,110 -j ACCEPT
Permitir estação usar cliente de e-mail na maquina local e proíbir a navegação.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 80,443 -j DROP
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 25,110 -j ACCEPT
Invertendo a ordem, permitir navegação e proíbir cliente de e-mail na estação.
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 80,443 -j ACCEPT
$iptables -t nat -A PREROUTING -i $INTERNA -s 192.168.1.37/32 -p tcp -m multiport --dport 25,110 -j DROP
Com estes exemplos fica fácil adpatar a regra para outras portas e
serviços, basta copiar a regra, alterar o IP e porta. Lembre de
acrescentar no firewall antes da regra que lebera ou bloqueia geral, em
firewall que redireciona a porta 80 as regras de iptables sobre a porta
80 tem que ser acrescentada antes da regra do redirecionamento.
NAT e forward - compartilhar internet
No firewall, depois da regra do Squid tem estas duas regras;
## NAT para os demais serviços que trabalham em outras portas,
# como exemplo, libera o acesso a cliente de e-mail e ssh
$iptables -A POSTROUTING -t nat -o $EXTERNA -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward
Obrigatoriamente tem que ficar depois da regra do proxy, servem para
compartilhar internet para os demais protocolos, como exemplo, liberar a
porta 25 e 110 utilizadas pelos clientes e-mail que não acessam a net
pela porta 80, portanto não passam pelo proxy, estas regras liberam
tudo, compartilhamento total, como antes delas tem o redirecionamento do
proxy, tudo que usar a porta 80 cai no proxy e fica por lá, as demais
portas não são redirecionadas, portanto cai nesta regra que faz NAT.
Qualquer bloqueio deve ser acrescentando antes desta regra, ou se
preferir, crie regras especificas de nat por protocolo e estação.
Redirecionamento de conexões recebidas - entrada
São regras que repassam a conexão para outra maquina da rede, considere
um ambiente com uma maquina conectada na internet via ADSL, vamos
considerar que esta maquina compartilha a internet para as demais
maquinas da rede, vamos chamar esta maquina de firewall, neste tipo de
conexão somente ela tem IP roteável na internet, algo do tipo
200.200.200.200, todas as conexões vindo do mundo tem que apontar para o
IP deste micro, atraz dele tem diversos micros, servidores e estações
trabalhando com IP reservado, como exemplo da classe 192.168.1.0, não é
possível utilizar esta classe de IP nas conexões via internet, IP desta
classe são descartados no primeiro roteador.
Atraz deste firewall pode ter servidores ou estações rodando serviços
como; ssh, webmin, VNC ou outro qualquer, no firewall é possível liberar
(repassar) conexões vindo da internet para se conectar direto com estas
maquinas.
Considere um firewall rodando na maquina com IP fixo 200.200.200.200,
atraz dele uma estação usando IP 192.168.1.144, regras de iptables podem
redirecionar conexão vindo da internet direto para esta maquina.
Mesmo sem rodar o serviço no firewall, as conexões vindo do mundo
(internet) tem que apontar para o IP do firewall, quando atendida as
regras de redirecionamento, a conexão é rapassada para outra maquina da
rede com IP reservado informado na regra, (estação atraz do firewall),
na origem da conexão precisa somente do IP do firewall, também a porta
quando for o caso, as regras de firewall faz o resto.
Resumindo;
Identifique quais portas esse serviço utiliza, IP que do seu
(servidor) que é o mesmo IP de internet, se possivel o IP remoto
(cliente) quando quiser liberar acesso somente a um IP externo, a regra
tem este formato:
Liberar somente para conexões vindo de determinado IP, neste exemplo o IP remoto (-s 200.204.198.164) mais a porta informada
iptables -t nat -A PREROUTING -p (protocolo tcp ou udp) -s (IP remoto) --dport (porta solicitada) -i (interface externa) -j DNAT --to (IP servidor interno):(porta no server interno)
##### Redirecionar ssh na porta 2222
$iptables -t nat -A PREROUTING -p tcp -s 200.204.198.164 --dport 2222 -i $EXTERNA -j DNAT --to 192.168.1.144:22
Outra forma; rediciona somente pela porta, não importa o IP de origem
iptables -t nat -A PREROUTING -p tcp(ou udp) -d (IP do firewall local, servidor de internet) --dport (porta solicitada) -j DNAT --to (IP servidor interno):(porta no server interno)
Lembrando que a ordem é importante, se conflitar regras, a primeira que antender será atendida e as demais ignoradas.
Nos tópicos a seguir tem mais exemplos sobre SSH e VNC, o principio se
aplica a outros protocolos e portas, pode modificar estas regras para
webmin, banco de dados e etc....
SSH - fechado para o mundo e aberto para rede interna
SSH é muito útil e prático para administrar maquinas remotas, por ser
muito usado, tem muitos scripts que tentam fazer acesso forçado via ssh,
alguns tem uma lista de login e senha e ficam tentando, existem muitas
tecnicas e maneiras, voce tem que se preocupar com isto e se defender,
ssh tem um alto nível de segurança e configuração, mas a configuração é
feita por você.
No modelo de firewall tem estas regras;
##### Libera acesso externo para ssh e servidor web
#$iptables -A INPUT -p tcp --dport 80 -i $EXTERNA -j ACCEPT
#$iptables -A INPUT -p tcp --dport 80 -i $INTERNA -j ACCEPT
#$iptables -A INPUT -p tcp --dport 22 -i $EXTERNA -j ACCEPT
$iptables -A INPUT -p tcp --dport 22 -i $INTERNA -j ACCEPT
A porta 80 é do servidor de páginas web (apache), a porta 22 é do ssh.
São duas regras, uma especifica para liberar acesso pela placa de rede
interna $INTERNA e outra especifica para a placa de rede da internet
$EXTERNA, como as regras no inicio do firewall fecha tudo, precisa
implementar regra liberando acesso, neste exemplo tem regras especificas
por placa de rede para facilitar a configuração.
No exemplo acima está aberto somente para acesso pelas maquinas da rede
interna e proibindo o acesso externo, conexões da internet, está
comentada a linha com a variável $INTERNA, caso queira liberar para o
mundo, remova o comentário da linha com variável $EXTERNA.
Observe que neste firewall fecha tudo e depois vai abrindo as portas, em
firewall aberto onde vai fechando as portas, a regra muda de ACCEPT
para DROP, algo neste formato;
#$iptables -A INPUT -p tcp --dport 22 -i $EXTERNA -j DROP
Lembre que ssh tem muitas possibilidades de configuração, este é somente
um exemplo de lidar com as portas, caso permita conexões vindo da
internet, pesquise sobre segurança e configuração dele, neste FAQ tem um
diretório especifico sobre ssh.
SSH - Redirecionar entrada para estações da rede
Redirecionando os pedidos que chegam da net, ou seja o firewall
simplesmente repassa para outra maquina completar a conexão, segue
alguns exemplos com redirecionamento como base no IP de origem ou porta
destino.
No firewall tem esta regra sobre ssh
##### Redirecionar ssh na porta 2222
$iptables -t nat -A PREROUTING -p tcp -s 200.204.198.164 --dport 2222 -i $EXTERNA -j DNAT --to 192.168.1.144:22
Tentando descrever este ambiente, imagine duas empresas, cada uma tem
seu micro rodando firewall e conectado ao modem ADSL, sem restrições de
uso pela operadora quanto as portas descritas aqui, em uma ponta tem IP
200.204.198.164 e na outra ponta IP 200.200.200.200, atraz destas
maquinas tem estações com IP da classe 192.168.1.0, esta regra permite
que estação de uma rede se conecte via ssh com estação atraz da outra
rede.
Exemplo de linha de comando tratada por esta regra (redirecionada). No
console de maquina atraz do IP 200.204.198.164 fazendo NAT
ssh -p 2222 zago@200.200.200.200
Observe que indica a porta (-p 2222) e dispara o comando para o IP do
firewall remoto 200.200.200.200, o redirecionamento para a estação
interna no firewall onde roda a regra acima, (ip 192.168.1.144) ocorre
quando atender as seguintes condições; origem da conexão no IP =
200.204.198.164 e porta destino = 2222.
As demais requisições de ssh serão atendidas pela própria maquina ou outra regra do firewall.
Onde -s (source, origem) IP 200.204.198.164, requisições que chegam
deste IP na placa de rede da internet -i $EXTERNA (-i imput, entrada),
--dport 2222, na porta 2222, observe que tem varias condições, IP de
origem, porta destino, entrada pela placa de rede externa. Quando
atendida todas estas condições o pedido é repassado para outra maquina
da rede (DNAT --to 192.168.1.144:22), a estação da rede interna com ip
192.168.1.144 vai atender o pedido na porta 22, claro que o firewall
dela precisa permitir e também ter o serviço rodando (ouvindo) nesta
porta, neste exemplo o serviço é sshd, servidor do ssh.
Esta regra vale também para FreeNX, ele trabalha sobre conexão ssh,
requer configuração especifica para obter o desktop remoto, algo como
VNC mas com melhor qualidade, velocidade e segurança.
- Sobre ssh e FreeNX, tem mais dicas, exemplos e FAQ em;
-
- http://www.zago.eti.br/ssh/
-
VNC - redirecionamento para estações da rede
Prefiro ssh ou FreeNX, mas quando temos que conectar a estações windows na rede remota, VNC torna uma grande solução.
No firewall tem esta regra sobre VNC
##### VNC
# Redireciona portas na primeira maquina vnc troque o ip conforme a maquina que deseja acessar.
iptables -A FORWARD -i $EXTERNA -p tcp --dport 5800:5900 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $EXTERNA -p udp --dport 5800:5900 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $EXTERNA --dport 5800:5900 -j DNAT --to 192.168.1.144:5800-5900
iptables -t nat -A PREROUTING -p udp -i $EXTERNA --dport 5800:5900 -j DNAT --to 192.168.1.144:5800-5900
#Redirecionar para maquina VNC ouvindo na 5801
iptables -A FORWARD -i $EXTERNA -p tcp --dport 5801:5901 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $EXTERNA -p udp --dport 5801:5901 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i $EXTERNA --dport 5801:5901 -j DNAT --to 192.168.1.144:5801-5901
iptables -t nat -A PREROUTING -p udp -i $EXTERNA --dport 5801:5901 -j DNAT --to 192.168.1.144:5801-5901
#####
Uso do primeiro exemplo é simples, basta instalar o VNCSERVER e rodar,
neste exemplo, redireciona qualquer pedido que chega da internet na
porta 5800, na URL do navegador use o IP:porta, neste formato;
http://200.200.200.200:5800
A regra de firewall se encarrega de redirecionar para a estação e esta
se encarrega atender o pedido e completar a conexão com login e senha.
A segunda opção complica um pouquinho porque permite ter varias maquinas
aceitando conexão via VNC, usa a porta como meio de seleção da maquina
remota, permite multiplas conexões VNC, redireciona para estação interna
coforme a porta indicada na conexão, precisa configurar o VNCserver
para ouvir em outra porta, use 5801 para maquina 1, 5802 para maquina 2 e
assim por diante, a seleção da maquina remota é feita conforme a porta
indicada na URL, entendeu como é simples, quase como uma tabela, 5801
conecta na maquina X, 5802 conecta na Y e assim por diante..., precisa
de uma regra para cada maquina, repita o exemplo acima para cada
maquina, altera a porta e IP, exemplo de uso na URL para conexão com
maquina que está ouvindo na porta 5801.
http://200.200.200.200:5801
Veja também o tópico sobre SSH - redirecionamento, são semelhantes e ajuda na explicação.
- Sobre VNC, tem mais dicas, exemplos e FAQ em;
-
- http://www.zago.eti.br/vnc.txt
-
SUSE 10.1 - executar script no boot
SUSE tem configurador do firewall via Yast, tem seu próprio script de firewall.
Acho mais fácil e prático usar meu script, tem que escolher pelo
firewall do SUSE ou seu script, para usar outro script é preciso
deabilitar o firewall do SUSE.
Desabilitar o firewall nativo do SUSE, entre no yast, pode ser em modo
texto, entre em "segurança e Usuários" -> Firewall, desabilite o
firewall
Aproveite e configure as placas de rede Yast -> "Dispositivos de
Rede" -> Placa de Rede" -> avançar e selecione a placa de rede,
(editar), configure conforme sua rede, com IP dinamico (DHCP) ou com IP
Estático e mascara de rede, IP da mesma classe de rede interna. Não
altere mais nada, não precisa mexer na rota, avançar e OK até fechar o
yast.
Compartilhar conexão - micro com duas placas de rede.
Use um script de IPtables para compartilhar, caso não tenha, como está
navegando, para teste use este script de iptables, as linhas de comando
abaixo inclue o script no boot.local para executar no boot.
cd /etc/rc.d
wget http://www.zago.eti.br/firewall/fireaula.sh
chmod 755 fireaula.sh
./fireaula.sh
rcnetwork restart
echo "/etc/rc.d/fireaula.sh" >> /etc/rc.d/boot.local
echo "rcnetwork restart" >> /etc/rc.d/boot.local
CL10 - executar script no boot
Salve o script no diretório /etc/rc.d/, entre no diretório e baixe com
wget, acesse via navegador para copiar e colar, ou importar direto no
editor "vi", pode salvar em outro local qualquer, lembre de ajustar o
caminho nos comandos abaixo, não pode manipular em instalações DOS/WIN.
com o script no diretório, execute estes comandos como root no console.
chkconfig myfirewall off
echo fireaula.sh >> /etc/rc.d/rc.local
chmod 755 /etc/rc.d/fireaula.sh
sh /etc/rc.d/fireaula.sh
Use seu editor de texto puro para fazer alterações no script, depois de
salvar execute novamente para carregar as alterações, como root no
console execute uma destas opções.
sh /etc/rc.d/fireaula.sh
ou
cd /etc/rc.d/
./fireaula.sh
Fonte:
- Página principal sobre iptables e firewall
-
- http://www.zago.eti.br/A-menu-firewall.html
-
- Página principal deste site (FAQ)
-
- http://www.zago.eti.br/menu.html