FreeSource: PlayGround

Про etcnet & ethx & iptables, пример настройки.

1) Так как etcnet сам управляет сетевыми картами (об этом сказано в 

документации по etcnet), то:

$ chkconfig --list ifplugd

ifplugd         0:выкл  1:выкл  2:выкл  3:выкл  4:выкл  5:выкл  6:выкл

Так же должно быть установлено следующее:

# chkconfig --list ethtool

ethtool         0:выкл  1:выкл  2:выкл  3:вкл   4:вкл   5:вкл   6:выкл

# chkconfig --list network

network         0:выкл  1:выкл  2:вкл   3:вкл   4:вкл   5:вкл   6:выкл

2) Если карточки постоянно присутствуют, т.е. они не pcimca или не usb

устройства, то использование сети в hotplug нужно отключить, т.е.

в /etc/sysconfig/hotplug должно быть прописано так, дабы hotplug не 

передёргивал сеть:

$ cat /etc/sysconfig/hotplug | grep NET

NETPLUG=no

3) Ну а далее настройки сетевух через сам etcnet:

$ cat /etc/net/iftab

# Generated by /etc/net initconf script

eth0 mac 00:c0:df:06:09:7b

# Generated by /etc/net initconf script

eth0 driver 8139too

# Generated by /etc/net initconf script

eth1 mac 00:04:79:66:31:a5

# Generated by /etc/net initconf script

eth1 driver 3c59x

$ cat /etc/net/sysctl.conf

# This file was formerly part of /etc/sysctl.conf

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 1

net.ipv4.icmp_echo_ignore_broadcasts = 1

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_timestamps = 0

Для устройства eth0

$ ls /etc/net/ifaces/eth0

ipv4address  ipv4route  options

$ cat /etc/net/ifaces/eth0/options

TYPE=eth

MODULE=8139too

BOOTPROTO=static

$ cat /etc/net/ifaces/eth0/ipv4address

#eth0 смотрит в ЛВС

192.168.2.2/24

$cat /etc/net/ifaces/eth0/ipv4route

default via <ip-адрес внешнего интерфейса>

Для устройства eth1

$ ls /etc/net/ifaces/eth1

ipv4address  ipv4route  options

$ cat /etc/net/ifaces/eth1/options

TYPE=eth

MODULE=3c59x

BOOTPROTO=static

$ cat /etc/net/ifaces/eth1/ipv4address

<ip-адрес смотрящий в инет>

$ cat /etc/net/ifaces/eth1/ipv4route

default via <ip-адрес шлюза провайдера>

Ну и небольшой скрипт для настройки iptables

#!/bin/sh

# для удобства, особенно если интерфейсов несколько

INET_ETH="eth1"     #Карточка смотрящая в инет

LAN_ETH="eth0"      #Карточка смотрящая в локалку

INET_IP=      #IP адрес смотрящий в инет

LAN_IP=       #IP адрес смотрящий в локалку

LAN=          #<сеть/маска>

INETNET=      #<сеть/маска>

PROXY_PORT=   #<адрес:порт>

ProxyPort=    #Порт прокси сервера

BANK_IP=      #IP адрес банковского сервера для работы программ типа банк-клиент

BANK_CLIENT_USER_IP1= #IP адрес пользователя, клиента банка

FREE_USER_IP1=""        #IP адрес пользователя, свободно ходящего в инет, минуя

прокси

#для удобства

IPTABLES="/sbin/iptables"

# включаем пересылку пакетов

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

# стандартные действия

$IPTABLES -P INPUT DROP

$IPTABLES -P OUTPUT DROP

$IPTABLES -P FORWARD DROP

# удаляем все имеющиеся правила

$IPTABLES -F

$IPTABLES -X

# создаем свои цепочки

# отбрасываем tcp с неправильными флагами

$IPTABLES -N bad_tcp_packets

# tcp, прошедшие основную проверку

$IPTABLES -N allowed

# все пакеты соотв. протоколов

$IPTABLES -N tcp_packets

$IPTABLES -N udp_packets

$IPTABLES -N icmp_packets

# безусловно разрешаем соединения по локальному интерфейсу (loopback, 127.0.0.1)

$IPTABLES -A INPUT -i lo -j ACCEPT

$IPTABLES -A OUTPUT -o lo -j ACCEPT

# безусловно разрешаем соединения по ЛВС интерфейсу

$IPTABLES -A INPUT -i $LAN_ETH -j ACCEPT

$IPTABLES -A OUTPUT -o $LAN_ETH -j ACCEPT

# сюда пойдут все tcp-пакеты, и будут отброшены имеющие статус NEW, но не имеющие флагов SYN,ACK

# предохраняет от определенных типов атак, подробности в приложении B4 к Iptables Tutorial

$IPTABLES -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j DROP

# принимаем все пакеты, относящиеся к уже установленным соединениям

$IPTABLES -A allowed -p TCP --syn -j ACCEPT

$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT

# а все остальные из этой цепочки сбрасываем

$IPTABLES -A allowed -j DROP

# Разрешаем свободный инет определённому юзеру

# Админ может всё! ... ;)

$IPTABLES -t nat -A POSTROUTING -s $FREE_USER_IP1 -d! POSTROUTING -s $LAN -o

$IPTABLES -A FORWARD -s $FREE_USER_IP1 -d ! $LAN -o $INET_ETH -j ACCEPT

# Включаем форвардинг для конкретного юзера, на конкретный интернет-сервер для чёртового банк-клиента.

