Архив метки: iptables

FTP через NAT в Linux

для пропуска 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 – это вроде как внешний интерфейс.

geoip в iptables

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

Читать далее →

спамоборство

прикрутил в файрволу модуль goip и забанил к чёртовой матери Азию, Африку и Латинскую Америку по 25-му порту.
количество отбитого постфиксом спама упало раза в два.

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

spam и 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 уменьшить?..

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

простой скрипт iptables для домашнего роутера

#!/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
а это у меня уже описано