Я новичок в iptables и пытаюсь настроить свой Linux-сервер в качестве шлюза для других моих компьютеров, поэтому, естественно, я играю с iptables и мне нужна помощь
На моем сервере 2 карты NIC, eth0 (WAN) и eth1 (LAN)
мои цели:
На данный момент у меня есть следующие правила:
#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