$IPTABLES -t nat -A POSTROUTING -s $BANK_CLIENT_USER_IP1 -d $BANK_IP -o

$IPTABLES -A FORWARD -s $BANK_CLIENT_USER_IP1 -d $BANK_IP -o $INET_ETH -j ACCEPT

# здесь нужно открыть некоторые порты, т.к. по умолчанию мы закрыли всё

# нам необходимо следующие вещи: smtp, pop, imap – почта, DNS, http, https, ssh и т.д.

# принимаем входящие udp с 53-го порта (Domain Name Server)

$IPTABLES -A udp_packets -p UDP -s 0/0 --sport 53 -j ACCEPT

#открываем почту

$IPTABLES -A INPUT -i eth1 -p tcp --dport 25 -j ACCEPT          #smtp

$IPTABLES -A INPUT -i eth1 -p udp --dport 25 -j ACCEPT          #smtp

$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 25 -j ACCEPT         #smtp

$IPTABLES -A OUTPUT -o eth1 -p udp --dport 25 -j ACCEPT         #smtp

$IPTABLES -A INPUT -i eth1 -p tcp --dport 110 -j ACCEPT         #pop3

$IPTABLES -A INPUT -i eth1 -p udp --dport 110 -j ACCEPT         #pop3

$IPTABLES -A INPUT -i eth1 -p tcp --dport 995 -j ACCEPT         #pop3s

$IPTABLES -A INPUT -i eth1 -p udp --dport 995 -j ACCEPT         #pop3s

$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 995 -j ACCEPT        #pop3s

$IPTABLES -A OUTPUT -o eth1 -p udp --dport 995 -j ACCEPT        #pop3s

$IPTABLES -A INPUT -i eth1 -p tcp --dport 143 -j ACCEPT         #imap

$IPTABLES -A INPUT -i eth1 -p udp --dport 143 -j ACCEPT         #imap

$IPTABLES -A INPUT -i eth1 -p tcp --dport 993 -j ACCEPT         #imaps

$IPTABLES -A INPUT -i eth1 -p udp --dport 993 -j ACCEPT         #imaps

$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 993 -j ACCEPT        #imaps

$IPTABLES -A OUTPUT -o eth1 -p udp --dport 993 -j ACCEPT        #imaps

#открываем http

$IPTABLES -A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT

$IPTABLES -A INPUT -i eth1 -p tcp --dport 443 -j ACCEPT

$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 80 -j ACCEPT

$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 443 -j ACCEP

#открывает ftp

#20-ый порт – порт данных для ftp

$IPTABLES -A INPUT -i eth1 -p tcp --dport 20 -j ACCEPT  #data

$IPTABLES -A INPUT -i eth1 -p udp --dport 20 -j ACCEPT  #data

$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 20 -j ACCEPT #data

$IPTABLES -A OUTPUT -o eth1 -p udp --dport 20 -j ACCEPT #data

#21-ый порт – порт управления для ftp

$IPTABLES -A INPUT -i eth1 -p tcp --dport 21 -j ACCEPT  #control

$IPTABLES -A INPUT -i eth1 -p udp --dport 21 -j ACCEPT  #control

$IPTABLES -A OUTPUT -o eth1 -p tcp --dport 21 -j ACCEPT #control

$IPTABLES -A OUTPUT -o eth1 -p udp --dport 21 -j ACCEPT #control

# настал черед ICMP

# разрешаем необходимые типы

$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type 3 -j ACCEPT # Dest unreachable

$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type 11 -j ACCEPT # Time exceeded

$IPTABLES -A icmp_packets -p icmp -s 0/0 --icmp-type 12 -j ACCEPT # Parameter problem

$IPTABLES -A OUTPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT

$IPTABLES -A OUTPUT -p icmp -m icmp --icmp-type 3/3 -j ACCEPT

$IPTABLES -A OUTPUT -p icmp -m icmp --icmp-type 3/4 -j ACCEPT

$IPTABLES -A OUTPUT -p icmp -m icmp --icmp-type 3/9 -j ACCEPT

$IPTABLES -A OUTPUT -p icmp -m icmp --icmp-type 3/10 -j ACCEPT

$IPTABLES -A OUTPUT -p icmp -m icmp --icmp-type 3/13 -j ACCEPT

$IPTABLES -A OUTPUT -p icmp -m icmp --icmp-type 3 -j DROP

#Разрешаем форвардинг уже установленным соединениям

$IPTABLES -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT

$IPTABLES -A FORWARD -i $LAN_ETH -m state --state NEW -j ACCEPT

#Разрешаем прохождение пакетов ping

$IPTABLES -A FORWARD -p icmp -m icmp --icmp-type 3 -j ACCEPT

$IPTABLES -A FORWARD -p icmp -m icmp --icmp-type 11 -j ACCEPT

$IPTABLES -A FORWARD -p icmp -m icmp --icmp-type 12 -j ACCEPT

# разводим пакеты по соотв. цепочкам

# tcp уходит на доп. проверку

$IPTABLES -A INPUT -p tcp -j bad_tcp_packets

# все пакеты, относящиеся к уже установленным соединениям (для tcp

# из-за отдельной цепочки пришлось это правило еще раз указать выше)

$IPTABLES -A INPUT -p ALL -i $INET_ETH -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A INPUT -p TCP -i $INET_ETH -j tcp_packets

$IPTABLES -A INPUT -p UDP -i $INET_ETH -j udp_packets

$IPTABLES -A INPUT -p ICMP -i $INET_ETH -j icmp_packets