А вот у меня тоже дефолтная DROP, просто она применяется когда все правила исчерпаны. Тут проблема в том, что iptables не может работать с алиасами, оба интерфейса eth1 и eth1:0 для iptables все равно как один eth1. Вот я и сделал два правила что из сети А в сеть Б - дропить и наоборот дропить, а если просто пакет идет на eth1 то пропускать (например в Интернет).. блин я сам запутался как же тут сделать оО..
Вот, лог с ноутбука, которым тестирую-пингую роутер:
Код: Выделить всё
# traceroute 192.168.10.1
traceroute to 192.168.10.1 (192.168.10.1), 30 hops max, 38 byte packets
1 192.168.10.1 (192.168.10.1) 0.462 ms 0.409 ms 0.413 ms
# ifconfig
eth0 Link encap:Ethernet HWaddr 00:60:97:93:56:FA
inet addr:192.168.20.2 Bcast:192.168.20.255 Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MULTICAST MTU:1500 Metric:1
RX packets:6780 errors:0 dropped:0 overruns:0 frame:0
TX packets:6370 errors:0 dropped:0 overruns:0 carrier:0
collisions:138 txqueuelen:1000
RX bytes:5767736 (5.5 MiB) TX bytes:703835 (687.3 KiB)
Interrupt:5 Base address:0x300
Видно, что сама сетевая карта ноутбука принадлежит другой подсети, но это не мешяет ей пинговать роутер во второй подсети.
Вот моя конфигурация iptables, настраивать скорее всего нужно FORWARD.. подскажите, где косяк:
Код: Выделить всё
#!/bin/bash
#Данный сценарий основан на наличии одной локальной сети, одного маршрутизатора и одного подключения к Интернет с динамическим ip адресом.
#Доступ к сервисам интернет идет через брандмауэр, мы полностью доверяем клиентам нашей локальной сети и поэтому не будем блокировать
#трафик, исходящий из локальной сети, однако, Интернет - не доверительная сеть. поэтому нужно ограничить доступ в нашу сеть и на брандмауэр
#извне. Исходное правило: "все, что явно не разрешено - то запрещено".
################################################################################
##########
#1.Конфигурация: интернет, локальная сеть, lo, модули не проверяем каждый раз..
INET_IFACE="ppp0"
LAN1_IP="192.168.10.1"
LAN1_IP_RANGE="192.168.10.0/24"
LAN2_IP="192.168.20.1"
LAN2_IP_RANGE="192.168.20.0/24"
LAN_IFACE="eth1"
LO_IFACE="lo"
LO_IP="127.0.0.1"
IPTABLES="iptables"
################################################################################
##########
#2.Очистка цепочек и удаление созданных цепочек.
$IPTABLES -t filter -F
$IPTABLES -t mangle -F
$IPTABLES -t nat -F
$IPTABLES -t filter -X
################################################################################
##########
#3.Установка правил
#3.1.Устанвока политик по-умолчанию
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#3.2.Создание собственных цепочек _таблицы_filter_
$IPTABLES -N bad_tcp_packets
$IPTABLES -N allowed
$IPTABLES -N tcp_packets
$IPTABLES -N udp_packets
$IPTABLES -N icmp_packets
#3.3.Наполнение собственных цепочек _таблицы_filter_ правилами
#цепочка bad_tcp_packets (syn/ask пакеты со сброшенным битом syn, со статусом new, но сброшенным битом syn)
$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:"
$IPTABLES -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP
#цепочка allowed, tcp, udp, icmp пакетов
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
#>цепочка tcp_packets (разрешаем доступ извне по SSH, маскируя порт от сканирования)
#$IPTABLES -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
$IPTABLES -A tcp_packets -p tcp -s 0/0 --dport 22 -m recent --name ssh --update --seconds 3600 --hitcount 8 -j REJECT
$IPTABLES -A tcp_packets -p tcp -s 0/0 --dport 22 -m recent --name ssh --set
$IPTABLES -A tcp_packets -p tcp -s 0/0 --dport 22 -m recent --name ssh ! --rcheck --seconds 15 --hitcount 2 -j REJECT
$IPTABLES -A tcp_packets -p tcp -s 0/0 --dport 22 -j allowed
#>цепочка udp_packets (разрешаем прохождение ответов от внешнего DNS-сервера, ICQ, udp-наводнение пресекается политикой DROP)
$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 53 -j ACCEPT
$IPTABLES -A udp_packets -p UDP -s 0/0 --source-port 5190 -j ACCEPT
#цепочка icmp_packets (пинг, ответ об умершем пакете, остальные д. принадлежать либо к ESTABLISHED либо к RELATED соединениям)
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
$IPTABLES -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT
#>>дополнительная защита от фрагментированных пакетов (вероятное ping-наводнение)
$IPTABLES -A icmp_packets --fragment -p ICMP -j LOG --log-prefix "fragment icmp packets DROP: "
$IPTABLES -A icmp_packets --fragment -p ICMP -j DROP
#3.4.цепочка PREROUTING
#3.4.1.таблица mangle
$IPTABLES -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 0x6
$IPTABLES -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x6
$IPTABLES -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 0x6
$IPTABLES -t mangle -A PREROUTING -i $INET_IFACE -j TTL --ttl-inc 1
#пришедшие для SSH, , маркируем эти пакеты (для дальнейшей приоретизации скорости в iproute2)
#$IPTABLES -t mangle -A PREROUTING -p tcp -s 0/0 --dport 22 -j MARK --set-mark 11
#3.4.2.таблица nat
#перенаправление порта для организации прозрачного проксирования в squid (+ открыть в INPUT порт 3128 для LAN)
$IPTABLES -t nat -A PREROUTING -i $INET_IFACE -p tcp --dport 80 -j REDIRECT --to-ports 3128
#3.5.цепочка INPUT
#3.5.1.таблица mangle
#3.5.2.таблица filter
#проверка пакетов, идущих на маршрутизатор (валидность, из локальной сети, от самого себя)
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN1_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN2_IP_RANGE -j ACCEPT
#squid
#iptables -A INPUT -p TCP -s $LAN1_IP_RANGE --dport 3128 -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
#остальные либо связанные с ESTABLISHED,RELATED соединениями, либо направляются в соответствующие цепочки
$IPTABLES -A INPUT -p ALL -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets
#логирование не пропущенных пакетов
$IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT INPUT packet died: "
#3.6.цепочка FORWARD
#3.6.1.таблица mangle
#3.6.2.таблица filter
#проверка транзитных пакетов (валидность, идут ли из локальной сети, принадлежат ли ESTABLISHED,RELATED соединениям)
$IPTABLES -A FORWARD -p tcp -j bad_tcp_packets
$IPTABLES -A FORWARD -s $LAN1_IP_RANGE -d $LAN2_IP_RANGE -j DROP
$IPTABLES -A FORWARD -s $LAN2_IP_RANGE -d $LAN1_IP_RANGE -j DROP
$IPTABLES -A FORWARD -i $LAN_IFACE -j ACCEPT
$IPTABLES -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#логирование не пропущенных пакетов
$IPTABLES -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT FORWARD packet died: "
#3.7.цепочка OUTPUT
#3.7.1.таблица mangle
#маркировка пакетов для iproute2
$IPTABLES -t mangle -A OUTPUT -m tos --tos Minimize-Delay -j MARK --set-mark 0x3
$IPTABLES -t mangle -A OUTPUT -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x4
$IPTABLES -t mangle -A OUTPUT -m tos --tos Maximize-Throughput -j MARK --set-mark 0x4
$IPTABLES -t mangle -A OUTPUT -p ALL -j MARK --set-mark 0x5
#3.7.2.таблица nat
#3.7.2.таблица filter
#проверка исходящих от роутера пакетов (валидность, идут с нашего $INET_IFACE, на $LAN1_IP или $LO_IP)
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
$IPTABLES -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN1_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -s $LAN2_IP -j ACCEPT
$IPTABLES -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT
#логирование не прошедших
$IPTABLES -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level DEBUG --log-prefix "IPT OUTPUT packet died: "
#3.8.цепочка POSTROUTING
#3.8.1.таблица mangle
$IPTABLES -t mangle -A POSTROUTING -p udp --dport 53 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A POSTROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x1
$IPTABLES -t mangle -A POSTROUTING -p icmp -j MARK --set-mark 0x2
$IPTABLES -t mangle -A POSTROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 0x8
#<<изменение TTL на стандартное, чтобы замаскировать подсеть по ttl
$IPTABLES -t mangle -A POSTROUTING -o $INET_IFACE -j TTL --ttl-set 64
#$IPTABLES -t mangle -A POSTROUTING -p tcp --sport 80 --dport 80 -j MARK --set-mark 0x2
#3.8.2.таблица nat
#маскарадинг, DNAT на входе (PREROUTING) будет произведено автоматически
$IPTABLES -t nat -A POSTROUTING -s $LAN1_IP_RANGE -o $INET_IFACE -j MASQUERADE
$IPTABLES -t nat -A POSTROUTING -s $LAN2_IP_RANGE -o $INET_IFACE -j MASQUERADE
################################################################################
##########
#4.Настройка /proc
#4.1.Включаем возможность форвардинга
echo "1" > /proc/sys/net/ipv4/ip_forward
#4.2.Для защиты от syn флуда
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
#другие опции ядра
#>проверка обратного адреса для всех пакетов
#for i in /proc/sys/net/ipv4/conf/*/rp_filter; do
#echo 2 > $i
#done