Всё не так просто... » iptables http://www.lab108.ru Мэрфолог-практик Sat, 10 Sep 2016 19:25:18 +0000 ru-RU hourly 1 http://wordpress.org/?v=3.9.14 FTP через NAT в Linux /2009/04/13/ftp-cherez-nat-v-linu/ /2009/04/13/ftp-cherez-nat-v-linu/#comments Mon, 13 Apr 2009 06:32:03 +0000 /?p=1770 для пропуска ftp через nat надо на роутере сделать примерно следующее



modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe iptable_nat
modprobe ip_nat_ftp

с прописью модулей в /etc/modules

или так (не проверено)

iptables -A INPUT -p tcp -i eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -i eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -o eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -o eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT

eth0 – это вроде как внешний интерфейс.

]]>
/2009/04/13/ftp-cherez-nat-v-linu/feed/ 0
geoip в iptables /2008/09/18/geoip-v-iptables/ /2008/09/18/geoip-v-iptables/#comments Thu, 18 Sep 2008 12:48:00 +0000 /2008/09/18/geoip-v-iptables/ есть такой модуль для iptables – geoip. нужен он для того, чтобы фильтровать пакеты по географическому признаку.
по умолчанию в комплект поставки это счастье не входит, тк что собирать его придётся руками.
неполохое описание этого процесса есть здесь на русском или здесь на английском. версии немного отличаются.

если коротко:

подготовительная операция
# apt-get install dpkg-dev build-essential

скачать и распаковать сырцы ядра, сырцы iptables, type-o-matic, патч geoip.
# apt-get install linux-source-2.6.18
# tar xjf /usr/src/linux-source-<version>.tar.bz2 -C /usr/src/
# mkdir ~/geoip
# cd ~/geoip/
# apt-get source iptables
# wget http://people.netfilter.org/peejix/patchlets/geoip.tar.gz
# wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20070414.tar.bz2
# tar xjf patch-o-matic-ng-20070414.tar.bz2
# tar xzf geoip.tar.gz -C patch-o-matic-ng-20070414/patchlets/
# cd patch-o-matic-ng-20070407/

пропатчить iptables свежескачанным geoip
# KERNEL_DIR=/usr/src/linux-source-<version>/ IPTABLES_DIR=~/geoip/iptables-<version>/iptables/ ./runme geoip

на самом деле можно geoip не скачивать, и расположение сырцов ядра и iptables не указывть. patch-o-matic спрашивает при их размещение, а geoip подкидывается командой
# ./runme –download geip

загрузит и пропатчит. ни куда не денется.

а дальше есть два варианта.
поскольку, для подключения модуля надо целых два файла – модуль ядра и библиотеку iptables, то можно особо не заморачиваясь их собрать и положить куда надо. или собирать полноценные пакеты ядра и iptables и ставить их в штатном режиме.

первый вариант:

применим на ядро старый конфиг
# cd /usr/src/linux-source-<version>/
# make oldconfig

на вопрос
geoip match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW)
отвечаем “m”
после чего подготавливаем сборку модулей и собираем модули netfilter (правда все сразу, как собрать отдельный я не в курсе)
# make modules_prepare
# make -C $(pwd) M=net/ipv4/netfilter/ modules

копируем ядерный модуль на штатное место
# cp net/ipv4/netfilter/ipt_geoip.ko /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter/

и активируем его
# depmod
# modprobe ipt_geoip
# echo “ipt_geoip” >> /etc/modules

собираем библиотеку iptables
# cd ~/geoip/iptables-<version>/iptables/
# make KERNEL_DIR=/usr/src/linux-source-<version>/ extensions/libipt_geoip.so

и ставим файл на место
# cp extensions/libipt_geoip.so /lib/iptables/

после чего подкидываем модулю базу ардресов с привязкой к странам

ну и второй вариант:
точно так же конфигурим ядро

