У меня есть выделенный сервер, на котором я развернул сервер Ubuntu 22.04.1 LTS с публичным IP-адресом. Я хочу заблокировать порт ssh, чтобы разрешить доступ только определенным IP-адресам.
У меня есть 3 IP-адреса с работы и сеть, которую я настроил на сервере с диапазоном IP-адресов.
Как мне разрешить вход на мой сервер только с этих IP-адресов?
Я нашел это в другом посте:
iptables -I INPUT -p tcp ! -s yourIPaddress --dport 22 -j REJECT
Будет ли это работать, если я запущу его для каждого IP-адреса, или возникнут сложности?
Также, достаточно ли этого? Мне следует заблокировать какие-либо другие порты? Это новая установка, на которой установлен только postgresql. Я пытаюсь узнать больше об Ubuntu и postgresql, но не хочу, чтобы мой сервер был целью.
Спасибо за ваш вклад!
решение1
Я бы посоветовал вам изменить свой подход с фокусировки на одном порте на полную «защитную» позицию: белый список IP-адресов, отклонять все другие попытки подключения. Это применимо к большинству всех портов в вашей среде, потому что в противном случае вам придется вносить в черный списоккаждыйIP известно о существовании, которое выполняет сканирование служб, поэтому у вас будет безумно длинный список на своем месте. Сканеры служб сканируюткаждыйпорт, поэтому вам следует принять подход «отказа в доверии» в первую очередь. Такие вещи, как веб-сервер (порт 80, 443 для HTTP/HTTPS может потребовать более широкого доступа, чем определенные IP-адреса, если это публичный сайт), также сканируются, но могут быть «защищены» путем надлежащего укрепления веб-сервера и контента. Однако,всепорты сканируются сервисными сканерами, ивсеПодключенные к Интернету устройства подвергаются сканированию, поэтому лучшим подходом будет запретить все сразу.
Таким образом, наиболее эффективный подход к "отказу в доверии" - просто разрешить определенным IP-адресам подключаться к порту(ам) и всем другим службам на машине, а затем отклонить все другие попытки подключения. При этом также позволяя localhost общаться с самим собой, что нормально.
Начните с защиты всего с помощью белого списка, прежде чем открывать другие порты. Если вам нужно больше услуг, мы можем настроить дополнительные правила ALLOW для HTTP-трафика отовсюду и т. д.
# 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
Это основано на моем опыте работы с серверами в течение почти 15 лет и моем обучении сетевой безопасности. А также моих знаниях как специалиста по ИТ-безопасности.