Здравствуйте.
Помогите написать правила для iptables.
Имеется машина, на которой установлены 4 сетевых карты.
К трем из них:
eth0 192.168.0.1
eth1 192.168.1.1
eth2 192.168.2.1
подключены локальные сети:
А четвертая-
ether с ip скажем aaa.bbb.ccc.ddd
выход в интернет.
Требуется фильтр обеспечивающий доступ пользователей из внутренних сетей 192.168.0.*, 192.168.1.* и 192.168.2.* (с проверкой на ip и mac) в интернет посредством маскарадинга через карту ether. Причем пропускать нужно только порты 3128,8080,110,25 и icmp (чтобы пинги проходили).
Познания в iptables у меня пока довольно поверхностные а задачу нужно решить в кратчайшие сроки, поэтому надеюсь на помощь знающих людей.
Всё запрещаем на вход, замет разрешаем всё на локально и определённые на остальных интерфейсах. Естественно всё остальное блокируется. опиши подробнее что надо открыть.
[code:1]
##flush tables
#iptables -F INPUT
#iptables -F OUTPUT
#iptables -F FORWARD
##set policy
#iptables -P INPUT DROP
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD DROP
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
##allow ssh connection (localhost interfaces)
#iptables -A INPUT -i lo -j ACCEPT
##allow ssh connection (all interfaces)
#iptables -A INPUT -p ICMP --dport 5813/tcp -j ACCEPT
#iptables -A INPUT -p ICMP --sport 5813/tcp -j ACCEPT
#iptables -A INPUT -p 3128 -j ACCEPT
#iptables -A INPUT -p 8080 -j ACCEPT
#iptables -A INPUT -p 110 -j ACCEPT
#iptables -A INPUT -p 25 -j ACCEPT
[/code:1]
#iptables -P INPUT DROP
#iptables -P OUTPUT ACCEPT
#iptables -P FORWARD DROP
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -P FORWARD DROP
Зачем повторы?
Дальнешее верно для linux 2.6 - вводить надо с локала или модифицировать правила на тему разрешения SSH...
[code:1]
sysctl -w net.ipv4.conf.all.forwarding=1 #Разрешить маршрутизацию все интрефейсов
iptables -N ALLOWED #создадим новую цепочку.
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT #Принимать новые SSH соединения
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT #Принимать установленные соединения
iptables -P INPUT DROP #Все осталдьное - давить
iptables -A OUTPUT -p tcp --sport 22 -m state ESTABLISHED,RELATED -j ACCEPT #Пропускать уже установленые соединения.
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -t nat -A POSTROUTING -s 192.168.0.0/22 -o eth3 -j MASQUERADE #Собсвтенно, сам маскарадинг - предполагается, что в интернет смотрит интерфейс eth3
iptables -A FORWARD -p icmp -d ! 192.168.0.0/22 -j ACCEPT #пропускать все icmp идущие из/в интернет.
iptables -A FORWARD -p tcp -m state --state ESTABLISED,RELATED -d ! 192.168.0.0/22 -j ACCEPT #Пропускать установленые tcp соединения из любой сети в интернет
iptables -A FORWARD -j ALLOWED #Загоняем весь проходящий траффик в цепочку ALLOWED
iptables -A ALLOWED -s 192.168.1.10 -d ! 192.168.0.0/22 -p tcp --dport 8080 -m mac --mac-source 00:00:00:00:00:01 -m state --state NEW -j ACCEPT
#Дословно - пропускать новые соедиения с ip 192.168.1.10 в сети отличные от 192.168.0.0 (в вашем случае - интернет) на порт 8080
Для остальных портов и адресов - аналогично предыдущему правилу.
Опционально:
iptables -A FORWARD -s 192.168.0.0/22 -d 192.168.0.0/22 -j ACCEPT - пропускть все что угодно в пределах 192.168.0.0/22
[/code:1]
LSV я блин незнаю, где вы ЭТО взяли, но если сами написали - то следует отметить, что пакеты проходящие маршрутизацию не предназначеные маршрутизатору никоим образом в INPUT не попадут. Это не ipchains отнюдь... Наверное конфиг сгенерированый какой-нить софтиной?
UPDATED: поправил правило маскарадинга, теперь оно касается только интернет-траффика )
Конфиг написан руками, правдо минуты за 3.
В таком случае, вот так...
[code:1]
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A FORWARD -p tcp --sport 110 -j ACCEPT
iptables -A FORWARD -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -p tcp --sport 25 -j ACCEPT
iptables -A FORWARD -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -p tcp --sport 3128 -j ACCEPT
iptables -A FORWARD -p tcp --dport 3128 -j ACCEPT
[/code:1]
Вот у K9 нечто весьма похожее и идеологически верное...