Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: настройка IPTables  (Прочитано 2359 раз)

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

Оффлайн riff6666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
настройка IPTables
« : 26 Апреля 2018, 05:35:27 »
Всем добра. Учусь настраивать iptables. Задача разрешить всем инет, но определенным ip заблокировать.
создал *.sh файл для удобства и туда пишу правила. Настроил так что у всех в сети инет есть, при условии того что есть правило
$IPT -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE
для запрета пытаюсь добавить правило в цепочку FORWARD. На сколько я понимаю транзитные пакеты там и надо обрабатывать.
$IPT -A FORWARD -s 192.168.1.7 -j DROP
Но после применения всех правил. Инет есть везде, даже где пакеты должны быть отброшены.
Я не совсем разобрался с иерархией применения правил. Может не туда запрет вставляю?
Вот код файла *.sh
#!/bin/bash
export IPT="iptables"
# Внешний интерфейс
export WAN=eth0
export WAN_IP=10.0.2.15
# Локальная сеть
export LAN1=eth1
export LAN1_IP_RANGE=192.168.1.0/24
# Очищаем правила
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
# Запрещаем все, что не разрешено
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# открываем доступ к SSH
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
$IPT -A INPUT -i $LAN1 -p tcp --dport 22 -j ACCEPT
# разрешаем установленные подключения
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Разрешаем localhost и локалку
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A INPUT -i $LAN1 -j ACCEPT
$IPT -A OUTPUT -o $LAN1 -j ACCEPT
$IPT -A INPUT -i $WAN -j ACCEPT
$IPT -A OUTPUT -o $WAN -j ACCEPT

# Разрешаем порты
$IPT -A INPUT -p tcp -m tcp --dport 3128 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
#$IPT -A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

#$IPT -A FORWARD -i $LAN1 -j DROP #?????????
#$IPT -A INPUT -i $LAN1 -j REJECT #?????????


# Разрешаем доступ из локалки наружу
$IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT

# Закрываем доступ снаружи в локалку
$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT
# Включаем NAT
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE
$IPT -A FORWARD -s 192.168.1.7 -j DROP

# Сохраняем правила
/sbin/iptables-save  > /etc/iptables.rules
« Последнее редактирование: 14 Мая 2018, 07:45:04 от riff6666 »

Оффлайн botsman

  • Активист
  • *
  • Сообщений: 296
    • Просмотр профиля
# Сохраняем правила
/sbin/iptables-save  > /etc/iptables.rules
Этой командой Вы сохраняете правила в файл... Вот и предоставьте его (здесь нет трансляторов скриптов, либо они в отпуске...)

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Правила работают в порядке прохождения пакета по таблицам и цепочкам. Соответсвенно, важен их порядок внутри цепочки.
Считается хорошим тоном фильтрацию пакетов делать в таблице filter, что  Вы и делаете.

А вот порядок правил в цепочке Вы. рассматривая свой скрипт, практически никогда не угадаете. Да и не зачем угадывать. Достаточно просмотреть ЗАГРУЖЕННЫЕ в ядро правила. Команда sudo iiptables-save считывает все правила загруженные в ядро именно в том порядке, в котором они работают в цепочках.
Именно поэтому мы здесь всегда и просим предоставлять выхлоп этой команды.
Попробуйте и. скорее всего, увидите причину неработоспособности Вашего набора правил.

Оффлайн riff6666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
# Generated by iptables-save v1.4.21 on Thu Apr 26 12:01:47 2018
*mangle
:PREROUTING ACCEPT [20980:11109162]
:INPUT ACCEPT [6017:1676623]
:FORWARD ACCEPT [14963:9432539]
:OUTPUT ACCEPT [5838:945017]
:POSTROUTING ACCEPT [20801:10377556]
COMMIT
# Completed on Thu Apr 26 12:01:47 2018
# Generated by iptables-save v1.4.21 on Thu Apr 26 12:01:47 2018
*nat
:PREROUTING ACCEPT [1171:69737]
:INPUT ACCEPT [415:30425]
:OUTPUT ACCEPT [1804:133691]
:POSTROUTING ACCEPT [1804:133691]
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Thu Apr 26 12:01:47 2018
# Generated by iptables-save v1.4.21 on Thu Apr 26 12:01:47 2018
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -j DROP
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 192.168.1.7/32 -j DROP
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
COMMIT
# Completed on Thu Apr 26 12:01:47 2018

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Ну? Сами-то видите?
Вот искомая цепочка.
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth1 -j DROP
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 192.168.1.7/32 -j DROP

