LinuxForum.Fans
Тема

Покритикуйте настройки для iptables

Автор: GlebHappy 21 сообщений 5295 просмотров
#51445

Здравствуйте, уважаемые гуру! :rolleyes:
Пожалуйста, покритикуйте мой файл настроек для iptables - что можно убавить, что прибавить, а что сделано неверно. Писал с комментариями, так что должно быть более-менее понятно

text
#!/bin/bash
# Зададим общие переменные
IPTABLES="/sbin/iptables"
WAN_IP="192.168.1.2"
WAN_IF="eth0"
WAN_BC="255.255.255.0"
LAN_IP="192.168.2.1"
LAN_IF="eth1"
LAN_NET="192.168.2.0/24"
LO_IP="127.0.0.1"
LO_IF="lo"

# Очистим все старые правила фильтрации $IPTABLES -F # 1) Разрешим все подключения к серверу, как входящие, так и исходящие (потом отрегулирую) $IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT # 2) Настроим некоторые важные системные правила # 2.1) Все входящие пакеты с внутренней подсети на внутренний интерфейс - РАЗРЕШЕНЫ $IPTABLES -A INPUT -p ALL -i $LAN_IF -s $LAN_NET -j ACCEPT # 2.2) Все локальные пакеты во все сети - РАЗРЕШЕНЫ $IPTABLES -A INPUT -p ALL -i $LO_IF -s $LO_IP -j ACCEPT $IPTABLES -A INPUT -p ALL -i $LO_IF -s $LAN_IP -j ACCEPT $IPTABLES -A INPUT -p ALL -i $LO_IF -s $WAN_IP -j ACCEPT # 2.3) Все DHCP-запросы - РАЗРЕШЕНЫ $IPTABLES -A INPUT -p UDP -i $LAN_IF --dport 67 --sport 68 -j ACCEPT # 3) Все уже установленные входящие подключения - РАЗРЕШЕНЫ $IPTABLES -A INPUT -p ALL -d $WAN_IP -m state --state ESTABLISHED,RELATED -j ACCEPT # 4) Все входящие пакеты отправляются на дополнительную фильтрацию соответственно протоколу (пока отключено) # $IPTABLES -A INPUT -p TCP -i $WAN_IF -j tcp_packets # $IPTABLES -A INPUT -p UDP -i $WAN_IF -j udp_packets # $IPTABLES -A INPUT -p ICMP -i $WAN_IF -j icmp_packets # 5) Самая интересная часть - работа с транзитными пакетами # 5.1) Сначала включаем собственно NAT $IPTABLES -t nat -A POSTROUTING -o $WAN_IF -j MASQUERADE # 5.2) Все транзитные пакеты по уже установленным соединениям - РАЗРЕШЕНЫ $IPTABLES -A FORWARD -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT # 5.3) Разрешим все пакеты для сервера и Ольги SERVER_MAC="00:1A:64:A3:60:62" OLGA_MAC="00:1F:D0:1A:C7:47" $IPTABLES -A FORWARD -p ALL -m mac --mac-source $SERVER_MAC -j ACCEPT $IPTABLES -A FORWARD -p ALL -m mac --mac-source $OLGA_MAC -j ACCEPT # 5.4) Разрешим VPN-соединения с УФК для Галины Ивановны GI_MAC="00:1F:C6:B5:80:82" OFK_IP="89.184.228.220" UFK_IP="81.24.131.84" $IPTABLES -A FORWARD -p TCP -m mac --mac-source $GI_MAC --destination $OFK_IP -j ACCEPT $IPTABLES -A FORWARD -p TCP -m mac --mac-source $GI_MAC --destination $UFK_IP -j ACCEPT # 5.5) Для двух машин включаем Контур-Экстерн OA_MAC="00:50:8D:B7:9D:4C" VERBA_MAC="00:19:21:20:D8:34" PETROTAX_IP="81.176.70.76" $IPTABLES -A FORWARD -p TCP -m mac --mac-source $OA_MAC --destination $PETROTAX_IP -j ACCEPT $IPTABLES -A FORWARD -p TCP -m mac --mac-source $VERBA_MAC --destination $PETROTAX_IP -j ACCEPT # 5.6) Теперь список пользователей почты; им раскроем только определенные порты SMTP_PORT=25 POP3_PORT=110 IMAP_PORT=143 IMAP_SSL_PORT=993 # ------ MOROZOVA_MAC="00:19:21:41:18:5A" ANIKEEVA_MAC="00:50:8D:B7:9D:53" IONINA_MAC="00:0B:6A:5F:AA:9D" SEMENOVA_MAC="00:1B:FC:94:43:E7"

for port in "$SMTP_PORT" "$POP3_PORT" "$IMAP_PORT" "$IMAP_SSL_PORT" do for usermac in "$MOROZOVA_MAC" "$ANIKEEVA_MAC" "$IONINA_MAC" "$VERBA_MAC" "$SEMENOVA_MAC" do $IPTABLES -A FORWARD -p TCP -m mac --mac-source $usermac --destination-port $port -j ACCEPT done done # 5.7) Двум машинам нужен доступ на polets.ru SKORIK_MAC="00:1E:90:C4:55:F7" RESHETNIKOVA_MAC="00:14:5E:41:0C:35" # ------ POLETS_IP="86.110.193.37"

