Вопрос обеспечения безопасности (iptables)

Автор Sferg, 17 марта 2013, 22:09:18

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

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

Sferg

Здравствуйте, господа. Подскажите, пожалуйста набор правил iptables (или готовый скрипт, если это возможно), дабы опеспечить максимальную безопасность сети.

eth0 - смотрит в локальную сеть (dhcp: 192.168.0.26-192.168.0.130), адрес ПК - 192.168.0.1;
eth1- подключен к интернету (dhcp)
wlan0 - настроен как мост с eth0 в режиме точки доступа Wi-Fi;

Установлено и настроено:

- dhcp;
- transmission (веб-интерфейс, порт 9091);
- samba;
- ftp (порт 21);
- ssh (порт 22);

Какие iptables следует прописать, дабы локальная сеть (eth0 и wlan0) могли глядеть в интернет, но при этом заблокировать доступ к ПК из интернета... в том числе к веб-интерфейсу transmission, ssh, samba и прочему?

Сейчас у меня прописано следующее:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.0.1/24 -j MASQUERADE
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j REJECT


Интернет в локальной сети есть. Wi-Fi интернет раздаёт. Но терзают сомнения насчёт безопасности. Да и доступ к веб-интерфейсу Transmission из интернета виден всем желающим...
С уважением.

Debian 10.2, kernel 5.3.13-1-pve x86_64 (WiFi-роутер)
Intel Pentium J5005, 16Gb DDR4-2400, UHD605, 1Tb HDD + 500Gb Ext. HDD

Debian 10.2, kernel 4.19.0-6 x86_64 (домашний ПК)
Intel Core i7-3770, 16Gb DDR3-1600, HD4000, 250Gb SSD + 2Tb HDD

fry

#1
#!/bin/sh
iptables -t mangle -F
iptables -t mangle -X
iptables -t nat -F
iptables -t nat -X
iptables -t filter -F
iptables -t filter -X

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

###INPUT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -i br0 -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
iptables -A INPUT -i eth1 -p tcp --dport 21 -m state --state NEW -j ACCEPT

###FORWARD
iptables -A FORWARD -m state --state INVALID -j DROP
iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i br0 -o eth1 -j ACCEPT


###POSTROUTING
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

Как-то так, наверное. Буду потрезвее - смогу проверить)
Например, так.
Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

Sferg

#2
fry, премного благодарен. Интернет появился только после того, как в Вашем Своде Правил я малость изменил строчку:

iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

вот так (т.е. указал входящий интерфейс - eth1):

iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

Есть 3 вопроса:

1. С какой целью в скрипте дважды прописаны нижеприведённые строки?

iptables -t mangle -F
iptables -t mangle -X
iptables -t nat -F
iptables -t nat -X
iptables -t filter -F
iptables -t filter -X


2. Не опечатка ли символ "!" в нижеприведённой строке?

iptables -A INPUT ! -i lo -d 127.0.0.0/8 -j DROP

3. Доступ к Transmission из внешней сети по порту 9091 остался открытым. Каким образом прикрыть его только из внешки, дабы никто левый не лазил?

Вопрос с доступом к Transmission извне решил путём изменения в файле settings.json строчки:

"rpc-bind-address": "0.0.0.0",

на эту:

"rpc-bind-address": "192.168.0.1",

Но всё-таки, можно ли блокировать извне с помощью iptables (для пущей надёжности)?
С уважением.

Debian 10.2, kernel 5.3.13-1-pve x86_64 (WiFi-роутер)
Intel Pentium J5005, 16Gb DDR4-2400, UHD605, 1Tb HDD + 500Gb Ext. HDD

Debian 10.2, kernel 4.19.0-6 x86_64 (домашний ПК)
Intel Core i7-3770, 16Gb DDR3-1600, HD4000, 250Gb SSD + 2Tb HDD

fry

#3
Цитироватьвот так (т.е. указал входящий интерфейс - eth1)
У меня все работает без указания интерфейса. Может, причина не в этом была?
Цитировать1. С какой целью в скрипте дважды прописаны нижеприведённые строки?
-F
ЦитироватьСброс (удаление) всех правил из заданной цепочки (таблицы). Если имя цепочки и таблицы не указывается, то удаляются все правила, во всех цепочках. (Хочется от себя добавить, что если не указана таблица ключом -t (--table), то очистка цепочек производится только в таблице filter, прим. перев. ).
Это без комментариев.
-X
ЦитироватьУдаление заданной цепочки из заданной таблицы. Удаляемая цепочка не должна иметь правил и не должно быть ссылок из других цепочек на удаляемую цепочку. Если имя цепочки не указано, то будут удалены все цепочки заданной таблице кроме встроенных.
По идее, можно не указывать. Честно говоря, не помню почему так сделал.
Цитировать2. Не опечатка ли символ "!" в нижеприведённой строке?
Нет. Дропаем все пакеты на данную подсеть кроме тех, что пришли с локального интерфейса. на локальный интерфейс.
И с transmission - как проверяли?

Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

