Всё не так просто...

Мэрфолог-практик


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

by @ 11:57 on 24 June 2008. Tags: ,
Filed under HowTo
#!/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/ -F INPUT
/sbin/ -F OUTPUT
/sbin/ -F FORWARD
# закрываем движение трафика на время установки правил
/sbin/ -P INPUT DROP
/sbin/ -P OUTPUT DROP
/sbin/ -P FORWARD DROP
/sbin/ -t nat -F 

# разрешаем доступ снаружи на нужные порты (какие надо)
/sbin/ -A INPUT -d $EXTIP -p tcp --destination-ports 22,80 -j ACCEPT
/sbin/ -A INPUT -d $PPPIP -p tcp --destination-ports 22,80 -j ACCEPT
# запрещаем доступ снаружи на именованные порты
/sbin/ -A INPUT -d $EXTIP -p tcp --destination-port 1:1023 -j REJECT
# эти порты относятся к X11 и я не уверен, что оно поднято на роутере
/sbin/ -A INPUT -d $EXTIP -p tcp --destination-port 6000:6007 -j REJECT
/sbin/ -A INPUT -d $EXTIP -p udp --destination-port 1:1023 -j REJECT
/sbin/ -A INPUT -d $EXTIP -p udp --destination-port 6000:6007 -j REJECT
/sbin/ -A INPUT -d $PPPIP -p tcp --destination-port 1:1023 -j REJECT
/sbin/ -A INPUT -d $PPPIP -p tcp --destination-port 6000:6007 -j REJECT
/sbin/ -A INPUT -d $PPPIP -p udp --destination-port 1:1023 -j REJECT
/sbin/ -A INPUT -d $PPPIP -p udp --destination-port 6000:6007 -j REJECT

# если нет почтового сервера, то закроем отправку писем во внешний мир от греха подальше
/sbin/ -A OUTPUT -s $EXTIP -p tcp --destination-port 25 -j REJECT
/sbin/ -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/ -A FORWARD -p tcp --syn -m limit --limit 1/s -j ACCEPT
# Hidden port scanning protection
/sbin/ -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Ping of death protection
/sbin/ -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/ -A FORWARD -s $INTNET -j ACCEPT

# разрешаем маскарадинг
/sbin/ -t nat -A POSTROUTING -s $INTNET -o $EXTIF -j MASQUERADE
/sbin/ -t nat -A POSTROUTING -s $INTNET -o $PPPIF -j MASQUERADE
echo "1" > /proc/sys/net/ipv4/ip_forward

# прокидываем удалённый доступ к рабочему столу любимого виндового компа
/sbin/ -t nat -A PREROUTING -d $PPPIP -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.2
# прокидываем удалённый доступ к рабочему столу ещё одного виндового компа, но с другого порта
/sbin/ -t nat -A PREROUTING -d $PPPIP -p tcp -m tcp --dport 4389 -j DNAT --to-destination 192.168.1.3:3389
# можно сделать доступ и из провайдеровской локалки
/sbin/ -t nat -A PREROUTING -d $EXTIP -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.2

# загибаем web-трафик на squid
/sbin/ -t nat -A PREROUTING -d ! $INTIP -i $INTIF -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128

# снимаем запреты по умолчанию
# почему? параноя у нас пока на низком уровне.
/sbin/ -P INPUT ACCEPT
/sbin/ -P OUTPUT ACCEPT
# а в FORWARD всё что надо уже разрешили

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

Bookmark and Share
Метки:,

The URI to TrackBack this entry is: http://www.lab108.ru/2008/06/24/prostojj-skript-iptables-dlya-domashnego-routera/trackback/

Ответить автору

Или введите

[Всё не так просто… is proudly powered by WordPress.]

48 / 1.733?/28.92mb