Показаны сообщения с ярлыком iptables. Показать все сообщения
Показаны сообщения с ярлыком iptables. Показать все сообщения

понедельник, 15 сентября 2008 г.

iptables + ipset

IPSET позволяет сократить количество правил в iptables.
Если у вас используются одинаковые правила, но для разных критериев (IP, PORT, MAC, ...) вы можете объединить их в одно правило с помощью ipset.

Пример:

-A FORWARD -s 192.168.0.200 -m tcp -p tcp --dport 25 -j ACCEPT
-A FORWARD -s 192.168.0.201 -m tcp -p tcp --dport 25 -j ACCEPT
-A FORWARD -s 192.168.0.210 -m tcp -p tcp --dport 25 -j ACCEPT
...
-A FORWARD -s 192.168.0.225 -m tcp -p tcp --dport 25 -j ACCEPT

можно заменить одним правилом:

-A FORWARD -m set --set accept_email src,src -j ACCEPT


Компиляция ipset.

Для начала качаем исходник ядра и ipset (ipset-2.3.3a.tar.bz2)
Конфигурируем ядро как обычно + включаем xtables в "Y" ("*")
Качаем последний patch-o-matic-ng, патчим ядро с параметром set

cd patch-o-matic-ng-yyyymmdd
./runme set

Далее, возвращаемся в папку с исходником ядра и собираем его с поддержкой ipset:

cd /usr/src/linux/
make config

все что касается ipset можно оставить по умолчанию.

make && make modules && make install && make modules_install


Далее распаковываем и ставил ipset, сейчас мы только добавили поддержку ipset в ядро и iptables. Не забываем пересобрать iptables.

Пример использования

ipset -N accept_email iphash --resize 0 #Создаем новый set с именем foo
ipset -A accept_email 192.168.0.200 #Добавляем данные в Set
ipset -A accept_email 192.168.0.201
...
ipset -A accept_email 192.168.0.225

#И наконец, само правило:
iptables -t filter -A FORWARD -m set --set accept_email src,src -j ACCEPT


Более подробно можно прочитать на офф сайте.

четверг, 11 сентября 2008 г.

Linux роутер своими руками.

Начнемс,
В этой статье я расскажу, как постоить небольшой и не сложный роутер с поддержкой NAT на базе Linux.
NAT (Network Address Translation — «преобразование сетевых адресов») — это механизм в сетях TCP/IP, позволяющий преобразовывать IP-адреса транзитных пакетов. Также имеет названия IP Masquerading, Network Masquerading и Native Address Translation.

Преобразование адресов методом NAT может производиться почти любым маршрутизирующим устройством — маршрутизатором, сервером доступа, межсетевым экраном. Суть механизма состоит в замене адреса источника (source) при прохождении пакета в одну сторону и обратной замене адреса назначения (destination) в ответном пакете. Наряду с адресами source/destination могут также заменяться номера портов source/destination.

Помимо source NAT (предоставления пользователям локальной сети с внутренними адресами доступа к Интернету) часто применяется также destination NAT, когда, например, обращения извне сетевым экраном транслируются на сервер в локальной сети, имеющий внутренний адрес и потому недоступный извне сети непосредственно (без NAT).

NAT выполняет две важных функции.

1. Позволяет сэкономить IP-адреса, транслируя несколько внутренних IP-адресов в один внешний публичный IP-адрес (или в несколько, но меньшим количеством, чем внутренних).
2. Позволяет предотвратить или ограничить обращение снаружи ко внутренним хостам, оставляя возможность обращения изнутри наружу. При инициации соединения изнутри сети создаётся трансляция. Ответные пакеты, поступающие снаружи, соответствуют созданной трансляции и поэтому пропускаются. Если для пакетов, поступающих снаружи, соответствующей трансляции не существует (а она может быть созданной при инициации соединения или статической), они не пропускаются.


У нас есть машинка с установленным Linux, я пользуюсь Gentoo.
Также у нас есть 2 сетевых интерфейса (eth0, eth1).
eth0 - Внешний интерфейс, "смотрит" в интернет, также это может быть ppp0 или что-то еще. (IP - динамически, полученный от провайдера или статический, как вам угодно.)
eth1 - внутренний интерфейс, "смотрит" в нашу домашнюю сеть, имеет IP: 192.168.0.1

Для начала нам необходимо включить форвард пакетов в системе, делается это просто:
в файл /etc/sysctl.conf добавляем или исправляем строку
net.ipv4.ip_forward = 1
применяем изменения
sysctl -p /etc/sysctl.conf

далее, в iptables добавляем правило для маршрутизации наших пакетов.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE

в этом правиле мы говорим, что все пакеты приходящие с адресов 192.168.0.1 - 192.168.0.255 должны отправляться через интерфейс eth0(ppp0, ...) и к ним должен применяться адрес источника этого же интерфейса.

сохраняем правила, в Gentoo это делается так:
/etc/init.d/iptables save