Iptables Открытие портов.

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

Модераторы: SLEDopit, Модераторы разделов

alexcandr
Сообщения: 157
ОС: CentOS 5.3

Iptables Открытие портов.

Сообщение alexcandr »

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

Что имеем сервак с iptables. 2 интерфейся(инет и локалка)

Мне нужно открыть 20,21 порт на вход и выход для банк клиента, что нашел в сети:

$ipt -A INPUT -i $EXTIF -p tcp --dport 21 -j ACCEPT
$ipt -A INPUT -i $EXTIF -p tcp --dport 20 -j ACCEPT
где $EXTIF смотрит в мир
Я так понимаю это мы открыли порты на вход, а вот на выход я так и не понял что прописать,,,
Я так подозреваю что нужно еще и с сервака как то перенаправить их на тачку на которой установлен Банк Клиент,,,
Прощу помощи как это все реализовать.
Заранее всем спасибо.
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora

Re: Iptables Открытие портов.

Сообщение arkhnchul »

телепатия: вам надо, чтобы 20 и 21 порты были проброшены до машины буха из внешки (21 и 20 - ftp для банк клиента? wtf?!)
тогда примерно так:
iptables -t filter -A FORWARD -d ip_буха -p tcp -m multiport -dports 20,21 -j ACCEPT
iptables -t filter -A FORWARD -s ip_буха -p tcp -m multiport -dports 20,21 -j ACCEPT
iptables -t nat -A PREROUTING -s ip_сервака_банка -p tcp -m multiport -dports 20,21 -j DNAT --to-destination ip_буха

как-то в оном направлении... а вообще напишите подробнее.
Losing is fun!
Спасибо сказали:
alexcandr
Сообщения: 157
ОС: CentOS 5.3

Re: Iptables Открытие портов.

Сообщение alexcandr »

Подробнее

Значит что имеется
Сервер CentOS Iptables. на нем 2 интерфейса(eth0-смотрит в мир, eth1-локалка) инет раздается через squid.
Есть прога у буха, она работае через модем и по инету, надо сделать что б она работала через инет, в проги поддержки прокси нет,
поэтому нужно открыть порты по которым она работает, а это 20 и 21 порт,,,

На серваке проверил 21 порт открыт из вне к серваку, а вот из локалки во внешний мир закрыт,,,,Вот вроде бы и все
Спасибо сказали:
Аватара пользователя
arkhnchul
Сообщения: 2284
Статус: Толчковый инженер
ОС: Debian, Fedora

Re: Iptables Открытие портов.

Сообщение arkhnchul »

закрыт - в смысле запрещен в filter или не натится в nat-е?
Losing is fun!
Спасибо сказали:
Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Re: Iptables Открытие портов.

Сообщение yamah »

Решил не плодить темы.

Митуация. Есть компьютер с ASPLinux 11, работающий в качестве прокси. Пока сидели за шлюзом. Больших проблем не было.
Сейчас этот комп нужно настроить до уровня шлюза.

В принципе, он уже работает. Но нужно ввести ограничения:
0. Доступ из инета запретить нафик, кроме 22-го порта.
1. WEB-трафик только через прокси.
2. Доступ к электронной почте на сервере провайдера и Яндек.Ру (и, возможно, на сервере хостера сайта).
3. Разрешить из локалки и шлюза эхо-запросы, трассеровки маршерута, выяснения информации о домене (whois).
4. Свободный доступ админам из внутренней сети.
5. Доступ ко всем ресурсам шлюза из локалки.
6. Остальное закрыть наф.

Реализация IPTABLES. Все бы хорошо, но вовремя дальнейшей настройки какое-то правило отрубает доступ к шлюзу со всех хостов, включая локалку.

