Архив метки: 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
а это у меня уже описано