Iptables - Liberação de portas no VPS

Iniciado por rafatres, 17 de Março de 2014, 00:03

tópico anterior - próximo tópico

rafatres

Pessoal,
Estou configurando o firewall por meio de iptables no Ubuntu Server 12.04.

root@cancao-efemera:~# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:smtp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssmtp
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:pop3s
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imap2
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:imaps
ACCEPT     udp  --  anywhere             anywhere             udp dpt:http
ACCEPT     udp  --  anywhere             anywhere             udp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp-data
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp
DROP       all  --  anywhere             anywhere            
DROP       tcp  --  anywhere             anywhere             tcpflags: FIN,SYN,RST,PSH,ACK,URG/NONE
DROP       tcp  --  anywhere             anywhere             tcpflags:! FIN,SYN,RST,ACK/SYN state NEW
DROP       tcp  --  anywhere             anywhere             tcpflags: FIN,SYN,RST,PSH,ACK,URG/FIN,SYN,RST,PSH,ACK,URG

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination        

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination        
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp-data
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ftp


As regras do firewall salvas com iptables-save:
# Generated by iptables-save v1.4.12 on Sun Mar 16 22:58:52 2014
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [107:11436]
-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 465 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 995 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 993 -j ACCEPT
-A INPUT -p udp -m udp --dport 80 -j ACCEPT
-A INPUT -p udp -m udp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
-A INPUT -p tcp -m tcp ! --tcp-flags FIN,SYN,RST,ACK SYN -m state --state NEW -j DROP
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG FIN,SYN,RST,PSH,ACK,URG -j DROP
-A OUTPUT -p tcp -m tcp --dport 20 -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -j ACCEPT
COMMIT
# Completed on Sun Mar 16 22:58:52 2014


No entanto, eu envio e-mails por formulários utilizando a função MAIL() do PHP e eles simplesmente não chegam.
O FTP conecta, mas não lista as pastas.
Alguém poderia me ajudar a corrigir isso por favor?
E tem mais alguma regra que eu deva adicionar para aumentar a segurança?
Obrigado!

zekkerj

Citareu envio e-mails por formulários utilizando a função MAIL() do PHP e eles simplesmente não chegam.
Já vi isso acontecer uma vez, e era problema do PHP, que não retornava o código correto p/ o programa.

CitarO FTP conecta, mas não lista as pastas.
FTP Anônimo? Se for anônimo, vc precisa criar um ambiente mínimo para poder listar pastas, pois essa modalidade funciona em "chroot jail".
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

rafatres

zekkerj,
Realmente, parece ser problema da função Mail(). Desativei o firewall e mesmo assim não foi. Vou procurar o suporte correspondente, obrigado.
Quanto ao ftp, quando eu desativo o firewall, ele vai normal. Estou usando o Filezilla e ele faz login, consegue pedir a lista de pastas, mas ela não chega...
Estado: A resolver o endereço de domain.tld
Estado: Conectando xxx.xxx.xxx.xxx:21...
Estado: Conexão estabelecida, esperando mensagem de boas-vindas...
Resposta: 220 ProFTPD 1.3.4a Server (Zpanel FTP Server) [::ffff:107.170.106.59]
Comando: USER xxxxx
Resposta: 331 Password required for xxxx
Comando: PASS ******
Resposta: 230 User xxxx logged in
Comando: SYST
Resposta: 215 UNIX Type: L8
Comando: FEAT
Resposta: 211-Features:
Resposta: LANG en-US.UTF-8;en-US*
Resposta: MDTM
Resposta: MFMT
Resposta: TVFS
Resposta: UTF8
Resposta: MFF modify;UNIX.group;UNIX.mode;
Resposta: MLST modify*;perm*;size*;type*;unique*;UNIX.group*;UNIX.mode*;UNIX.owner*;
Resposta: REST STREAM
Resposta: SIZE
Resposta: 211 End
Comando: OPTS UTF8 ON
Resposta: 200 UTF8 set to on
Estado: Conectado
Estado: Obtendo lista de pastas...
Comando: PWD
Resposta: 257 "/" is the current directory
Comando: TYPE I
Resposta: 200 Type set to I
Comando: PASV
Resposta: 227 Entering Passive Mode (107,170,106,59,211,234).
Comando: MLSD
Erro: A conexão excedeu limite de tempo
Erro: Falha na obtenção da lista de pastas

Não vi algo que me indique que está em modo anônimo. Se quiser usar o anônimo, que configurações devo fazer no iptables?

De resto, meu iptables está OK? Alguma sugestão para melhorar ele, acrescer mais segurança?
Obrigado,

zekkerj

Modo Passivo... tente configurar p/ não usá-lo, diga se resolve o problema.
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

rafatres

Zekkerj,
Desativando o modo passivo funciona. Mas, qual a diferença entre modo passivo e ativo? Li que tem algo a ver com conexão compartilhada, algo assim. Se tiver vantagem, gostaria de ativá-lo, teria como? E como posso liberá-lo no iptables?
Obrigado,

zekkerj

Eu nunca entendi muito bem como funciona o modo passivo do ftp. Mas até onde sei, vc precisa ter algumas configurações especiais no firewall pra que ele funcione; existe inclusive um módulo específico do iptables pra isso (ip_conntrack_ftp), mas eu sempre usei em conjunto com o módulo "state", não com o módulo "ctstate", que eu não conheço.
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

rafatres

Zekkerj,
Entendi... Eu estou usando o "cstate"? (err achei!) E se eu quiser trocar pelo "state", vai dar na mesma?
E como ativo o "ip_conntrack_ftp"?
No mais, tu tens alguma outra sugestão de regras para aumentar a segurança?
Obrigado,

zekkerj

Eu nunca usei esse módulo ctstate, então não sei te dizer qual é a vantagem ou desvantagem que o state vai ter sobre ele.
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

rafatres

Consegui ativar o modo passivo, ativando o módulo: ip_conntrack_ftp
#lsmod | grep conntrack
#module ip_conntrack_ftp

A listagem de pastas funcionou e ao que parece, o FTP está funcionando.
Já que está tudo ok, vou deixar como cstate.
Obrigado pela ajuda, zekkerj!

zekkerj

Uma coisa que vc pode fazer é adicionar a carga desse módulo ao seu script de firewall, ou mesmo a algum script de inicialização do seu sistema.

P.ex., se vc adicionar o nome dele ao arquivo "/etc/modules", ele será pré-carregado durante o boot.
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

rafatres

Zekkerj,
Obrigado pela dica, vou procurar como fazer isso.
Eu estou salvando meu firewall com iptables-save > firewall.rules.
Se eu reiniciar, essas regras serão carregadas? Se não, como posso fazer com que sejam carregadas automaticamente caso o servidor seja reiniciado?
Obrigado,

zekkerj

Eu não costumo usar esse método de salvar pelo iptables-save, mas tudo vai depender de como vc inicializa.
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

rafatres

Como tu costumas fazer, zekkerj?
Por ser VPS, geralmente quando preciso reiniciar dou sudo reboot ou vou no painel de controle do VPS (web) e clico em reboot que vai automático...

zekkerj

Costumo fazer um script com as regras, e adicioná-lo ao diretório /etc/init.d, como um serviço. Também não costumo usar o VPS; até pq eu normalmente uso o (K)ubuntu em máquinas pessoais, muito pouco em servidores. Nos servidores, uso muito o SLES, pois é o que se usa aqui no serviço. Por isso procuro adotar soluções mais neutras, que funcionam em mais de uma distribuição.
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

rafatres

zekkerj,
Obrigado pela dica. O script seria um .sh? Pois criei um firewall.sh que ativa o modprobe que eu preciso e coloca as regras que eu tenho. Só estou tentando ver ainda como coloco no /etc/init.d/, podes me ajudar?
Obrigado,