$IPTABLES -A FORWARD -p TCP -m mac --mac-source $SKORIK_MAC --destination $POLETS_IP -j ACCEPT $IPTABLES -A FORWARD -p TCP -m mac --mac-source $RESHETNIKOVA_MAC --destination $POLETS_IP -j ACCEPT # 5.8) Всем остальным - зарубить всё нах =)

$IPTABLES -P FORWARD REJECT

#51462

GlebHappy блин, вообще круто. Долго ты разбирался что бы так легко iptables настраивать?

#51471

Чудодейственная сила копипасты wink
На ОпенНете есть огроменная статья про iptables, а в приложении к ней идут примеры конфигурационных файлов.

#51504
GlebHappy написал:
что можно убавить, что прибавить, а что сделано неверно.

Чтобы знать что убавить, а что прибавить надо знать что вы хотели в итоге получить ;). Чем подробнее тем лучше ).

#51510

По пунктам - в роли роутера выступает машина времен царя Гороха (PIII-256 RAM). С одной стороны (по eth0) она подключена к ADSL-роутеру, с другой стороны (eth1) глядит в сеть. Попутно раздает DHCP-адреса и т.д.
Её задача - просто ограничивать нашим бойким теткам доступы к ВКонтакте и прочим дляработынеполезным ресурсам (кроме меня и ГБ Ольги) :D Что я и постарался максимально комментированно расписать в правилах пункта 5.

#51513

Да... Не плохой конфигчик... Пару приемов возьму на вооружение.

#51530

GlebHappy, при таких условиях никаких нареканий нету. Очень грамотно сделали, ИМХО =).

От себя бы посоветовал регулировать доступ по http через прокси. Но тут понадобится побольше оперативки, если требуется чтобы быстро все открывалось.

#51548

Тогда ещё два вопроса знатокам smile

1) Возможен ли какой-то скриптовой вариант, чтобы не использовать IP-адреса для внешних сайтов??? Допустим, чтобы вместо

text
POLETS_IP="86.110.193.37"

использовалось что-то вроде

text
POLETS_IP=`dns_to_ip polets.ru`

2) Возможен ли какой-нибудь аккуратный способ задания правил сразу для группы хостов/портов??? Чтобы уродские циклы вроде 5.6) не использовать. Аналог таблиц из ipfw был бы идеальным вариантом smile

#51765

1)

text
POLETS_IP=$(resolveip ya.ru | awk '{print $6'})

получаем список IP который нужно завернуть в массив и обходить циклом.
если у домена всего 1 IP, можно и так оставить, но на будущие лучше обход циклом прикрутить.

#51991
system-root написал:
text
POLETS_IP=$(resolveip ya.ru | awk '{print $6'})

Ой, а у меня нет такой утилитки - resolveip :(
Сразу хочу уточнить, что я использую куцый вариант Ubuntu Hardy Server под именем TurnKeyLinux Core... и всем его советую :rolleyes:

#52004

resolveip поставляется вместе с mysql
http://linux.die.net/man/1/resolveip
можете поставить где нибудь mysql 5.х+ и потом забрать от туда /usr/bin/resolveip - он работает и без mysql.

#54149

Так, сегодня озадачился пробросом порта для удаленного управления по RDP smile

Что имеем по iptables -t nat -L:

text
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             192.168.1.2         tcp dpt:3389 to:192.168.2.2:3389 

Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- anywhere anywhere SNAT tcp -- anywhere 192.168.2.2 tcp dpt:3389 to:192.168.1.2

Chain OUTPUT (policy ACCEPT) target prot opt source destination

Ситуация такова, что нужно взять пакеты, адресованные на порт 3389 со стороны внешнего интерфейса и форвардить их на 192.168.2.2:3389. ЧЯДНТ?

#54150
GlebHappy написал:
MASQUERADE all -- anywhere anywhere
SNAT tcp -- anywhere 192.168.2.2 tcp dpt:3389 to:192.168.1.2

это как?

#54156

Первая строка просто включает NAT.
Вторая взята из вроде как рабочего примера организации проброса smile

#54159

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

#54161

Хм, а что делать если мне нужно одновременно и то, и другое??? А именно:
1) Вся подсеть 192.168.2.0/24 должна ходить в интернет через NAT по адресу eth1=192.168.2.1 (внутренний адрес роутера)
.2) При этом все пакеты, приходящие снаружи на роутер (внешний адрес eth0=192.168.1.2) на порт 3389, должны переправляться внутрь сети по адресу 192.168.2.2:3389

:o

#54163

вы путаете snat и dnat
оставьте в прероутинг - днат, а в построутинг - маскарад

#54164
text
root@core:~# iptables -L -t nat
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
DNAT       tcp  --  anywhere             192.168.1.2         tcp dpt:3389 to:192.168.2.2:3389 

Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- anywhere anywhere

Chain OUTPUT (policy ACCEPT) target prot opt source destination

А всё равно не куку :(

#54167

вы лучше покажите не вывод, а сам конфиг в этой части

#54169

Ой smile Мой буратинизм оказался весьма фееричным - по умолчанию для FORWARD стояло действие DROP :D
Стоило прописать

text
iptables -A FORWARD -i eth0 -d 192.168.2.2 -j ACCEPT

и всё прочихалось :D

Войдите или зарегистрируйтесь, чтобы ответить.