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

Iptables - пересылка + маскарадинг

Я новичок в iptables и пытаюсь настроить свой Linux-сервер в качестве шлюза для других моих компьютеров, поэтому, естественно, я играю с iptables и мне нужна помощь

На моем сервере 2 карты NIC, eth0 (WAN) и eth1 (LAN)

мои цели:

  1. Для меня ssh-доступ к серверу linux
  2. Перенаправить весь трафик http (80) и https (443), поступающий в eth1 (LAN), на eth0 и выполнить маскировку IP
  3. Весь остальной трафик, поступающий в eth1 (в основном запросы DHCP от клиентов LAN), не должен перенаправляться на eth0.
  4. Не разрешать клиентам локальной сети запускать какие-либо службы, т.е. иметь доступ только к сети (TCP: 80/443)

На данный момент у меня есть следующие правила:

#To clear all IPTables Rules
iptables --flush            
iptables --table nat --flush
iptables --delete-chain     
iptables --table nat --delete-chain

#allow me to ssh into the server + access the web server on it
#ssh
iptables --table FILTER -A INPUT -p tcp --dport 22 -j ACCEPT
#webserver
iptables --table FILTER -A INPUT -p tcp --dport 80 -j ACCEPT
#drop everything else
iptables --table FILTER -A INPUT -j DROP

#enable IP Masquerading on eth0
iptables --table NAT -A POSTROUTING --out-interface eth0 -j MASQUERADE

#accept incoming traffic from eth1
#http
iptables --table FILTER -A INPUT -p tcp -dport 80 --in-interface eth1 -j ACCEPT
#https
iptables --table FILTER -A INPUT -p tcp -dport 443 --in-interface eth1 -j ACCEPT
#drop everything else
iptables --table FILTER -A INPUT --in-interface eth1 -j DROP

Итак, на данный момент у меня есть трафик http / https, поступающий от eth1 (который был разрешен iptables), и моя линия eth0 готова для маскировки.

У меня вопрос Как перенаправить этот трафик с eth1 на eth0 ?

Любая помощь приветствуется,
анкит

Во-первых, пара исправлений: имена таблиц чувствительны к регистру, как и параметры командной строки: вам нужно --table filter -A INPUT. Кроме того, dport для https - 443 (вероятно, опечатка, но стоит отметить)

Что вам нужно сделать дальше, так это сбросить правила INPUT внизу вашего скрипта. В INPUT Цепочка используется только пакетами, которые привязаны к локальному процессу на самом сервере. Таким образом, эти правила позволят клиенту в локальной сети напрямую подключаться к службам, прослушивающим порт 80 + 443 на сервере. Это верно для ваших исходных правил SSH и HTTP, но не для пересылки пакетов. Использовать FORWARD вместо этого цепочка:

#http
iptables --table filter -A FORWARD -p tcp -dport 80 --in-interface eth1 -j ACCEPT
#https
iptables --table filter -A FORWARD -p tcp -dport 443 --in-interface eth1 -j ACCEPT

В дополнение к этому вам необходимо включить переадресацию IP в ядре. Добавьте это в начало скрипта:

echo 1 > /proc/sys/net/ipv4/ip_forward

Дополнительная рекомендация: вместо правил, отбрасывающих пакеты в конце цепочки, рассмотрите возможность использования параметров политики:

iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP

Для дальнейшего ознакомления, здесь есть хорошая диаграмма потока пакетов через netfilter: http://www.shorewall.net/NetfilterOverview.html