У меня есть настройка, в которой мое входящее интернет-соединение подается на прокси / кэширующий сервер squid, а оттуда - на мой локальный беспроводной маршрутизатор.
На стороне WAN прокси-сервера у меня eth0 с адресом 208.78. ∗∗∗. ∗∗∗
На локальной стороне прокси-сервера у меня есть eth1 с адресом 192.168.2.1
Трафик из моей локальной сети прозрачно перенаправляется через прокси в Интернет по следующим правилам. Обратите внимание, что трафик от самого сервера squid также маршрутизируется через прокси / кеш, и это сделано специально:
# iptables forwarding
iptables -A FORWARD -i eth1 -o eth0 -s 192.168.2.0/24 -m state --state NEW -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A POSTROUTING -t nat -j MASQUERADE
# iptables for squid transparent proxy
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to 192.168.2.1:3128
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Как я могу настроить iptables, чтобы блокировать любые подключения к моему серверу извне, не блокируя при этом ничего, инициированное изнутри? Я пробовал делать:
iptables -A INPUT -i eth0 -s 192.168.2.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -j REJECT
Но это все блокирует. Я также попытался изменить порядок этих команд на тот случай, если я ошибся в этой части, но это не помогло. Думаю, я не совсем понимаю iptables.
Любые идеи?
Прежде всего, какова ваша политика для каждой сети? Вы можете проверить с iptables -L
Политика - это действие по умолчанию, которое будет выполнено, если ни одно правило не соответствует.
Для защиты сервера вам понадобится следующее:
Установите правило по умолчанию на DROP
iptables -P ПАДЕНИЕ ВВОДА
Разрешить трафик из вашей локальной сети, который входит в интерфейс локальной сети
iptables -A INPUT -i eth1 -s 192.168.2.0/24 -j ACCEPT
и оставьте цепочку FORWARD как есть.
Вот и все.
Думаю, у меня есть ответ. Кажется, это работает для меня, и Если кто-то знает, что нужно сделать больше, чем я, пожалуйста, дайте мне знать.
Думаю, мне просто нужно было убедиться, что состояние соединения соответствует. Я добавил следующие правила:
iptables -A INPUT -i eth0 -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -i eth0 -s 192.168.2.0/24 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -j REJECT
Я проверил это, запустив nmap против WAN IP с компьютера за пределами нашей сети (мой компьютер дома) ... он просто завис и никогда ничего не отображал.
Я также попытался подключиться к портам, которые прослушивают сервер squid, и все попытки подключения не удались. Однако внутри сети все по-прежнему работает должным образом.
В зависимости от вашей конфигурации iptables первая строка может не понадобиться, а вторая строка определенно неверна (p.s - вторая строка eth0 или eth1).
Первая строка позволяет iptables принимать все входящие запросы и соединения из внутренней сети.
Попробуйте использовать это для второй строки:
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Это сообщает iptables вперед все пакеты, поступающие с eth1 (WAN) на eth0 (LAN) - таким образом невозможно будет установить соединение от eth1 (WAN) к вашему серверу.
Однако небольшое предостережение: двухстрочные правила iptables вызывают проблемы. Я предлагаю вам узнать больше о том, как настроить, просмотрев образцы конфигураций в Интернете. Вы можете начать смотреть на Эта статья.
Как я могу настроить iptables, чтобы блокировать любые подключения к моему серверу извне, не блокируя при этом ничего, инициированное изнутри?
Поместите это в порядок в цепочке INPUT
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i eth0 -m state --state INVALID -j DROP
iptables -A INPUT -i eth0 -j REJECT
Если вы хотите отладить его, см. Свой conntrack.