помогите поправить iptables

Автор mihail_1, 10 октября 2013, 16:51:19

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

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

mihail_1

#eth0 IPLOC - моя локальная сеть
#eth1 IPEXT1 - первый провайдер (внутренняя сеть провайдера)
#ppp0 IPEXT_PPP - первый провайдер (интернет L2TP)
#eth2 IPEXT2 - второй провайдер (интернет IPoA)

IPTABLES="/sbin/iptables"

$IPTABLES -F
$IPTABLES -F -t nat

$IPTABLES -P INPUT DROP
$IPTABLES -P FORWARD DROP
$IPTABLES -P OUTPUT ACCEPT

$IPTABLES -A INPUT -i lo -p ALL -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPLOC -d $IPLOC -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT1 -d $IPEXT1 -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT_PPP -d $IPEXT_PPP -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT2 -d $IPEXT2 -j ACCEPT

$IPTABLES -A INPUT -i eth0        -p tcp --sport 1023: --dport 21 -j ACCEPT

$IPTABLES -A INPUT -i eth0        -p tcp --sport 1023: --dport 22 -j ACCEPT

$IPTABLES -A INPUT -i eth0        -p tcp --sport 1023: --dport 25 -j ACCEPT
$IPTABLES -A INPUT -i ppp0        -p tcp --sport 1023: -d $IPEXT_PPP --dport 25 -j ACCEPT

$IPTABLES -A INPUT -i eth0 -p tcp --sport 1023 --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i ppp0 -p tcp --sport 1023 --dport 53 -j ACCEPT

$IPTABLES -A INPUT -i eth0        -p tcp --sport 1023: --dport 80 -j ACCEPT
$IPTABLES -A INPUT -i ppp0        -p tcp --sport 1023: --dport 80 -j ACCEPT

$IPTABLES -A INPUT -i eth+ -p tcp -d $IPLOC --dport 113 -j REJECT --reject-with tcp-reset

$IPTABLES -A INPUT -i eth0 -p udp --sport 1023: --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i ppp0 -p udp --sport 1023: --dport 53 -j ACCEPT

$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPLOC --icmp-type 0 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPLOC --icmp-type 3 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPLOC --icmp-type 5 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPLOC --icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IP --icmp-type 11 -j ACCEPT

$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT_PPP --icmp-type 0 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT_PPP --icmp-type 3 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT_PPP --icmp-type 5 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT_PPP --icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT_PPP --icmp-type 11 -j ACCEPT

$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT1 --icmp-type 0 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT1 --icmp-type 3 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT1 --icmp-type 5 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT1 --icmp-type 8 -j ACCEPT
$IPTABLES -A INPUT -i eth+ -p ICMP -d $IPEXT1 --icmp-type 11 -j ACCEPT

$IPTABLES -A INPUT -p ALL -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPTABLES -A FORWARD -j ACCEPT
$IPTABLES -t nat -A POSTROUTING -s 192.168.0.1/24 -o ppp0 -j SNAT --to-source $IPEXT_PPP

$IPTABLES -A INPUT -p tcp -j REJECT --reject-with tcp-reset
$IPTABLES -A INPUT -p udp -j REJECT

$IPTABLES -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Где я все настеж открыл через eth2?
Есть ли доступ снаружи в мою локальную сеть?




apollyon

eth2 закрыт дефолтным правилом.
а чего все входящие соединения принимаются только с одного порта 1023?

mihail_1

Я мало понимаю в том что означают эти настройки. Когда то мне это написали и все работало хорошо пока не добавил второго провайдера.
Думал что он полностью закрыт. Но по 22 порту пришли китайцы и стали подбирать пароль. Добавил строчку
$IPTABLES -A INPUT -i eth2 -p tcp --sport 1023: --dport 22 -j DROP
хотя думал, что это ничего не изменит, но подключения по 22 порту прекратились. Поскольку это помогло боюсь там все остальное открыто.

Я не знаю что задает --sport, но предполагаю, что поскольку после "1023" стоит ":" это не одно число, а диапазон, открытый вправо. (возможно я и ошибаюсь, но соенинения происходят обычно не с порта 1023, а с гораздо больших).

apollyon

пардон, глянул мельком, двоеточие не заметил...
а чтобы разбираться, лучше доки почитать, а не сразу кричать "на помощь". отличный ман на русском, всё становится понятно
http://www.opennet.ru/docs/RUS/iptables/

и да, для борьбы с брутфорсом можно использовать fail2ban

mihail_1

Там конечно хорошо все написано, но там точно не сказано где у меня дыра.

$IPTABLES -F
должен очистить все правила

$IPTABLES -P INPUT DROP
должен запретить все входящее

второй провайдер упоминается только в этой строчке
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT2 -d $IPEXT2 -j ACCEPT
Зачем она и что делает я так и не понял

(22 порт должен быть доступен только из моей локальной сети, поэтому врятли есть смысл защищаться от подбора пароля, когда проще просто закрыть доступ, а через eth2 вообще нужны только исходящие соединения)

apollyon

непонятная запись пропускает все пакеты для всех протоколов, которые пришли на интерфейс lo с исходящим и входящим адресами $IPEXT2, смысла особо не вижу в ней.

mihail_1

Таких записей несколько:
$IPTABLES -A INPUT -i lo -p ALL -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPLOC -d $IPLOC -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT1 -d $IPEXT1 -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT_PPP -d $IPEXT_PPP -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT2 -d $IPEXT2 -j ACCEPT
Они все не нужны?

endru

$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT1 -d $IPEXT1 -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT_PPP -d $IPEXT_PPP -j ACCEPT
$IPTABLES -A INPUT -i lo -p ALL -s $IPEXT2 -d $IPEXT2 -j ACCEPT

попробуйте не использовать эти правила. их назначения я не представляю...

yura_n

Цитата: mihail_1 от 10 октября 2013, 19:10:32Они все не нужны?
Кто то пытался настраивать правила для локальных процессов... Попробуйте заменить все пять на эти два:

$IPTABLES -A INPUT -i lo -j ACCEPT
$IPTABLES -A OUTPUT -o lo -j ACCEPT

mihail_1

И все же меня сильно волнует, эти ли строчки позволили установить соединение по 22 порту через eth2, и не будет ли такого же эффекта если я заменю те пять на эти две новые?

yura_n

#10
Интерфейс lo (интерфейс обратной петли) предназначен для взаимодействия локальных приложений между собой, посредством сетевых соединений. То есть, если какое-то локальное приложение захочет обратиться к другому локальному приложению, используя для этого сетевое соединение, оно использует интерфейс обратной петли, посредством которого имитируется сетевое соединение. Обычно для интерфейса lo разрешаются все соединения, что и указано в этих двух строках. Конечно можно настроить какие-то особенные правила, как в вашем случае, но единственный мотив такого действия, который мне приходит в голову, это проверка работы приложений в каких-то специфических условиях.

mihail_1

При тестировании приложений я действительно использовал свой апач вместо удаленных, так что эти строчки наверно были полезны. Но они ли позволили снаружи открывать соединения, которые не должны открываться? Есть ли какой-то способ протестировать что доступно снаружи (находясь внутри), чтобы понять что это разрешает?

apollyon

долгий вдумчиый взгляд на правила iptables. снаружи можно nmap-ом посмотреть