1

Изучение iptables для учебы, поэтому ничего особенного. Брандмауэр iptables должен находиться между DHCP-маршрутизатором (Интернет) и локальной сетью с клиентскими ПК. Брандмауэр разрешит клиенту доступ в Интернет, но заблокирует ftp и некоторые другие порты

  • eth0 это интернет

  • eth1 для локальной сети (так, конечно, две сети)

Я работаю, чтобы лучше понять команды. Сначала я использовал следующие три строки, чтобы разрешить iptables пересылать пакеты между обеими сетями. Это ниже, кажется, работает, и клиентский компьютер может просматривать Интернет сейчас. Не уверен, что это был самый элегантный способ.

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

Отсюда я не уверен. Не многие примеры, кажется, используют маскарад /NAT.

У меня сложилось впечатление, что лучше всего отбросить все пакеты, а потом разрешить то, что нужно конкретно. По-видимому, порядок имеет значение.

Могу ли я сейчас отбросить все пакеты, а затем разрешить порт 80? Как мне теперь подойти, чтобы заблокировать и разрешить?

Влияет ли маскарад на то, как я это делаю? Мне кажется, что все пакеты теперь пересылаются прямо на другую карту, так как я могу сказать, что разрешен только порт 80?

Я также не уверен относительно входящих / исходящих (с точки зрения клиента) относительно того, какие порты. Разрешить все исходящие?

1 ответ1

1

Здесь следует отметить несколько моментов: во-первых, на практике NAT обеспечивает брандмауэр, который предотвращает любой входящий трафик, КРОМЕ которого связано с исходящим трафиком. Это то, что вы настроили выше. Первая строка включает трансляцию адресов, вторая пропускает входящие пакеты, связанные с исходящими, а третья пропускает все исходящие пакеты. OUTBOUND здесь означает трафик из вашей локальной сети в Интернет, INBOUND - из Интернета в вашу локальную сеть.

Если вы хотите разрешить только просмотр веб-страниц, есть несколько способов сделать это. Первый - разрешить только исходящие запросы для порта 80 (и принять связанные входящие запросы). Вы можете сделать это следующим образом:

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE    
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -p tcp -dport 80 -o eth0 -j ACCEPT
iptables -A FORWARD -j DROP

Первые 2 правила одинаковы, третье разрешает только запросы порта 80 выходить из сети, а четвертое может или не может потребоваться в зависимости от ваших значений по умолчанию - оно говорит, что отбрасывает весь другой перенаправленный трафик.

Это создает некоторые потенциальные проблемы. Для просмотра веб-сайта вам необходимо выполнить поиск DNS, чтобы преобразовать доменное имя в IP-адрес. Если ваш маршрутизатор предоставляет DNS, то вы в порядке (вышеприведенные правила касаются только трафика, передаваемого через маршрутизатор, а не трафика, исходящего или заканчивающегося на маршрутизаторе). Если вы используете внешние DNS-серверы, вам также необходимо пропустить DNS. DNS говорит по TCP и UDP порту 53, поэтому вам нужно добавить:

iptables -A FORWARD -i eth1 -p tcp --dport 53 -j ACCEPT 
iptables -A FORWARD -i eth1 -p ucp --dport 53 -j ACCEPT

Когда дело доходит до использования IPTABLES, вы совершенно правы, что порядок имеет значение. Правила обрабатываются в том порядке, в котором они находятся в таблице, поэтому, если у вас есть правило ACCEPT перед правилом DROP котором оба правила соответствуют трафику. Вы можете ВСТАВИТЬ правила в начало таблицы, используя iptables -I или можете ПРИЛОЖИТЬ правила к концу таблицы, используя iptables -A .

Есть также несколько путей, не все пакеты проходят через все пути. Это может быть сложным, но в простом случае выше у вас есть 3 пути для беспокойства: INPUT , OUTPUT и FORWARD . INPUT - это запросы, предназначенные для маршрутизатора. OUTPUT - это запросы, поступающие на маршрутизатор. FORWARD - запросы, входящие и выходящие из маршрутизатора.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .