Назад | Перейти на главную страницу

Использование Linux-сервера в качестве маршрутизатора для сети

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

 INTERNET - (eth0) Debian server + router (eth1) -- Netgear 5 port gigabit switch  -- Clients

У меня есть DHCP-сервер и DNS-сервер, работающие во внутренней сети, но мне трудно настроить iptables. Мне нужно, чтобы порты 80 и 22 были открыты снаружи (я могу добавить другие открытые позже) и полный доступ к серверу изнутри.

Любая помощь будет очень принята, спасибо, RayQuang

Вот установка, которую я с большим успехом использовал в ситуации, почти идентичной вашей. Я понимаю, что у вас следующие обстоятельства (поправьте меня, если я ошибаюсь):

  • Клиенты в локальной сети имеют полный доступ к Интернету. Исходящие соединения от клиентов LAN маскируются на общедоступный IP-адрес, предоставленный вашему серверу / маршрутизатору вашим интернет-провайдером.
  • Клиенты в локальной сети имеют полный доступ к вашему серверу через интерфейс, подключенный к локальной сети (eth1).
  • Весь входящий интернет-трафик (через eth0) блокируется, за исключением: (1) трафика, задействованного в уже существующем соединении, (2) трафика, привязанного к портам TCP 22 или 80, или (3) запросов проверки связи ICMP.
  • TCP-порты 22 и 80 открыты для Интернета (через eth0) и обрабатываются вашим сервером.
  • Ваш сервер отвечает на запросы ping ICMP из Интернета.
  • Для удобства я предполагаю, что диапазон адресов вашей сети LAN 10.10.10.0/24. При необходимости измените сценарий ниже, чтобы использовать свой фактический адрес.

Сначала убедитесь, что IP-переадресация включена. В /etc/sysctl.conf, у вас должно получиться следующее:

net.ipv4.ip_forward=1

Затем создайте свои правила netfilter согласно следующему сценарию:

#!/bin/sh
IPT=/sbin/iptables

# Flush all chains, to start with a clean slate.
$IPT -F
$IPT -t nat -F

# Set filter Policies. By default, DROP everything.
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

# Set server INPUT rules.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth1 -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

# Set server OUTPUT rules.
$IPT -A OUTPUT -j ACCEPT

# Set router FORWARD rules.
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i eth1 -o eth0 -j ACCEPT

# Masquerade outgoing LAN traffic.
$IPT -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE

Этого должно быть достаточно для построения основы.

Вам понадобится набор правил вроде следующего:

$ sudo iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Forward SSH packets destined to port 22
$ sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp -m tcp --dport 22 -j allowed
# Forward HTTP packets destined to port 80
$ sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp -m tcp --dport 80 -j allowed
# NATing rules for SSH and HTTP
$ sudo iptables -A PREROUTING -d your_public_ip -p tcp -m tcp --dport 22 -j DNAT --to-destination your_private_ip:22
$ sudo iptables -A PREROUTING -d your_public_ip -p tcp -m tcp --dport 80 -j DNAT --to-destination your_private_ip:80

Обратите внимание, что эти правила могут быть не полным списком. Однако это поможет вам начать работу. Также не забудьте включить переадресацию IP!