Код: Выделить всё

 #!/bin/sh
        IPT="iptables"
                INET="eth1"
                NET="eth0"
                NET_NET="192.168.0.0/24"
                INETIP="X.X.X.X"
                LANIP="192.168.0.100"
                ELCOM_SMTP="80.247.96.232"
                ELCOM_POP="80.247.96.232"
                YELCOM_SMTP="77.88.21.25"
                YELCOM_POP="77.88.21.25"
                UNPRIVPORTS="1024:65535"
                DNS_SERVER1="80.247.96.65"
                DNS_SERVER2="80.247.96.65"
                SYSADMIN="192.168.0.1"
        SYSADMIN2="192.168.0.2"
        SERVER="192.168.0.100"

                iptables -F INPUT
                iptables -F FORWARD
                iptables -F OUTPUT
                iptables -t nat -F PREROUTING
                iptables -t nat -F POSTROUTING
                iptables -t mangle -F

                iptables -P FORWARD DROP
                iptables -P INPUT DROP
                iptables -P OUTPUT DROP

                iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP

                iptables -A INPUT -d $INETIP -p TCP --dport 22 -j ACCEPT
      iptables -A OUTPUT -d $INETIP -p udp --sport 22 -j ACCEPT

                iptables -A INPUT -s $NET_NET -p TCP -d $LANIP -m multiport --dport 20:10000 -j ACCEPT

                iptables -A INPUT -d $INETIP -p TCP --dport $UNPRIVPORTS -m state --state ESTABLISHED,RELATED -j ACCEPT

                iptables -A INPUT -p UDP -s $DNS_SERVER1 -m state --state ESTABLISHED --sport 53 -j ACCEPT
                iptables -A INPUT -p TCP -s $DNS_SERVER1 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT
                iptables -A INPUT -p UDP -s $DNS_SERVER2 -m state --state ESTABLISHED --sport 53 -j ACCEPT
                iptables -A INPUT -p TCP -s $DNS_SERVER2 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT

                iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT
                iptables -A FORWARD -p UDP -s $DNS_SERVER1 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
                iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT

                iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT
                iptables -A FORWARD -p UDP -s $DNS_SERVER2 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
                iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT

                iptables -A FORWARD -s $NET_NET -d $ELCOM_POP -p TCP --dport 110 -j ACCEPT
                iptables -A FORWARD -s $NET_NET -d $ELCOM_SMTP -p TCP --dport 25 -j ACCEPT

                iptables -A FORWARD -s $NET_NET -d $YELCOM_POP -p TCP --dport 110 -j ACCEPT
                iptables -A FORWARD -s $NET_NET -d $YELCOM_SMTP -p TCP --dport 25 -j ACCEPT

      iptables -A FORWARD -p TCP -m state --state ESTABLISHED,RELATED -m multiport --sport 20:10000 -j ACCEPT

                iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
                iptables -A INPUT -p ALL -s $LANIP -i lo -j ACCEPT
                iptables -A INPUT -p ALL -s $INETIP -i lo -j ACCEPT
                iptables -A OUTPUT -p ALL -d 127.0.0.1 -o lo -j ACCEPT
                iptables -A OUTPUT -p ALL -s $INETIP -j ACCEPT
                iptables -A OUTPUT -p ALL -s $LANIP -j ACCEPT
                iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT

                iptables -A FORWARD -p TCP -d $SYSADMIN --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p TCP -s $SYSADMIN --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -d $SYSADMIN --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -s $SYSADMIN --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -d $SYSADMIN --icmp-type echo-reply -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -s $SYSADMIN --icmp-type echo-request -j ACCEPT

                iptables -A FORWARD -p TCP -d $SYSADMIN2 --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p TCP -s $SYSADMIN2 --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -d $SYSADMIN2 --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -s $SYSADMIN2 --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -d $SYSADMIN2 --icmp-type echo-reply -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -s $SYSADMIN2 --icmp-type echo-request -j ACCEPT

                iptables -A FORWARD -p TCP -d $SERVER --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p TCP -s $SERVER --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -d $SERVER --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -s $SERVER --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -d $SERVER --icmp-type echo-reply -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -s $SERVER --icmp-type echo-request -j ACCEPT

      iptables -A INPUT -p icmp -m icmp -i $INET --icmp-type echo-reply -j ACCEPT
      iptables -A OUTPUT -p icmp -m icmp -o $INET --icmp-type echo-request -j ACCEPT
      iptables -A INPUT -p icmp -m icmp -i $NET --icmp-type echo-reply -j ACCEPT
      iptables -A OUTPUT -p icmp -m icmp -o $NET --icmp-type echo-request -j ACCEPT

      iptables -A OUTPUT -p udp -m udp -o $INET --dport 33434:33523 --sport 32769:65535 -j ACCEPT
      iptables -A OUTPUT -p udp -m udp -o $NET --dport 33434:33523 --sport 32769:65535 -j ACCEPT
      iptables -A INPUT -p udp -m udp -i $NET --dport 33434:33523 --sport 32769:65535 -j ACCEPT

                iptables -t mangle -A PREROUTING -i $INET -j TTL --ttl-set 64

                iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP
                echo "1" > /proc/sys/net/ipv4/ip_forward