Sferg

#4
fry, доступ к Transmission проверял:

1. Заходя с ПК приятеля (другая сеть) на внешний адрес своего ПК.
2. Заходя со своего ПК на свой же ПК через dyndns, который привязан к внешнему адресу ПК.

После того, как в файле конфигурации Transmission задал слушать только 192.168.0.1 вместо 0.0.0.0, доступ извне по обоим пунктам прекратился.
С уважением.

Debian 10.2, kernel 5.3.13-1-pve x86_64 (WiFi-роутер)
Intel Pentium J5005, 16Gb DDR4-2400, UHD605, 1Tb HDD + 500Gb Ext. HDD

Debian 10.2, kernel 4.19.0-6 x86_64 (домашний ПК)
Intel Core i7-3770, 16Gb DDR3-1600, HD4000, 250Gb SSD + 2Tb HDD

fry

я не заметил, что два раза написал в правилах очистку. сорри. сейчас поправлю. вы не могли бы кинуть листинг iptables -vL  после применения правил сюда выложить?
Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

Sferg

fry, да, конечно.

Chain INPUT (policy ACCEPT 858K packets, 56M bytes)
pkts bytes target     prot opt in     out     source               destination

  424 72994 ACCEPT     all  --  lo     any     anywhere             anywhere


Chain FORWARD (policy ACCEPT 412K packets, 40M bytes)
pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     all  --  eth0   eth1    anywhere             anywhere

490K  351M ACCEPT     all  --  eth1   any     anywhere             anywhere
    state RELATED,ESTABLISHED
    0     0 REJECT     all  --  eth1   eth0    anywhere             anywhere
    reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 188K packets, 2007M bytes)
pkts bytes target     prot opt in     out     source               destination
С уважением.

Debian 10.2, kernel 5.3.13-1-pve x86_64 (WiFi-роутер)
Intel Pentium J5005, 16Gb DDR4-2400, UHD605, 1Tb HDD + 500Gb Ext. HDD

Debian 10.2, kernel 4.19.0-6 x86_64 (домашний ПК)
Intel Core i7-3770, 16Gb DDR3-1600, HD4000, 250Gb SSD + 2Tb HDD

fry

Я правильно понимаю, что это вывод до использования того, что написал я?
Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

Sferg

fry, это вывод после использования Вашего Свода Правил. Ну, с добавлением от себя указания интерфейса eth1 (чтобы интернет появился). А также с двумя повторяющимися блоками строк:

iptables -t mangle -F
iptables -t mangle -X
iptables -t nat -F
iptables -t nat -X
iptables -t filter -F
iptables -t filter -X


Или Вам нужен результат iptables -vL после сделанных Вами исправлений в Вашем скрипте?

P.S. Прошу прощения, Вас запутал и сам запутался.
С уважением.

Debian 10.2, kernel 5.3.13-1-pve x86_64 (WiFi-роутер)
Intel Pentium J5005, 16Gb DDR4-2400, UHD605, 1Tb HDD + 500Gb Ext. HDD

Debian 10.2, kernel 4.19.0-6 x86_64 (домашний ПК)
Intel Core i7-3770, 16Gb DDR3-1600, HD4000, 250Gb SSD + 2Tb HDD

fry

#9
Да, после изменения. Я сам запутал. Т.е примените правила и потом посмотрите что получилось. Вывод сюда. Попутный вопрос. С чего проверяете работоспособность интернета? Через что подключено устройство? lan ил и wlan? Сдается мне, для wlan тоже правило нужно будет. Но давайте пока так попробуем.
P.S. Чтобы обойтись без этогоecho 1 > /proc/sys/net/ipv4/ip_forward впишите в /etc/sysctl.conf net.ipv4.ip_forward=1
Заработает после перезагрузки.
Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

Sferg

#10
fry, применил Ваш исправленный Свод Правил. На этот раз интернет заработал без дополнительного указания интерфейса.