Оффлайн riff6666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Ну? Сами-то видите?
Ну насколько я могу судить. Происходит следующее с пакетами.
По строкам
1 - Разрешаем установленные соединения
2 - сбрасываем весь трафик идущий на eth1 он у меня внутренний
3 - разрешаем трафик идущий с локальной сети наружу
4 - сбрасываем соединение
5 - сбрасываем трафик по данному ip.
Вы имеете в виду то, что я неправильно выстроил последовательность правил?
Как я понимаю сначала надо запретить весь трафик, затем сбрасываем соединения снаружи в локалку, затем разрешаем трафик из локалки наружу, разрешаем установленные соединения, сбрасываем соединения по заданному ip. Вот так правильно выстроить прохождение пакетов?

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
1 - Разрешаем установленные соединения
уверены? Только установленные?

Пользователь добавил сообщение 27 Апреля 2018, 10:32:29:
2 - сбрасываем весь трафик идущий на eth1 он у меня внутренний
3 - разрешаем трафик идущий с локальной сети наружу
проанализируйте, какие пакеты смогут добраться до 3-ого правила не споткнувшись на 2-ом?
« Последнее редактирование: 27 Апреля 2018, 10:33:50 от fisher74 »

Оффлайн riff6666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
fisher74, сейчас переделал вот так
# Generated by iptables-save v1.4.21 on Fri Apr 27 16:02:46 2018
*mangle
:PREROUTING ACCEPT [112:7057]
:INPUT ACCEPT [20:2907]
:FORWARD ACCEPT [92:4150]
:OUTPUT ACCEPT [80:8291]
:POSTROUTING ACCEPT [109:9759]
COMMIT
# Completed on Fri Apr 27 16:02:46 2018
# Generated by iptables-save v1.4.21 on Fri Apr 27 16:02:46 2018
*nat
:PREROUTING ACCEPT [13:732]
:INPUT ACCEPT [4:264]
:OUTPUT ACCEPT [2:168]
:POSTROUTING ACCEPT [2:168]
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
COMMIT
# Completed on Fri Apr 27 16:02:46 2018
# Generated by iptables-save v1.4.21 on Fri Apr 27 16:02:46 2018
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth1 -j ACCEPT
-A INPUT -i eth0 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.1.7/32 -j DROP
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
COMMIT
# Completed on Fri Apr 27 16:02:46 2018
цепочка FORWARD
-A FORWARD -i eth1 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.1.7/32 -j DROP
получается
1 - разрешаем трафик из локалки наружу
2 - сбрасываем соединения из мира внутрь
3 - разрешаем новые, и установленные соединения
4 - разрешаем трафик по ip
Сейчас получается после применения таких правил транзитный трафик не идет.
А если смотреть глобально то сначала очищаем все правила, политику на FORWARD ставить drop, а потом уже разрешать что необходимо или нет?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
:OUTPUT DROP [0:0]

-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
А был ли смысл?…

Пользователь добавил сообщение 27 Апреля 2018, 12:30:08:
политику на FORWARD ставить drop
Конечно.
А вот порядок правил стоит поменять.
И использовать conntrack а не state.
« Последнее редактирование: 27 Апреля 2018, 12:30:08 от AnrDaemon »
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
2 - сбрасываем соединения из мира внутрь
3 - разрешаем новые, и установленные соединения
как Вы думаете? Установленные соединения входят с число "из мира вовнутрь" или нет?
4 - разрешаем трафик по ip
здесь я думаю Вы просто опечатались.

А если смотреть глобально то сначала очищаем все правила, политику на FORWARD ставить drop, а потом уже разрешать что необходимо или нет?
Это называется политика "всё запрещено кроме того, что разрешено".
Судя по заголовку темы, Вам нужна обратная политика - "Всё разрешено, кроме того, что запрещено"
По факту Вы идёте по пути первой из них.
Пора бы уже определиться.
Выбор политики - концептуальный момент при построении шлюза.

И, да, поддерживаю предыдущего оратора.

