настройка биллинга встала на настройке сети, iptables ни в какую не дает подключать или отключать пользователей по одному. Имеется два интерфейса eth0 и eth1, eth0 получает инет, eth1 раздает.
Пробывал такие правила:
iptables -P FORWARD DROP
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 10.20.30.40
c последующим подключением:
iptables -A FORWARD -s 192.168.1.50 -j ACCEPT
и отключением пользователя:
iptables -D FORWARD -s 192.168.1.50 -j ACCEPT
Не работает, работает только если полностью открыть проброс пакетов:
iptables -A FORWARD -j ACCEPT
Что делаю не так? Как заствить nat открывать форвардинг не всей сети, а конкретным пользователям?
Помогите настроить NAT
Попробуй вот этот скрипт думаю поможет
#!/bin/sh
# /etc/init.d/firewall: set up the firewall
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $networking
# Required-Stop: $networking
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
# Переменная, задающая путь к файлу запуска iptables.
IPT="/usr/local/sbin/iptables"
# Интернет интерфейс
INET_IFACE2="eth3"
# Внутренний интерфейс
INET_IFACE0="eth4"
INET_IFACE1="eth2"
start_fw()
{
# Сбросить правила и удалить цепочки.
$IPT -F
$IPT -X
# Политики по умолчанию - запретить все
$IPT -P INPUT DROP
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
# Стандартная защита от некоторых видов атак извне
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
# Разрешаем прохождение любого трафика по интерфейсу обратной петли.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Разрешаем прохождение любого трафика по внутренней сети
$IPT -A INPUT -i $INET_IFACE1 -j ACCEPT
$IPT -A OUTPUT -o $INET_IFACE1 -j ACCEPT
$IPT -A INPUT -i $INET_IFACE0 -j ACCEPT
$IPT -A OUTPUT -o $INET_IFACE0 -j ACCEPT
# Коллектор
$IPT -I FORWARD -j NETFLOW
# Включить OSPF Quagga
# 89 протокол для 224.0.0.5, 224.0.0.6 и ip_of_gre.
$IPT -t filter -I INPUT -p 89 -j ACCEPT
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -I FORWARD -m udp -p udp -m string --hex-string "|7F FF FF FF AB|" --algo kmp --from 40 --to 44 -j DROP
$IPT -A FORWARD -s 195.x.x.0/22 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --set --name SMTP
$IPT -A FORWARD -s 188.x.x.0/21 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --set --name SMTP
$IPT -A FORWARD -s 172.0.0.0/8 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --set --name SMTP
$IPT -A FORWARD -s 195.x.x.0/22 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name SMTP -j REJECT --reject-with icmp-port-unreachable
$IPT -A FORWARD -s 188.x.x.0/21 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name SMTP -j REJECT --reject-with icmp-port-unreachable
$IPT -A FORWARD -s 172.0.0.0/8 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name SMTP -j REJECT --reject-with icmp-port-unreachable
# Разрешаем ICMP соединение.
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE2 --icmp-type source-quench -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE2 --icmp-type source-quench -j ACCEPT
# Разрешаем себе ping наружу - нас же не попингуешь - пакеты отбрасываются.
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE2 --icmp-type echo-reply -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE2 --icmp-type echo-request -j ACCEPT
$IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1460
$IPT -t nat -A POSTROUTING -s 172.16.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.18.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.19.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.20.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.21.0.0/16 -j MASQUERADE
}
case "$1" in
start) echo -n "Starting firewall: iptables"
start_fw
echo "."
;;
stop) echo -n "Stopping firewall: iptables"
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo "."
;;
*) echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac
exit 0
#!/bin/sh
# /etc/init.d/firewall: set up the firewall
### BEGIN INIT INFO
# Provides: firewall
# Required-Start: $networking
# Required-Stop: $networking
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
# Переменная, задающая путь к файлу запуска iptables.
IPT="/usr/local/sbin/iptables"
# Интернет интерфейс
INET_IFACE2="eth3"
# Внутренний интерфейс
INET_IFACE0="eth4"
INET_IFACE1="eth2"
start_fw()
{
# Сбросить правила и удалить цепочки.
$IPT -F
$IPT -X
# Политики по умолчанию - запретить все
$IPT -P INPUT DROP
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT
# Стандартная защита от некоторых видов атак извне
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN FIN,SYN -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags FIN,ACK FIN -j DROP
$IPT -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG -j DROP
# Разрешаем прохождение любого трафика по интерфейсу обратной петли.
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Разрешаем прохождение любого трафика по внутренней сети
$IPT -A INPUT -i $INET_IFACE1 -j ACCEPT
$IPT -A OUTPUT -o $INET_IFACE1 -j ACCEPT
$IPT -A INPUT -i $INET_IFACE0 -j ACCEPT
$IPT -A OUTPUT -o $INET_IFACE0 -j ACCEPT
# Коллектор
$IPT -I FORWARD -j NETFLOW
# Включить OSPF Quagga
# 89 протокол для 224.0.0.5, 224.0.0.6 и ip_of_gre.
$IPT -t filter -I INPUT -p 89 -j ACCEPT
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -I FORWARD -m udp -p udp -m string --hex-string "|7F FF FF FF AB|" --algo kmp --from 40 --to 44 -j DROP
$IPT -A FORWARD -s 195.x.x.0/22 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --set --name SMTP
$IPT -A FORWARD -s 188.x.x.0/21 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --set --name SMTP
$IPT -A FORWARD -s 172.0.0.0/8 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --set --name SMTP
$IPT -A FORWARD -s 195.x.x.0/22 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name SMTP -j REJECT --reject-with icmp-port-unreachable
$IPT -A FORWARD -s 188.x.x.0/21 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name SMTP -j REJECT --reject-with icmp-port-unreachable
$IPT -A FORWARD -s 172.0.0.0/8 -p tcp -m tcp --dport 25 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 --name SMTP -j REJECT --reject-with icmp-port-unreachable
# Разрешаем ICMP соединение.
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE2 --icmp-type source-quench -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE2 --icmp-type source-quench -j ACCEPT
# Разрешаем себе ping наружу - нас же не попингуешь - пакеты отбрасываются.
$IPT -A INPUT -p icmp -m icmp -i $INET_IFACE2 --icmp-type echo-reply -j ACCEPT
$IPT -A OUTPUT -p icmp -m icmp -o $INET_IFACE2 --icmp-type echo-request -j ACCEPT
$IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1460
$IPT -t nat -A POSTROUTING -s 172.16.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.17.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.18.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.19.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.20.0.0/16 -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 172.21.0.0/16 -j MASQUERADE
}
case "$1" in
start) echo -n "Starting firewall: iptables"
start_fw
echo "."
;;
stop) echo -n "Stopping firewall: iptables"
iptables -F
iptables -X
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
echo "."
;;
*) echo "Usage: /etc/init.d/firewall {start|stop}"
exit 1
;;
esac
exit 0
Re: Помогите настроить NAT
Может дело в том, что -s IP пропускает только исходящий, а нужно еще -d IP для входящего?OxOyD писал(а): Что делаю не так? Как заствить nat открывать форвардинг не всей сети, а конкретным пользователям?