Я понимаю, что можно реализовать брандмауэр, чтобы разрешить доступ к серверу только с определенных IP-адресов, но разве не могут люди подделать исходный IP-адрес в TCP-пакете? Как это на самом деле остановит недобросовестных людей от доступа к вашему серверу?
решение1
То, что сказал Чувак, — это ответ, который ты ищешь.
Я думаю, вы думаете вот о чем:
SERVER.......................CLIENT
............[FIREWALL].........|
..|............................|
..|_>___[CHECK FOR AUTHORITY]_<_|
В этой схеме предполагается, что и на сервере, и на клиенте имеются брандмауэры (обычно так и есть).
Если полномочия не выполняются, вызов сервера/клиента игнорируется.
Итак, если IP-адрес сервера — xxx.xxx.xxx.1, а клиента — xxx.xxx.xxx.2, и клиент пытается получить доступ к серверу, отправив команду без авторизации... Ваш журнал сервера будет выглядеть так: xxx.xxx.xxx.2 [Авторизация не удалась — ИГНОРИРУЙТЕ]
Если xxx.xxx.xxx.2 скрыл свой IP как xxx.xxx.xxx.3, которому разрешен доступ к серверу, то произойдет следующее. xxx.xxx.xxx.3 -> Отправить пакет команды на xxx.xxx.xxx.1 xxx.xxx.xxx.1 -> Ответить на команду и отправить пакет на xxx.xxx.xxx.3
Таким образом, xxx.xxx.xxx.1 никогда не получит полученную команду.
Теперь то, о чем вы, вероятно, думаете:КАК ЭТО БЕЗОПАСНО?
Ну, большинство серверов на самом деле работают именно так..
SERVER..............................CLIENT
..|______________[CONNECT]___________<_|
............|
...[TEST AUTHORIZATION]
...........|
......[PASSED]
..........|
...........[SEND CONNECTED RESPONSE]...|
Таким образом, если клиент авторизован и совершает вызов на сервер, сервер ответит подключенным ответом для отправки обратно клиенту; если клиент получит этот ответ, сервер будет знать, что это правильный клиент.
решение2
Конечно, кто-то может подделать свой IP-адрес для ОТПРАВКИ TCP/IP-пакетов, но он никогда не получит ОТВЕТА, потому что он отправится на поддельный IP-адрес, который он использовал! Так что этот способ бесполезен для того, кто хочет установить двустороннюю связь!
решение3
Было отмечено, что подделки отправителя недостаточно, вы также захотите получить ответ обратно, чтобы сделать что-то полезное. Поэтому вам нужно будет сделать полноценный man in middle тогда.
Однако брандмауэры обычно не «пропускают» многое, основываясь только на IP-адресе источника.
Брандмауэры в основном используются дляблокировка, но не для авторизации.
То есть ненадежный IP даже не будет знать, что есть VPN, и не сможет подключиться к VPN-сервису. Или легко его атаковать, если на то пошло. Но главная функция безопасности — это сам VPN.
Поскольку фильтрация на основе IP-адресов обходится недорого, она отлично подходитпервая линия обороны. Отклонение любого пакета на брандмауэре означает, что службы за ним будут иметь дело с гораздо меньшим количеством «атак» (и другого шума). Запуск DDoS против брандмауэра сложнее, чем запуск DDoS против реальной службы, потому что вам нужно заполнить интернет-соединение, а не процессор сервера, обрабатывающего запросы.
решение4
Действительно, можно нанести вред с помощью односторонних соединений (например, с протоколами без сохранения состояния, такими как UDP), но тогда это сводится к избеганию аутентификации на основе IP (небезопасной).
ТКП
TCP обычно не затрагивается, поскольку установление соединения требует отправки обратного пакета на исходный хост. Вот как это происходит:
Алиса находится в списке авторизованных хостов.
- Алиса отправляет SYN-пакет Бобу.
- Боб возвращает SYN-ACK Алисе, чтобы дать ей сигнал продолжать
- Алиса отправляет пакет ACK и продолжает работу с предполагаемой полезной нагрузкой.
Чарли пытается подключиться к сервису.
- Чарли отправляет SYN-пакет Бобу.
- Брандмауэр блокирует пакет, Боб ничего не получает (или предупреждение в журналах о том, что Чарли пытался к нему подключиться).
- Чарли может знать или не знать, что его запрос был отклонен (в зависимости от конфигурации брандмауэра либо запрос истекает по тайм-ауту, либо Боб явно отправляет пакет ICMP «Отклонено/недоступно»).
Чарли каким-то образом знает, что Элис может получить доступ к сервису.
- Чарли отправляет SYN-пакет Бобу, выдавая себя за Алису.
- Пакет проходит через брандмауэр, Боб возвращает SYN-ACK Алисе.
- Алиса отвечает RST-ACK (подтверждение сброса) или ICMP Unreachable, так как она ничего не ожидала от Боба.
- Чарли никогда не узнает, был ли вообще выполнен запрос.
А что, если соединение уже установлено? Вот для чего нужны порядковые номера: они не могут (не должны) быть предсказаны другими, и обе стороны ожидают, что последовательности всегда будут увеличиваться на единицу.
- После установления соединения обе стороны выбирают предпочтительно случайный порядковый номер.
- В каждом отправляемом пакете порядковый номер должен увеличиваться на единицу. Это позволяет принимающей стороне отклонять пакеты с неправильными порядковыми номерами и переупорядочивать те, которые находятся в пределах принятого окна.
Теперь у Чарли нет возможности «внедрить» пакеты в существующее соединение между Алисой и Бобом, поскольку он не может предсказать порядковый номер, и его пакеты будут отклонены Бобом, возможно, вместе с предупреждением или уведомлением в журналах.
УДП
Если протокол — UDP, он сильно подвержен спуфингу, поскольку одноранговые узлы могут внедрять поддельные пакеты в Интернете, поэтому вам придется добавить механизм аутентификации или шифрования на уровне приложений вместо транспорта.
Смягчение
Провайдеры интернет-услуг добавят меры для предотвращения подмены IP-адресов. Это может быть так же просто, как отклонение всех пакетов, которые не соответствуют их собственным сетевым блокам, от выхода маршрутизатора, и пакетов, которые соответствуют их сетевым блокам, от входа в их сеть.
В локальной сети зачастую очень легко осуществить подмену, поскольку не существует большого количества механизмов, которые могли бы помешать кому-либо это сделать.