Доброго времени суток.
Подскажите пож-та новичку.
Есть чисто роутер на ubuntu 12.04 сервер (192.168.0.2). У клиентов в сети все адреса статические, есть сервер Вин 2003 Задача: пробросить RDP порт на вин.сервер 192.168.0.1 и дать части клиентов доступ в инет, но при этом максимально прикрыть неиспользуемые порты, т.е. разрешить только ВЭБ, почту и скайп (это все что надо для работы). Но у меня получилось только дать доступ по всем портам, если я указываю конкретные порты (80,25,110,443) то инет у клиентов полностью отваливается. Сейчас работает вот так:
#!/bin/bash
/sbin/iptables -F
/sbin/iptables -t nat -F# Прописываем политики по умолчанию:
/sbin/iptables -P INPUT DROP
/sbin/iptables -P FORWARD DROP
/sbin/iptables -P OUTPUT DROP# Включаем форвардинг
sysctl -w net.ipv4.ip_forward="1"
# Включаем Маскарад
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -A FORWARD -i eth0 -o eth0 -j REJECT
/sbin/iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu#*****************************************************************************
# Защита самого сервера!!# Номера непривилегированных портов
UNPRIPORTS="1024:65535"
# Разрешаем прохождение любого трафика по интерфейсу обратной петли.
/sbin/iptables -A INPUT -i lo -j ACCEPT
/sbin/iptables -A OUTPUT -o lo -j ACCEPT# Запрещаем любые новые подключения с любых интерфейсов, кроме lo к компьютеру.
/sbin/iptables -A INPUT -m state ! -i lo --state NEW -j DROP# Если интерфейс не lo, то запрещаем входить в список его адресов.
/sbin/iptables -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP#Делаем защиту от Dos атак:
/sbin/iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
/sbin/iptables -A INPUT -m state --state INVALID -j DROP
/sbin/iptables -A FORWARD -m state --state INVALID -j DROP# Принимать все пакеты, которые инициированы из уже установленного соединения, и имеющим признак ESTABLISHED.
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении./sbin/iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT# Предупреждаю вас о туповатых провайдерах, которые назначают IP адреса, отведенные IANA для локальных сетей.
# Например адреса 10.X.X.X. Для этого надо установить правило, пропускающие трафик с этих серверов, ранее цепочки INPUT.
/sbin/iptables -t nat -I PREROUTING -i eth0 -s 10.0.0.1/32 -j ACCEPT# Эти правила предохраняют от некоторых типов атак:
# SYN наводнение.
# Приводит к связыванию системных ресурсов, так что реальных обмен данными становится не возможным.
/sbin/iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
/sbin/iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP# UDP наводнение
# Службы использующие UDP, очень часто становятся мишенью для атак с целью вывода системы из строя.
/sbin/iptables -A INPUT -p UDP -s 0/0 --destination-port 138 -j DROP
/sbin/iptables -A INPUT -p UDP -s 0/0 --destination-port 113 -j REJECT
/sbin/iptables -A INPUT -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT
/sbin/iptables -A INPUT -p UDP -j RETURN
/sbin/iptables -A OUTPUT -p UDP -s 0/0 -j ACCEPT# ICMP - перенаправление
# ICMP - сообщение указывает системе изменить содержимое таблиц маршрутизации с тем, что бы направлять
# пакеты по более короткому маршруту. Может быть использовано взломщиком для перенаправления вашего трафика через свою машину.
/sbin/iptables -A INPUT --fragment -p ICMP -j DROP
/sbin/iptables -A OUTPUT --fragment -p ICMP -j DROP# Разрешаем ICMP соединение. Значительная часть ICMP используется для передачи сообщений о
# том, что происходит с тем или иным UDP или TCP соединением.
/sbin/iptables -A INPUT -p icmp -m icmp -i eth0 --icmp-type source-quench -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp -m icmp -o eth0 --icmp-type source-quench -j ACCEPT# Разрешаем себе ping наружу - нас же не попингуешь - пакеты отбрасываются.
/sbin/iptables -A INPUT -p icmp -m icmp -i eth0 --icmp-type echo-reply -j ACCEPT
/sbin/iptables -A OUTPUT -p icmp -m icmp -o eth0 --icmp-type echo-request -j ACCEPT# Запрещаем подключение к X серверу через сетевые интерфейсы.
/sbin/iptables -A INPUT -p tcp -m tcp -i eth0 --dport 6000:6063 -j DROP --syn# Прописываем порты, которые открыты в системе, но которые не должны быть открыты на сетевых интерфейсах:
# /sbin/iptables -A INPUT -p tcp -m tcp -m multiport -i eth0 -j DROP --dports #порта
/sbin/iptables -A INPUT -p tcp -m tcp -m multiport -i eth0 -j DROP --dports 783
/sbin/iptables -A INPUT -p tcp -m tcp -m multiport -i eth0 -j DROP --dports 3310
/sbin/iptables -A INPUT -p tcp -m tcp -m multiport -i eth0 -j DROP --dports 10000# DNS сервер имен разрешаем.
/sbin/iptables -A OUTPUT -p udp -m udp -o eth0 --dport 53 --sport $UNPRIPORTS -j ACCEPT
/sbin/iptables -A OUTPUT -p tcp -m tcp -o eth0 --dport 53 --sport $UNPRIPORTS -j ACCEPT
/sbin/iptables -A INPUT -p udp -m udp -i eth0 --dport $UNPRIPORTS --sport 53 -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp -i eth0 --dport 1024:65353 --sport 53 -j ACCEPT# Разрешаем AUTH-запросы на удаленные сервера, на свой же компьютер - запрещаем.
/sbin/iptables -A OUTPUT -p tcp -m tcp -o eth0 --dport 113 --sport $UNPRIPORTS -j ACCEPT
/sbin/iptables -A INPUT -p tcp -m tcp -i eth0 --dport $UNPRIPORTS --sport 113 -j ACCEPT ! --syn
/sbin/iptables -A INPUT -p tcp -m tcp -i eth0 --dport 113 -j DROP
# Разрешаем 22-й порт.
/sbin/iptables -A INPUT -p tsp -i eth0 -m multiports –-dports 22 -j ACCEPT
/sbin/iptables -A OUTPUT -p tsp -o eth0 -m multiports --sports 22 -j ACCEPT# указываем путь к текстовому файлу, содержащему список запрещенных сайтов
badsite=($(cat”/home/vadim/sbd.txt”))# указываем путь к текстовому файлу, содержащему список хороших IP
goodip=($(cat”/home/vadim/ipgood.txt))
# Делаем проброс портов, для достпа через удаленный рабочий стол RDP
# из внешней сети к компу (серверу) в локалке.
/sbin//sbin/iptables -t nat -A PREROUTING –dst eth0 -p tcp –-dport 3389 -j DNAT –-to-destination 192.168.0.1:3389
/sbin//sbin/iptables -t nat -A POSTPOUTING -p tcp --dst 192.168.0.1 –-dport 3389 -j SNAT –-to-sourse eth0# теперь разрешаем траффик между этим компом и интернетом, но только на этот #порт.
/sbin/iptables -A FORWARD -i eth0 -o eth1 -d 192.168.0.1 -p tcp -m tcp --dport 3389 -j ACCEPT
# Ответ разрешаем с любого порта
/sbin/iptables -A FORWARD -i eth1 -o eth0 -s 192.168.0.1 -j ACCEPT###################################################
# Запрещаем "плохие сайты"
##################################################
i=0
for i in "${badsite[@]}"
do
/sbin/iptables -A FORWARD -s $i -j DROP
done################################################
Разрешаем интернет “хорошим” АйПи
###############################################
i=0
for i in "${goodip[@]}"
do
# tcp
#/sbin/iptables -A FORWARD -s $i -o eth0 -p tcp --dport 80 -j ACCEPT
/sbin/iptables -A FORWARD -s $i -i eth1 -o eth0 -j ACCEPT
#/sbin/iptables -A FORWARD -i eth0 -o eth1 -d $i -j ACCEPT
#/sbin/iptables -A FORWARD -s $i -i eth1 -o eth0 -j ACCEPT
#/sbin/iptables -A FORWARD -i eth0 -o eth1 -d $i -p tcp --destination-port 8080 -j ACCEPT
#/sbin/iptables -A FORWARD -o eth0 -s $i -p tcp -m multiport --dports 53,80,25,110,443,5190 -j ACCEPT
#/sbin/iptables -A FORWARD -i eth0 -d $i -p tcp -m multiport --sports 53,80,25,110,443,5190 -j ACCEPT
#/sbin/iptables -A INPUT -p tcp -s $i --dport 80 -j ACCEPT
#/sbin/iptables -A FORWARD -p tcp -s $i ! -d 192.168.0.0/24 --sport 80 -j ACCEPT
#/sbin/iptables -A FORWARD -p tcp -d $i ! -s 192.168.0.0/24 -m multiport –-dports 80,53,25,110,5190,443 -j ACCEPT
#/sbin/iptables -A FORWARD -p tcp -s $i ! -d 192.168.0.0/24 -m multiport –-sports 80,53,25,110,5190,443 -j ACCEPT
#udp
#/sbin/iptables -A FORWARD -p udp -d $i ! -s 192.168.0.0/24 -m multiport --dports 53 -j ACCEPT
#/sbin/iptables -A FORWARD -p udp -s $i ! -d 192.168.0.0/24 -m multiport --sports 53 -j ACCEPT
doneПроброс портов на сервер пока не тестировал. (Дай бог с клиентами в локалке разобраться) В цикле "Разрешаем интернет “хорошим” АйПи" те строчки которые закомментированы я перепробовал. работает только так как с сейчас записано. Но по всем портам сразу. А я бы хотел комуто разрешить и скайп и ВЭБ а кому-то оставить только почту. Как сделать?
Зараннее благодарен.
>i=0
>for i in "${badsite[@]}"
>do
>/sbin/iptables -A FORWARD -s $i -j DROP
>done
>for i in "${goodip[@]}"
>doот вашего рукоблудия хочется блевать. честное слово
осильте IPSET
осильте как правильно делать нат/маскарад. (у вас там даже "орфографические" ошибки есть - POST_P_OUTING, sour_S_e итп)
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o $wan_if -j SNAT --to-source $WAN_IPессно у вас при таком раскладе нефига работать не будет, курить -m state или -m conntrack --ctstate
пример чтоб разрешить выход только на "хорошие порты" с локальной сетки:
iptables -A FORWARD -m conntrack --ctstate INVALID -j DROP
iptables -A FORWARD -i $wan_if -o $lan_if -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -p tcp -s 192.168.0.0/24 -m multiport –-dports 80,53,25,110,5190,443 -m conntrack --ctstate NEW -j ACCEPTкороче курите lartc.org до посинения.
Я бы заюзал VPN, а какой конкретный, так тот, который нравится...