Оффлайн riff6666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
сейчас вроде изменил как было сказано. вот что получилось. ip 192.168.1.7 добавил в цепочку POSTROUTING это SNAT --to-source 10.0.2.15(ip virtualbox). получается пошел по правильной политики, всем запретил и по одному разрешаю. Но если в настройках клиента dns server выставить 8.8.8.8 все работает, но если 192.168.1.1(адрес сервера) то связи нет хотя на сервере 53 порт открыт. не могу понять какое еще правило надо добавить для того что бы DNS заработал на клиенте.
# Generated by iptables-save v1.4.21 on Mon May 14 09:44:26 2018
*mangle
:PREROUTING ACCEPT [123265:38436148]
:INPUT ACCEPT [95964:32391434]
:FORWARD ACCEPT [27301:6044714]
:OUTPUT ACCEPT [56079:12591108]
:POSTROUTING ACCEPT [63681:17223332]
COMMIT
# Completed on Mon May 14 09:44:26 2018
# Generated by iptables-save v1.4.21 on Mon May 14 09:44:26 2018
*nat
:PREROUTING ACCEPT [2017:129686]
:INPUT ACCEPT [2:104]
:OUTPUT ACCEPT [7:440]
:POSTROUTING ACCEPT [7:440]
-A POSTROUTING -s 192.168.1.7/32 ! -d 192.168.0.0/24 -j SNAT --to-source 10.0.2.15
COMMIT
# Completed on Mon May 14 09:44:26 2018
# Generated by iptables-save v1.4.21 on Mon May 14 09:44:26 2018
*filter
:INPUT DROP [139:9207]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m state --conntrack RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
-A OUTPUT -m state --contrack RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
COMMIT
# Completed on Mon May 14 09:44:26 2018

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13756
    • Просмотр профиля
Re: настройка IPTables
« Ответ #11 : 14 Мая 2018, 08:15:58 »
-A INPUT -i eth1 -p tcp -m tcp --dport 53 -j ACCEPT
Уверены, что всё указали для работы DNS?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28366
    • Просмотр профиля
Re: настройка IPTables
« Ответ #12 : 14 Мая 2018, 15:34:30 »
DNS использует udp в первую очередь. Только если ответ не влезает в одну датаграмму, используется TCP.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн botsman

  • Активист
  • *
  • Сообщений: 296
    • Просмотр профиля
Re: настройка IPTables
« Ответ #13 : 14 Мая 2018, 15:45:01 »
Сдается мне что DNS все-таки использует UDP... И только при передаче зон и при превышении ответа 512 байт - tcp...
если не прав - поправьте, знатоки...

Оффлайн riff6666

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: настройка IPTables
« Ответ #14 : 18 Мая 2018, 05:17:49 »
Да действительно разобравшись получше открыл порт 53 для udp и tcp все заработало.
# Generated by iptables-save v1.4.21 on Fri May 18 08:54:46 2018
*filter
:INPUT DROP [6:468]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 3128 -j ACCEPT
-A INPUT -s 192.168.1.7/32 -p tcp -m tcp --dport 443 -j DROP
-A INPUT -i eth1 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 53 -j ACCEPT
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -i eth0 -j ACCEPT
-A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
-A OUTPUT -o eth1 -j ACCEPT
COMMIT
# Completed on Fri May 18 08:54:46 2018
# Generated by iptables-save v1.4.21 on Fri May 18 08:54:46 2018
*nat
:PREROUTING ACCEPT [1231:69052]
:INPUT ACCEPT [141:8828]
:OUTPUT ACCEPT [1355:100966]
:POSTROUTING ACCEPT [1355:100966]
-A POSTROUTING -s 192.168.1.7/32 ! -d 192.168.0.0/24 -j SNAT --to-source 10.0.2.15
COMMIT
# Completed on Fri May 18 08:54:46 2018
# Generated by iptables-save v1.4.21 on Fri May 18 08:54:46 2018
*mangle
:PREROUTING ACCEPT [23056:10643993]
:INPUT ACCEPT [4219:924876]
:FORWARD ACCEPT [18831:9718817]
:OUTPUT ACCEPT [3278:432310]
:POSTROUTING ACCEPT [22109:10151127]
COMMIT
# Completed on Fri May 18 08:54:46 2018
Но теперь я пытаюсь заблокировать исходящий трафик с данного ip(для которого открыл доступ в интернет) по порту 53, для того чтобы dns сервер использовался только мой сервер. пытаюсь написать правило такого вида
-A ??????? -s 192.168.1.7/32 -p udp -m udp --dport 53 -j DROP
-A ??????? -s 192.168.1.7/32 -p tcp -m tcp --dport 53 -j DROP
Но не могу понять в какую цепочку его вставить? Как я понимаю данный трафик будет транзитным т.е. надо FORWARD, но если прописываю DNS на клиенте 8.8.8.8 то трафик как шел так и идет, странички открываются.
Пробовал создать свою цепочку и с ней что то делать
iptables -N DNSDROP
iptables -A FORWARD -s 192.168.1.7 -p udp -m multiport --dports 53 -j DNSDROP
iptables -A FORWARD -s 192.168.1.7 -p tcp -m multiport --dports 53 -j DNSDROP
iptables -A DNSDROP -j DROP
И можно ли как то понять какие цепочки проходит пакет используя tcpdump?
« Последнее редактирование: 18 Мая 2018, 05:22:42 от riff6666 »

 

Страница сгенерирована за 0.031 секунд. Запросов: 22.