Блокировать все входящие запросы, кроме локальной сети

Блокировать все входящие запросы, кроме локальной сети

У меня есть выделенный сервер, на котором я развернул сервер 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 лет и моем обучении сетевой безопасности. А также моих знаниях как специалиста по ИТ-безопасности.

Связанный контент