Собственно вопросы:
Где я накосячил, что у меня отваливается доступ к машине?
Как заставить работать из локалки traceroute, ping, whois?
На конструкцию

Код: Выделить всё

        #iptables -A OUTPUT -p tcp -m tcp -o $INET --dport 23 --sport $UNPRIPORTS -j ACCEPT
        #iptables -A INPUT -p tcp -m tcp -i $INET --dport $UNPRIPORTS --sport 23 -j ACCEPT ! --syn

Шлюз ругается.

Код: Выделить всё

iptables v1.3.5: invalid TCP port/service `--sport' specified
Try `iptables -h' or 'iptables --help' for more information.

Что здесь нужно сделать?
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали:
Аватара пользователя
Alex2ndr
Сообщения: 443
ОС: Debian Lenny

Re: Iptables Открытие портов.

Сообщение Alex2ndr »

yamah писал(а):
27.08.2009 14:11
Решил не плодить темы.

Митуация. Есть компьютер с ASPLinux 11, работающий в качестве прокси. Пока сидели за шлюзом. Больших проблем не было.
Сейчас этот комп нужно настроить до уровня шлюза.

В принципе, он уже работает. Но нужно ввести ограничения:
0. Доступ из инета запретить нафик, кроме 22-го порта.
1. WEB-трафик только через прокси.
2. Доступ к электронной почте на сервере провайдера и Яндек.Ру (и, возможно, на сервере хостера сайта).
3. Разрешить из локалки и шлюза эхо-запросы, трассеровки маршерута, выяснения информации о домене (whois).
4. Свободный доступ админам из внутренней сети.
5. Доступ ко всем ресурсам шлюза из локалки.
6. Остальное закрыть наф.

Реализация IPTABLES. Все бы хорошо, но вовремя дальнейшей настройки какое-то правило отрубает доступ к шлюзу со всех хостов, включая локалку.

