Доступ по SSH извне (iptables)

Автор LinuxID, 21 ноября 2013, 00:13:21

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

LinuxID

Всем доброго времени суток! Появилась проблема с доступом к шлюзу по SSH извне. Подскажите плиз, где я не прав.

#!/bin/bash

echo "Обнуляем правила"
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

echo "Блокируем вообще весь трафик"
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

export WAN=eth0
export LAN=eth1

iptables -I INPUT   -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -I OUTPUT  -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

echo "Закрываем снаружи все сервисы кроме разрешенных"
echo "Работаем только для внутренней сети."
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -I INPUT 1 -i ${LAN} -j ACCEPT
iptables -A INPUT -p UDP --dport bootps -i !${LAN} -j REJECT
iptables -A INPUT -p UDP --dport domain -i !${LAN} -j REJECT
iptables -A INPUT -p TCP -i ${WAN} -d 0/0 --dport 0:1023 -j DROP
iptables -A INPUT -p UDP -i ${WAN} -d 0/0 --dport 0:1023 -j DROP

echo "Сбрасываем ошибочные пакеты"
iptables -I INPUT   -m conntrack --ctstate INVALID -j DROP
iptables -I FORWARD -m conntrack --ctstate INVALID -j DROP
iptables -I OUTPUT  -m conntrack --ctstate INVALID -j DROP

echo "Сбрасываем фрагментированные пакеты"
iptables -A INPUT -f -j DROP
iptables -A FORWARD -f -j DROP
iptables -A OUTPUT -f -j DROP

echo "Блочим внешний MULTICAST D(E)"
iptables -A INPUT   -s 224.0.0.0/4 -j DROP
iptables -A FORWARD -s 224.0.0.0/4 -j DROP
iptables -A OUTPUT  -d 224.0.0.0/4 -j DROP

echo "Разрешаем только ECHO"
iptables -A INPUT   -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT   -p icmp --icmp-type 8 -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type 0 -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT  -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT  -p icmp --icmp-type 8 -j ACCEPT

echo "Фильтр для SELF(IO) - ssh,ntp,http,dns,https,rsync"
iptables -A INPUT  -i ${WAN} -p tcp -m multiport --ports 22,53,80,123,443,873 -j ACCEPT
iptables -A INPUT  -i ${WAN} -p udp -m multiport --ports 22,53,80,123 -j ACCEPT
iptables -A OUTPUT -o ${WAN} -p tcp -m multiport --ports 22,53,80,123,443,873 -j ACCEPT
iptables -A OUTPUT -o ${WAN} -p udp -m multiport --ports 22,53,80,123 -j ACCEPT

echo "Настраиваем доступ извне по SSH к серверам."
iptables -t nat -A PREROUTING -p tcp --dport 22004 -i ${WAN} -j DNAT --to 192.168.0.4:22
iptables -t nat -A PREROUTING -p tcp --dport 22105 -i ${WAN} -j DNAT --to 192.168.1.5:22
iptables -t nat -A PREROUTING -p tcp --dport 22110 -i ${WAN} -j DNAT --to 192.168.1.10:22

echo "Добавляем правила для перенаправления трафика (NAT)"
echo "Отбрасывем LAN to LAN"

iptables -A FORWARD -i ${LAN} -d 192.168.0.0/22 -j DROP

echo "Фильтр для FORWARD - ssh,ntp,http,dns,https,rsync,5005 & 8080-АИСГЗ,ICQ"
echo "-=> Administrator"
iptables -A FORWARD -i ${LAN} -s 192.168.0.4 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.4 -j ACCEPT

iptables -A FORWARD -i ${LAN} -s 192.168.3.100 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.3.100 -j ACCEPT

echo "-=> For All"
iptables -A FORWARD -i ${LAN} -s 192.168.0.0/22 -p tcp -m multiport --ports 20,21,22,53,80,123,443,873,5190 -j ACCEPT
iptables -A FORWARD -i ${LAN} -s 192.168.0.0/22 -p udp -m multiport --ports 22,53,80,123,5190 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.0/22 -p tcp -m multiport --ports 20,21,22,53,80,123,443,873,5190 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.0/22 -p udp -m multiport --ports 22,53,80,123,5190 -j ACCEPT

echo "-=> АИСГЗ & Clouds 1C"
iptables -A FORWARD -i ${LAN} -s 192.168.0.0/22 -p tcp -m multiport --ports 3389,4433,5005,7500,7501,8080,64738 -j ACCEPT
iptables -A FORWARD -i ${LAN} -s 192.168.0.0/22 -p udp -m multiport --ports 3389,4433,5005,7500,7501,8080,64738 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.0/22 -p tcp -m multiport --ports 3389,4433,5005,7500,7501,8080,64738 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.0/22 -p udp -m multiport --ports 3389,4433,5005,7500,7501,8080,64738 -j ACCEPT

iptables -A FORWARD -i ${LAN} -s 192.168.0.36 -p udp -m multiport --ports 3960,3962 -j ACCEPT
iptables -A FORWARD -i ${WAN} -d 192.168.0.36 -p udp -m multiport --ports 3960,3962 -j ACCEPT


echo "Маскируем внутренние IP под внешний для инета"
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

echo "Выравниваем значение MTU воизбежании глюков с сайтами"
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

echo "Сообщаем ядру о разрешении перенаправления всего трафика"
echo 1 > /proc/sys/net/ipv4/ip_forward
for f in /proc/sys/net/ipv4/conf/*/rp_filter ; do echo 1 > $f ; done
Правильно заданный вопрос - половина ответа!

DM

iptables-save сделай и посмотри что за чем идет
скорее всего
iptables -A INPUT -p TCP -i ${WAN} -d 0/0 --dport 0:1023 -j DROP
идет раньше чем
iptables -A INPUT  -i ${WAN} -p tcp -m multiport --ports 22,53,80,123,443,873 -j ACCEPT
и соотв все дропает
пакеты обрабатываются правилами по порядку и если пакет соотвествует условию выполняется действие и дальше обработка не идет.

gardarea51

#2
Хорошим решением для вас будет скрипт переписать так, чтобы не путались таблицы. Сначала блок правил для PREROUTING, потом INPUT.. и так далее. Зрительно будет видно как идут пакеты по цепочкам.

LinuxID

Ну я так и предполагал.
Собственно справился сам пока ждал ответа, но все равно спасибо.
Правильно заданный вопрос - половина ответа!