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