Вывод нынешнего результата iptables -vL:

Chain INPUT (policy ACCEPT 283 packets, 27199 bytes)
pkts bytes target     prot opt in     out     source               destination

    2   100 ACCEPT     all  --  lo     any     anywhere             anywhere


Chain FORWARD (policy ACCEPT 312 packets, 35280 bytes)
pkts bytes target     prot opt in     out     source               destination

    0     0 ACCEPT     all  --  eth0   eth1    anywhere             anywhere

  210 66981 ACCEPT     all  --  eth1   any     anywhere             anywhere
    state RELATED,ESTABLISHED
    0     0 REJECT     all  --  eth1   eth0    anywhere             anywhere
    reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 279 packets, 31244 bytes)
pkts bytes target     prot opt in     out     source               destination


Цитата: fryС чего проверяете работоспособность интернета? Через что подключено устройство?
Работоспособность интернета проверяю на планшете. Подключение по Wi-Fi.

Цитата: fryвпишите в /etc/sysctl.conf
Уже было вписано.
С уважением.

Debian 10.2, kernel 5.3.13-1-pve x86_64 (WiFi-роутер)
Intel Pentium J5005, 16Gb DDR4-2400, UHD605, 1Tb HDD + 500Gb Ext. HDD

Debian 10.2, kernel 4.19.0-6 x86_64 (домашний ПК)
Intel Core i7-3770, 16Gb DDR3-1600, HD4000, 250Gb SSD + 2Tb HDD

fry

Что-то не так. Я не вижу своих правил тут. И еще. Смотрите но политику по умолчанию. она у вас в ACCEPT. А после выполнения скрипта она должна была обратиться в DROP. От рута, надеюсь, выполняте? Хотя iptables бы ругнулся, если бы от непривелигерованного пользователя.
Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

Sferg

Цитата: fryОт рута, надеюсь, выполняте?
Да, вернее из-под sudo, приравненного к руту. Скрипт с Вашим списком iptables у меня лежит в /etc/nat.sh (права на исполнение стоят). При загрузке скрипт (якобы) вызывается строчкой из /etc/network/interfaces:

post-up /etc/nat.sh
С уважением.

Debian 10.2, kernel 5.3.13-1-pve x86_64 (WiFi-роутер)
Intel Pentium J5005, 16Gb DDR4-2400, UHD605, 1Tb HDD + 500Gb Ext. HDD

Debian 10.2, kernel 4.19.0-6 x86_64 (домашний ПК)
Intel Core i7-3770, 16Gb DDR3-1600, HD4000, 250Gb SSD + 2Tb HDD

fry

попробуйте sudo -i
cd /etc/
./nat.sh

Прямо в лоб. и потом
iptables -vL и сравните с тем, что было до этого.
Товарищи призывники! Надо понимать всю глубину наших глубин!

Руководство по добавлению изображений на форум

Sferg

fry, при запуске Вашего скрипта ругнулся:
iptables v1.4.14: Can't use -i with POSTROUTING

После приименения пропал интернет. Весь. Пришлось перезагружаться в неправильный режим с политикой ACCEPT.

Результат iptables -vL (делал при пропавшем интернете):

Chain INPUT (policy DROP 82 packets, 10305 bytes)
pkts bytes target     prot opt in     out     source               destination

    0     0 DROP       all  --  any    any     anywhere             anywhere
    state INVALID
    0     0 DROP       all  --  !lo    any     anywhere             loopback/8

  102  8183 ACCEPT     all  --  any    any     anywhere             anywhere
    state RELATED,ESTABLISHED

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target     prot opt in     out     source               destination

    0     0 DROP       all  --  any    any     anywhere             anywhere
    state INVALID
   26  2020 ACCEPT     all  --  any    any     anywhere             anywhere
    state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  eth0   eth1    anywhere             anywhere


Chain OUTPUT (policy ACCEPT 110 packets, 9464 bytes)
pkts bytes target     prot opt in     out     source               destination
С уважением.

Debian 10.2, kernel 5.3.13-1-pve x86_64 (WiFi-роутер)
Intel Pentium J5005, 16Gb DDR4-2400, UHD605, 1Tb HDD + 500Gb Ext. HDD

Debian 10.2, kernel 4.19.0-6 x86_64 (домашний ПК)
Intel Core i7-3770, 16Gb DDR3-1600, HD4000, 250Gb SSD + 2Tb HDD