Eu tenho um servidor dedicado no qual criei um servidor Ubuntu 22.04.1 LTS com um endereço IP público. Quero bloquear a porta ssh para permitir apenas a passagem de endereços IP específicos.
Tenho 3 endereços IP do trabalho e a rede que configurei no servidor com um intervalo de IP.
Como eu permitiria que apenas esses endereços IP fizessem login no meu servidor?
Encontrei isso em outro post:
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j REJECT
Isso funcionaria se eu executasse para cada endereço IP ou haveria complicações?
Além disso, isso é suficiente? Devo bloquear outras portas? Esta é uma nova instalação com apenas postgresql. Estou tentando aprender mais sobre o Ubuntu e o postgresql, mas não quero que meu servidor seja direcionado.
Obrigado pela sua contribuição!
Responder1
Eu sugiro que você ajuste sua abordagem de foco em porta única para uma postura de 'defesa' completa: IPs da lista de permissões, rejeite todas as outras tentativas de conexão. Isso se aplica a quase todas as portas do seu ambiente - caso contrário, você terá que colocar na lista negratodoIP conhecido que faz a varredura de serviços, então você terá uma lista incrivelmente longa em seu lugar. Os scanners de serviço procuramtodoporta, então você deve adotar uma abordagem de "negação de confiança" em primeiro lugar. Coisas como um servidor web (porta 80, 443 para HTTP/HTTPS podem precisar de acesso mais amplo do que IPs específicos se for um site público) também são verificados, mas podem ser 'protegidos' pelo fortalecimento adequado do servidor web e do conteúdo. No entanto,todosas portas são verificadas por scanners de serviço etodosdispositivos conectados à Internet são submetidos a verificações, portanto, negar tudo para começar é a melhor abordagem.
Como tal, a abordagem mais eficaz para a "negação de confiança" é simplesmente permitir que determinados IPs se conectem à(s) porta(s) e a todos os outros serviços na máquina e, em seguida, rejeitar todas as outras tentativas de conexão. Ao mesmo tempo que permite que o localhost se comunique consigo mesmo, o que é bom.
Comece protegendo tudo com uma lista de permissões antes de abrir outras portas. Se você precisar de mais serviços, podemos configurar regras ALLOW adicionais para tráfego HTTP de qualquer lugar, etc.
# Allow localhost traffic
iptables -A INPUT -i lo -j ACCEPT
# INVALID type packets should be DROPped regardless of source.
iptables -A INPUT -m state --state INVALID -j DROP
# Allow traffic for related/established connections already running
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Allow all new connections/traffic from the local subnet you're on
# (10.20.30.0/24 is used in example)
iptables -A INPUT -m state --state NEW -s 10.20.30.0/24 -j ACCEPT
# Whitelist your IPs - repeat this step for each of your IPs permitted
# to access the machine outside of local network
iptables -A INPUT -s IPADDRESS -m state --state NEW -j ACCEPT
# If you have other services you want to configure for *public* access, then
# use this rule as a template and execute this before you follow the last step.
#
# Change PROTO to the protocol (tcp/udp, etc.) and PORT to the port number
# (80 for HTTP, ex.)
#
# Add this to the end of the rule if you want to allow only certain
# IPs to the specified service:
# -s IPADDRESS
iptables -A INPUT -p PROTO --dport PORT -m state --state NEW -j ACCEPT
# Deny all other traffic
iptables -A INPUT -j REJECT --reject-with icmp-host-unreachable
Isso se baseia na minha experiência com servidores há quase 15 anos e no meu treinamento em segurança de rede. Bem como meu conhecimento como Profissional de Segurança de TI.