применим на ядро старый конфиг
# cd /usr/src/linux-source-<version>/
# make oldconfig

на вопрос
geoip match support (IP_NF_MATCH_GEOIP) [N/m/?] (NEW)
отвечаем “m”

и собираем ядерный пакет
# make-kpkg –initrd kernel_image

после чего получаем собраный пакет с пропатченым ядром годный для установки

ну и сооружаем дебиановский пакет с пропатченным iptables. руководство берём здесь

/* чесслово, мне лениво прямо сейчас переписывать всё что там есть. лучше по дебианизации отдельную статью написать, если она действительно нужна. */

в общем получили на выходе готовый пакет iptables-чего_то_там-geoip.deb, опять же готовый к установке.

остаётся саме простое – подсунуть географическому модулю базу адресов

# cd ~/geoip/
# wget http://www.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
# unzip GeoIPCountryCSV.zip
# wget http://people.netfilter.org/peejix/geoip/tools/csv2bin-20041103.tar.gz
# tar xzf csv2bin-20041103.tar.gz
# cd csv2bin/
# make
# ./csv2bin ../GeoIPCountryWhois.csv
# mkdir /var/geoip
# mv geoipdb.* /var/geoip/

всё. в /var/geoip лежит готоая к употреблению база. можно писать правила в iptables

# iptables -m geoip –help

]]>
/2008/09/18/geoip-v-iptables/feed/ 0
спамоборство /2008/08/27/spamoborstvo-2/ /2008/08/27/spamoborstvo-2/#comments Wed, 27 Aug 2008 09:48:00 +0000 /2008/08/27/spamoborstvo-2/ прикрутил в файрволу модуль goip и забанил к чёртовой матери Азию, Африку и Латинскую Америку по 25-му порту.
количество отбитого постфиксом спама упало раза в два.

внимательно наблюдаю за тем, из каких стран не попавших в банлист идёт спам. Польша, Германия, Штаты, и, естественно, Россия. рад бы забанить целиком, но нельзя – почта должна ходить.

]]>
/2008/08/27/spamoborstvo-2/feed/ 1
spam и iptables /2008/06/25/spam-i-iptables/ /2008/06/25/spam-i-iptables/#comments Wed, 25 Jun 2008 08:51:00 +0000 /2008/06/25/spam-i-iptables/ смотрю логи вчерашнего всплеска спама и думаю вот над чем:
ботнетовские компы пытаются одновременно поднять несколько соединений. как правило 5 – 7, есть всплески до 10 – 20, но их немного.
похоже, что придётся поднимать ещё одну линию обороны на брандмауэре. будем ограничивать количество одновременных соединений с одного IP примерно такой конструёвиной:

iptables -A INPUT -p tcp -syn --dport 25 -m connlimit --connlimit-above 5/s -j REJECT

вопрос только в том, каким числом ограничивать одновременные соединения? надеюсь, что 5 – 6 хватит для валидной почты. или до 3 – 4 уменьшить?..