Код: Выделить всё

 #!/bin/sh
        IPT="iptables"
                INET="eth1"
                NET="eth0"
                NET_NET="192.168.0.0/24"
                INETIP="81.201.248.234"
                LANIP="192.168.0.100"
                ELCOM_SMTP="80.247.96.232"
                ELCOM_POP="80.247.96.232"
                YELCOM_SMTP="77.88.21.25"
                YELCOM_POP="77.88.21.25"
                UNPRIVPORTS="1024:65535"
                DNS_SERVER1="80.247.96.65"
                DNS_SERVER2="80.247.96.65"
                SYSADMIN="192.168.0.1"
        SYSADMIN2="192.168.0.2"
        SERVER="192.168.0.100"

                iptables -F INPUT
                iptables -F FORWARD
                iptables -F OUTPUT
                iptables -t nat -F PREROUTING
                iptables -t nat -F POSTROUTING
                iptables -t mangle -F

                iptables -P FORWARD DROP
                iptables -P INPUT DROP
                iptables -P OUTPUT DROP

                iptables -A INPUT -p TCP ! --syn -m state --state NEW -j DROP

                iptables -A INPUT -d $INETIP -p TCP --dport 22 -j ACCEPT
      iptables -A OUTPUT -d $INETIP -p udp --sport 22 -j ACCEPT

                iptables -A INPUT -s $NET_NET -p TCP -d $LANIP -m multiport --dport 20:10000 -j ACCEPT

                iptables -A INPUT -d $INETIP -p TCP --dport $UNPRIVPORTS -m state --state ESTABLISHED,RELATED -j ACCEPT

                iptables -A INPUT -p UDP -s $DNS_SERVER1 -m state --state ESTABLISHED --sport 53 -j ACCEPT
                iptables -A INPUT -p TCP -s $DNS_SERVER1 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT
                iptables -A INPUT -p UDP -s $DNS_SERVER2 -m state --state ESTABLISHED --sport 53 -j ACCEPT
                iptables -A INPUT -p TCP -s $DNS_SERVER2 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT

                iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT
                iptables -A FORWARD -p UDP -s $DNS_SERVER1 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
                iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT

                iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT
                iptables -A FORWARD -p UDP -s $DNS_SERVER2 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
                iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT

                iptables -A FORWARD -s $NET_NET -d $ELCOM_POP -p TCP --dport 110 -j ACCEPT
                iptables -A FORWARD -s $NET_NET -d $ELCOM_SMTP -p TCP --dport 25 -j ACCEPT

                iptables -A FORWARD -s $NET_NET -d $YELCOM_POP -p TCP --dport 110 -j ACCEPT
                iptables -A FORWARD -s $NET_NET -d $YELCOM_SMTP -p TCP --dport 25 -j ACCEPT

      iptables -A FORWARD -p TCP -m state --state ESTABLISHED,RELATED -m multiport --sport 20:10000 -j ACCEPT

                iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
                iptables -A INPUT -p ALL -s $LANIP -i lo -j ACCEPT
                iptables -A INPUT -p ALL -s $INETIP -i lo -j ACCEPT
                iptables -A OUTPUT -p ALL -d 127.0.0.1 -o lo -j ACCEPT
                iptables -A OUTPUT -p ALL -s $INETIP -j ACCEPT
                iptables -A OUTPUT -p ALL -s $LANIP -j ACCEPT
                iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT

                iptables -A FORWARD -p TCP -d $SYSADMIN --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p TCP -s $SYSADMIN --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -d $SYSADMIN --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -s $SYSADMIN --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -d $SYSADMIN --icmp-type echo-reply -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -s $SYSADMIN --icmp-type echo-request -j ACCEPT

                iptables -A FORWARD -p TCP -d $SYSADMIN2 --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p TCP -s $SYSADMIN2 --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -d $SYSADMIN2 --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -s $SYSADMIN2 --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -d $SYSADMIN2 --icmp-type echo-reply -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -s $SYSADMIN2 --icmp-type echo-request -j ACCEPT

                iptables -A FORWARD -p TCP -d $SERVER --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p TCP -s $SERVER --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -d $SERVER --dport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p UDP -s $SERVER --sport $UNPRIVPORTS -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -d $SERVER --icmp-type echo-reply -j ACCEPT
                iptables -A FORWARD -p icmp -m icmp -s $SERVER --icmp-type echo-request -j ACCEPT

      iptables -A INPUT -p icmp -m icmp -i $INET --icmp-type echo-reply -j ACCEPT
      iptables -A OUTPUT -p icmp -m icmp -o $INET --icmp-type echo-request -j ACCEPT
      iptables -A INPUT -p icmp -m icmp -i $NET --icmp-type echo-reply -j ACCEPT
      iptables -A OUTPUT -p icmp -m icmp -o $NET --icmp-type echo-request -j ACCEPT

      iptables -A OUTPUT -p udp -m udp -o $INET --dport 33434:33523 --sport 32769:65535 -j ACCEPT
      iptables -A OUTPUT -p udp -m udp -o $NET --dport 33434:33523 --sport 32769:65535 -j ACCEPT
      iptables -A INPUT -p udp -m udp -i $NET --dport 33434:33523 --sport 32769:65535 -j ACCEPT

                iptables -t mangle -A PREROUTING -i $INET -j TTL --ttl-set 64

                iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP
                echo "1" > /proc/sys/net/ipv4/ip_forward


Собственно вопросы:
Где я накосячил, что у меня отваливается доступ к машине?
Как заставить работать из локалки traceroute, ping, whois?
На конструкцию

Код: Выделить всё

        #iptables -A OUTPUT -p tcp -m tcp -o $INET --dport 23 --sport $UNPRIPORTS -j ACCEPT
        #iptables -A INPUT -p tcp -m tcp -i $INET --dport $UNPRIPORTS --sport 23 -j ACCEPT ! --syn

Шлюз ругается.

Код: Выделить всё

iptables v1.3.5: invalid TCP port/service `--sport' specified
Try `iptables -h' or 'iptables --help' for more information.

Что здесь нужно сделать?

Дюже у вас сложная конфига - с первого раза и не осилишь :)
Рекомендую написать новую и отлаживать по очереди при политике вида "все что на разрешено запрещено"(потому что лично мне например проще написать новую для вас чем разобраться в том что вы наворотили)
1. Добиться работы ssh
2. Добиться работы прокси
3. Добиться работы почты.
4. Обеспечить доступ из локалки
Вас такой вариант устраивает?
PS Даже если править ваш конфиг то для того чтобы это все нормально работало придеться переписать почти каждую строку
Спасибо сказали: