IPTABLES para permitir ssh, ftp, pop, etc de um endereço IP estático com HTTP / SSL aberto ao público

2

Esta é a minha configuração em / etc / sysconfig / iptables:

#start of my iptables  
# Generated by iptables-save v1.2.11 on Wed May 27 00:31:22 2015  
*mangle
:PREROUTING ACCEPT [130933577:29488298585]  
:INPUT ACCEPT [130933577:29488298585]  
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [171790648:176814024859]  
:POSTROUTING ACCEPT [171789023:176813945079]  
COMMIT
# Completed on Wed May 27 00:31:22 2015  
# Generated by iptables-save v1.2.11 on Wed May 27 00:31:22 2015  
*filter  
:INPUT ACCEPT [130907005:29486700773]  
:FORWARD ACCEPT [0:0]  
:OUTPUT ACCEPT [171789023:176813945079]  
-A INPUT -s 117.21.191.0/255.255.255.0 -j DROP  
-A INPUT -s 106.0.210.78 -j DROP  
-A INPUT -s 58.218.0.0/255.255.0.0 -j DROP  
-A INPUT -s 117.3.215.251 -j DROP  
-A INPUT -s 119.97.146.0/255.255.255.0 -j DROP  
-A INPUT -s 203.185.69.45 -j DROP  
-A INPUT -s 58.18.172.0/255.255.255.0 -j DROP  
-A OUTPUT -p tcp -m tcp --dport 6660:6669 -j DROP  
-A INPUT -p tcp -s my_static_ip --dport 22 -j ACCEPT  
-A INPUT -p tcp -s my_static_ip --dport 21 -j ACCEPT  
-A INPUT -p tcp -s my_static_ip --dport 110 -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT  
-A INPUT -p tcp -m tcp --dport 443 -m state --state NEW,ESTABLISHED -j  ACCEPT  
-A INPUT -p tcp ! -s my_static_ip -j DROP  
COMMIT  
# Completed on Wed May 27 00:31:22 2015  
# Generated by iptables-save v1.2.11 on Wed May 27 00:31:22 2015  
*nat  
:PREROUTING ACCEPT [8063847:452240147]  
:POSTROUTING ACCEPT [3324733:239203840]  
:OUTPUT ACCEPT [3324733:239203840]  
COMMIT  
# Completed on Wed May 27 00:31:22 2015  
# end of my iptables  

my_static_ip é o endereço IP que eu uso para conectar ao servidor linux (digamos 100.10.10.10).

Basicamente eu queria permitir que apenas um meu ip se conectasse ao meu servidor para usar ssh, ftp, receber e enviar e-mail etc etc pois havia muitos IPs e bots abusivos que tentavam acessar ssh, ftp, pop, etc. e SSL deve ser permitido para todos no meu servidor.

Com a configuração acima, tudo está bem, exceto que não posso receber nem enviar e-mails. Você poderia me dizer o que eu fiz de errado?

Agradeço antecipadamente por sua ajuda.

    
por SHIBU 01.06.2015 / 08:02

2 respostas

1

O transporte de e-mail normalmente usa a porta 25 (SMTP), 465 (SMTP sobre SSL) e / ou 587 (Envio). A única porta de 'email' que eu posso ver na sua configuração é 110 (POP3) que é um cliente para o protocolo mailserver para ler emails no seu cliente de email favorito mas não é usado para receber ou enviar emails de / para o seu servidor. p>

Se você deseja receber e-mails para seu servidor, é necessário permitir as portas acima do lado externo e, se quiser enviar e-mails de seu cliente por meio de seu servidor, precisará permitir essas portas a partir de seu endereço estático. / p>     

por 01.06.2015 / 09:35
1

Primeiro, uma observação geral sobre boas práticas:

Uma maneira mais agradável de fazer isso é criar outra cadeia e redirecionar o filtro para o seu ip:

-A INPUT -p tcp -s my_static_ip -j MYIP

e, em seguida, coloque todos os outros filtros na cadeia MYIP . Você também não precisa da cláusula de negação ! -s my_static_ip , depois que você redireciona seu ip para outra cadeia, então a próxima linha pode simplesmente deletar todo o resto com

-A INPUT -p tcp -j DROP

sshguard ou um filtro semelhante também é uma boa ideia para bloquear os usuários sem restringir completamente o acesso a ssh , exceto um endereço.

Se você confia em my_static_ip , pode deixá-lo passar completamente.

Para o email, você precisará descobrir quais protocolos você usa. Você abriu a porta 110 (POP não criptografado), mas provavelmente precisa de SMTP e / ou IMAP.

Isso me leva ao meu próximo comentário: você não teria visto nenhum problema, se aceitasse todas as conexões ESTABLISHED de qualquer maneira (não apenas http (s)). Como você é aquele que inicia a conexão com o servidor de e-mail (verificando se há um novo e-mail ou enviando-o), o servidor de e-mail não entrará em contato sozinho, apenas servirá o que você solicitou. Então, se você permitir que todos ESTABELECIDOS, isso é coberto. Muitos aplicativos, não apenas clientes de email, usam vários protocolos para recuperar seu conteúdo, e todos eles quebram em sua configuração atual. É só usar

-A INPUT -p tcp -m tcp -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT  

e você cobriu todos os casos sem comprometer a segurança. Novas conexões de entrada serão descartadas, mas se a comunicação vier do seu lado, ela será liberada.

EDITAR:

Minha sugestão, mas eu não testei isso.

*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:TCP - [0:0]
:UDP - [0:0]
:MYIP - [0:0]
##:sshguard - [0:0]
#accept established connections immediately
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#drop all invalid packets
-A INPUT -m conntrack --ctstate INVALID -j DROP
#accept localhost (web interfaces and such)
-A INPUT -i lo -j ACCEPT
#pings and such
-A INPUT -p icmp -j ACCEPT
#special treatment of your ip
#whatever MYIP chain doesn't accept is still subjected to all the following
#rules - because of the dash in the :MYIP - line above.
#if you really trust MYIP, you can just use ACCEPT
-A INPUT -s my_static_ip -j MYIP
#split into individual chains for TCP and UDP packets, handle them separately
#in case you want to add specific rules for UDP and TCP things (like the http(s) acceptance below)
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m conntrack --ctstate NEW -j TCP
-A INPUT -p udp -m conntrack --ctstate NEW -j UDP
#reasonable defaults for dropping things
-A INPUT -p udp -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp -j REJECT --reject-with tcp-reset
-A INPUT -j REJECT --reject-with icmp-proto-unreachable
#if you have a web server, allow http(s):
-A TCP -p tcp -m tcp --dport 80 -j ACCEPT
-A TCP -p tcp -m tcp --dport 443 -j ACCEPT
#dropping these outbound ports?
-A OUTPUT -p tcp -m tcp --dport 6660:6669 -j DROP
#it's nice to let DNS through
-A UDP -p udp -m udp --dport 53 -j ACCEPT

#what to accept in your ip chain
#you don't even need mail ports here, because their requests don't come from outside
-A MYIP -p tcp --dport 22 -j ACCEPT
-A MYIP -p tcp --dport 21 -j ACCEPT

#alternative: install sshguard and uncomment these lines (and the chain definition in the header)
##-A TCP -p tcp -m tcp --dport 22 -j sshguard
##-A TCP -p tcp -m tcp --dport 22 -j ACCEPT
COMMIT
    
por 01.06.2015 / 09:36