пойду пробовать.

]]>
/2008/06/25/spam-i-iptables/feed/ 0
простой скрипт iptables для домашнего роутера /2008/06/24/prostojj-skript-iptables-dlya-domashnego-routera/ /2008/06/24/prostojj-skript-iptables-dlya-domashnego-routera/#comments Tue, 24 Jun 2008 07:57:00 +0000 /2008/06/24/prostojj-skript-iptables-dlya-domashnego-routera/ #!/bin/bash # определяем интерфейсы # внутренний интерфейс INTIF=eth0 # внешний интерфейс EXTIF=eth1 # канал в инет PPPIF=ppp0 # внутренний адрес понятие более менее статическое INTIP=192.168.1.1 INTNET=192.168.1.0/24 # внешний адрес скорее всего выдаётся динамически EXTIP=ifconfig $EXTIF | awk "/inet addr/{print \$2}" | tr -d "inet addr:" PPPIP=ifconfig $PPPIF | awk "/inet addr/{print \$2}" | tr -d "inet addr:" # чистим правила /sbin/iptables -F INPUT /sbin/iptables -F OUTPUT /sbin/iptables -F FORWARD # закрываем движение трафика на время установки правил /sbin/iptables -P INPUT DROP /sbin/iptables -P OUTPUT DROP /sbin/iptables -P FORWARD DROP /sbin/iptables -t nat -F # разрешаем доступ снаружи на нужные порты (какие надо) /sbin/iptables -A INPUT -d $EXTIP -p tcp --destination-ports 22,80 -j ACCEPT /sbin/iptables -A INPUT -d $PPPIP -p tcp --destination-ports 22,80 -j ACCEPT # запрещаем доступ снаружи на именованные порты /sbin/iptables -A INPUT -d $EXTIP -p tcp --destination-port 1:1023 -j REJECT # эти порты относятся к X11 и я не уверен, что оно поднято на роутере /sbin/iptables -A INPUT -d $EXTIP -p tcp --destination-port 6000:6007 -j REJECT /sbin/iptables -A INPUT -d $EXTIP -p udp --destination-port 1:1023 -j REJECT /sbin/iptables -A INPUT -d $EXTIP -p udp --destination-port 6000:6007 -j REJECT /sbin/iptables -A INPUT -d $PPPIP -p tcp --destination-port 1:1023 -j REJECT /sbin/iptables -A INPUT -d $PPPIP -p tcp --destination-port 6000:6007 -j REJECT /sbin/iptables -A INPUT -d $PPPIP -p udp --destination-port 1:1023 -j REJECT /sbin/iptables -A INPUT -d $PPPIP -p udp --destination-port 6000:6007 -j REJECT # если нет почтового сервера, то закроем отправку писем во внешний мир от греха подальше /sbin/iptables -A OUTPUT -s $EXTIP -p tcp --destination-port 25 -j REJECT /sbin/iptables -A OUTPUT -s $PPPIP -p tcp --destination-port 25 -j REJECT # немного простенькой защиты echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts # Sync-flood protection /sbin/iptables -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT # Hidden port scanning protection /sbin/iptables -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT # Ping of death protection /sbin/iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT # antispuffing... for f in /proc/sys/net/ipv4/conf/*/rp_filter; do echo -n " $f " echo " " echo 1 > $f done # разрешаем forward /sbin/iptables -A FORWARD -s $INTNET -j ACCEPT # разрешаем маскарадинг /sbin/iptables -t nat -A POSTROUTING -s $INTNET -o $EXTIF -j MASQUERADE /sbin/iptables -t nat -A POSTROUTING -s $INTNET -o $PPPIF -j MASQUERADE echo "1" > /proc/sys/net/ipv4/ip_forward # прокидываем удалённый доступ к рабочему столу любимого виндового компа /sbin/iptables -t nat -A PREROUTING -d $PPPIP -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.2 # прокидываем удалённый доступ к рабочему столу ещё одного виндового компа, но с другого порта /sbin/iptables -t nat -A PREROUTING -d $PPPIP -p tcp -m tcp --dport 4389 -j DNAT --to-destination 192.168.1.3:3389 # можно сделать доступ и из провайдеровской локалки /sbin/iptables -t nat -A PREROUTING -d $EXTIP -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.2 # загибаем web-трафик на squid /sbin/iptables -t nat -A PREROUTING -d ! $INTIP -i $INTIF -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128 # снимаем запреты по умолчанию # почему? параноя у нас пока на низком уровне. /sbin/iptables -P INPUT ACCEPT /sbin/iptables -P OUTPUT ACCEPT # а в FORWARD всё что надо уже разрешили

ещё надо пропустить через NAT доступ к FTP
а это у меня уже описано

]]>
/2008/06/24/prostojj-skript-iptables-dlya-domashnego-routera/feed/ 0