LINUX.ORG.RU
ФорумAdmin

Оцените конфиг iptables

 , ,


1

2

C iptables только начал разбираться (прочитал http://www.k-max.name/linux/netfilter-iptables-v-linux/, настроил по http://www.k-max.name/linux/iptables-v-primerax/). На рабочем шлюзе применять боюсь, не уверен в правильности, думаю некоторых правил точно не хватает. На шлюзе запущен postfix, dhcp, dns, apache, mysql, ftp, VPN к Cisco. Почтовые клиенты в локальной сети Outlook и The Bat, помимо этого в локальной сети есть несколько программ, которые должны передавать пакеты во внешнюю сеть и, соответственно, получать ответы (отправлять, как я понял точно будут, т.к. маскардинг я прописал на все протоколы), также нужен доступ по SSH из локалки.

iptables -F
iptables -t nat -F

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

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

iptables -A OUTPUT -j ACCEPT

iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT

#######################################################################

## block ip
#iptables -A FORWARD -s 192.168.0.90 -j DROP
#iptables -A FORWARD -s 192.168.0.41 -j DROP
iptables -A FORWARD -s 192.168.1.1 -j DROP

## NAT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.0.1/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1:2 -s 192.168.1.1/24 -j ACCEPT
iptables -P FORWARD DROP
#ptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j SNAT --to-source x.x.x.x
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j SNAT --to-source x.x.x.x

## Post
iptables -A INPUT -p TCP -m  multiport --dports 25,110,143 -j ACCEPT

## Web
iptables -A INPUT -p TCP --dport 80 -j ACCEPT

## SSH
iptables -A INPUT -p TCP -i eth1 --dport 22 -j ACCEPT

## DNS
iptables -A INPUT -p TCP -i eth1 --dport 53 -j ACCEPT

## DHCP
iptables -A INPUT -p UDP -i eth1 --dport 67 -j ACCEPT

## RDP i t.d.
iptables -t nat -A PREROUTING -p tcp --dport 3399 -i ppp0 -j DNAT --to 192.168.0.99:3389
iptables -t nat -A PREROUTING -p tcp --dport 3355 -i ppp0 -j DNAT --to 192.168.0.2:3389
iptables -t nat -A PREROUTING -p tcp --dport 3356 -i ppp0 -j DNAT --to 192.168.0.12:3389
#iptables -t nat -A PREROUTING -p tcp --dport 3357 -i ppp0 -j DNAT --to 192.168.0.14:3389
iptables -t nat -A PREROUTING -p tcp --dport 3358 -i ppp0 -j DNAT --to 192.168.0.22:3389
iptables -t nat -A PREROUTING -p tcp --dport 3359 -i ppp0 -j DNAT --to 192.168.0.24:3389
#iptables -t nat -A PREROUTING -p tcp --dport 3333 -i ppp0 -j DNAT --to 192.168.0.121:35300

## NAS
iptables -t nat -A PREROUTING -p tcp --dport 2000 -i ppp0 -j DNAT --to 192.168.0.4:2015
iptables -t nat -A PREROUTING -p tcp --dport 2001 -i ppp0 -j DNAT --to 192.168.0.4:2014

## Video server
iptables -t nat -A PREROUTING -p tcp --dport 3000 -i ppp0 -j DNAT --to 192.168.0.153:3080
iptables -t nat -A PREROUTING -p tcp --dport 3001 -i ppp0 -j DNAT --to 192.168.0.153:3081

Зачем:

iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
если всё одно есть:
iptables -A OUTPUT -j ACCEPT

Зачем здесь нужно указание протоколов:

iptables -A INPUT -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p UDP -m state --state ESTABLISHED,RELATED -j ACCEPT
можно же одним правилом для всех протоколов.

Алиасов не существует, сеть прияно указывать с 0 в битах под маской (192.168.1.0/24):

iptables -A FORWARD -m conntrack --ctstate NEW -i eth1:2 -s 192.168.1.1/24 -j ACCEPT

Почему для DNS только tcp?

## DNS
iptables -A INPUT -p TCP -i eth1 --dport 53 -j ACCEPT

mky ★★★★★ ()
Ответ на: комментарий от mky

Подправил

iptables -F 
iptables -t nat -F 

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

iptables -A INPUT -i lo -j ACCEPT 

iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT

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

#######################################################################

## block ip
#iptables -A FORWARD -s 192.168.0.90 -j DROP
#iptables -A FORWARD -s 192.168.0.41 -j DROP
iptables -A FORWARD -s 192.168.1.1 -j DROP

## NAT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.1.0/24 -j ACCEPT
iptables -P FORWARD DROP
#ptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j SNAT --to-source x.x.x.x
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j SNAT --to-source x.x.x.x

## SQUID
#iptables -t nat -A PREROUTING -i eth1 -s 192.168.0.1/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.1:3128

## Post
iptables -A INPUT -p TCP -m  multiport --dports 25,110,143 -j ACCEPT

## Web
iptables -A INPUT -p TCP --dport 80 -j ACCEPT

## SSH
iptables -A INPUT -p TCP -i eth1 --dport 22 -j ACCEPT

## DNS
iptables -A INPUT -p TCP -i eth1 --dport 53 -j ACCEPT
iptables -A INPUT -p UDP -i eth1 --dport 53 -j ACCEPT

## DHCP
iptables -A INPUT -p UDP -i eth1 --dport 67 -j ACCEPT

## RDP i t.d.
iptables -t nat -A PREROUTING -p tcp --dport 3399 -i ppp0 -j DNAT --to 192.168.0.99:3389
iptables -t nat -A PREROUTING -p tcp --dport 3355 -i ppp0 -j DNAT --to 192.168.0.2:3389
iptables -t nat -A PREROUTING -p tcp --dport 3356 -i ppp0 -j DNAT --to 192.168.0.12:3389
#iptables -t nat -A PREROUTING -p tcp --dport 3357 -i ppp0 -j DNAT --to 192.168.0.14:3389
iptables -t nat -A PREROUTING -p tcp --dport 3358 -i ppp0 -j DNAT --to 192.168.0.22:3389
iptables -t nat -A PREROUTING -p tcp --dport 3359 -i ppp0 -j DNAT --to 192.168.0.24:3389
#iptables -t nat -A PREROUTING -p tcp --dport 3333 -i ppp0 -j DNAT --to 192.168.0.121:35300

## NAS
iptables -t nat -A PREROUTING -p tcp --dport 2000 -i ppp0 -j DNAT --to 192.168.0.4:2015
iptables -t nat -A PREROUTING -p tcp --dport 2001 -i ppp0 -j DNAT --to 192.168.0.4:2014

## Video server
iptables -t nat -A PREROUTING -p tcp --dport 3000 -i ppp0 -j DNAT --to 192.168.0.153:3080
iptables -t nat -A PREROUTING -p tcp --dport 3001 -i ppp0 -j DNAT --to 192.168.0.153:3081

deptk ()
Ответ на: комментарий от mky

Ещё вопрос: те программы в локальной сети за шлюзом, о которых я говорил вначале, будут работать без проблем?

deptk ()
Ответ на: комментарий от deptk

Вдумываться лень, но сие в глаза бросается:

iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.1.0/24 -j ACCEPT
Одной строки с 192.168.0.0/23 будет достаточно. И в nat/POSTROUTING та-же фигня.

NightSpamer ()
Ответ на: комментарий от deptk

ну смори. Iptables умеет определять не только для tcp состояние соединения (CONNTRACK state), но и для udp (там это не протоколом определяется, а отслеживанием адресов туда-сюда внутри реализации в ядре linux). Стало бысть, тебе нужно два глобальных правила: разрешить форвардинг пакетов из локальной в антернет, а затем разрешить форвардинг пакетов, являющихся частью уже установленного соединения (тот самый state ESTABLISHED,RELATED), бегущих извне в локальную.

все это у тебя уже есть:

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.1.0/24 -j ACCEPT
по части битовой маски присоединяюсь к товарищу выше.

semenaa ()
Ответ на: комментарий от deptk

А чойта у тебя маскарад на eth0, а потом еще SNAT какие-то на ppp0?

#ptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j SNAT --to-source x.x.x.x
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j SNAT --to-source x.x.x.x
Ты уж определись, где что. Вместо копипейста лучше в первый раз все ручками набирать. В данном случае нужен только маскарад на том интерфейсе, который в антернет глядит.
iptables -t nat -A POSTROUTING -s 192.168.0.0/23 -o ppp0 -j MASQUERADE

Да и в

iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.0.0/24 -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.1.0/24 -j ACCEPT
должон быть -i eth0 (или ppp0, в общем, что наружу торчит)

И напоследок. Нельзя оставлять дыры в виде проброшенных портов, только на крайняк. Это ты как будто очко выставил оголенное через дырку в заборе из расчета: а забор-то длинный, не найдут. Поверь, с ненулевой вероятностью найдут и выйбут. Чтобы прокинуть сервисы через интернет, пользуются VPN, IPSec, в общем, такими вещами, которые аутентифицируются серьёзно, шифруются. На худой конец голь на выдумки-то хитра, можно port knocking делать замудренный. Но порты внутренних машин наружу - это зло.

semenaa ()
Ответ на: комментарий от semenaa

Чтобы прокинуть сервисы через интернет, пользуются VPN, IPSec, в общем, такими вещами, которые аутентифицируются серьёзно, шифруются. На худой конец голь на выдумки-то хитра, можно port knocking делать замудренный. Но порты внутренних машин наружу - это зло.

плюсану, поддерживаю

Deleted ()

1. Вместо строк

iptables -P OUTPUT DROP
iptables -A OUTPUT -j ACCEPT
достаточно сделать
iptables -P OUTPUT ACCEPT
2. Строку
iptables -P FORWARD DROP
второй раз писать не надо

Infra_HDC ★★★★★ ()
Ответ на: комментарий от deptk

те программы в локальной сети

Не совсем понял, какие именно программы должны с чем взаимодействовать. Но, вроде должны, если eth1 это локальная сеть.

Вот это ещё отмечу:

iptables -A INPUT -p TCP -m  multiport --dports 25,110,143 -j ACCEPT

получается, что у вас для всех открыто и smtp порт (postfix) и pop3+imap. Не знаю, если вы хотите, чтобы народ из дому подключался к почте, то лучше разрешать это через какой-нибудь шифрованный тунель. Или, по крайней мере убедиться, что MTA и MDA не дают передать пароль открытым текстом. Расчитывать на то, что пользователи у себя дома будут правильно настраивать почтовые клиенты не стоит.

Ну про DNAT во внутрь вам уже написали. То есть будьте готовы, что выставленные наружу порты будут обнаружены и «продолблены» ботами. Читайте гугл отосительно криптостойкости/безопасности выставляемых вами в Инет протоколов. Может они могут работать самостоятельно, без VPN, а может и нет.

Если вам нужен доступ с наружи только для определённых лиц, можно не полениться и завести список этих ip-адресов. Даже если там у провайдера куча блоков динамических адресов, это всё равно лучше, чем позволять «стучаться» к NAS'у из Лаоса или ещё откуда.

mky ★★★★★ ()
Ответ на: комментарий от NightSpamer

Одной строки с 192.168.0.0/23 будет достаточно. И в nat/POSTROUTING та-же фигня.

Да, не подумал, поправлю.

deptk ()
Ответ на: комментарий от semenaa

state ESTABLISHED,RELATED

Спасибо за пояснение, теперь понятно что это такое.

deptk ()
Ответ на: комментарий от semenaa

#ptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A FORWARD -m conntrack --ctstate NEW -i eth1 -s 192.168.0.0/24 -j ACCEPT

Где-то прочитал, что через SNAT правильней, т.к. IP у меня статический.

Про порты не знал. OpenVPN хочу настроить.

deptk ()
Ответ на: комментарий от mky

Не совсем понял, какие именно программы должны с чем взаимодействовать. Но, вроде должны, если eth1 это локальная сеть.

Почтовые программы, VPN клиенты, ГЛОНАСС и еще несколько по мелочи

получается, что у вас для всех открыто и smtp порт (postfix) и pop3+imap

Если я сделаю так

iptables -A INPUT -p TCP -i eth1 -m  multiport --dports 25,110,143 -j ACCEPT
т.е. только для локалки, через roundcube подключаться смогут?

deptk ()
Ответ на: комментарий от deptk

Ещё вопрос: есть на этом шлюзе тоннель, не нужно ли сделать так?

ptables -A FORWARD -i gre_tun0 -j ACCEPT
ptables -A FORWARD -o gre_tun0 -j ACCEPT

deptk ()
Ответ на: комментарий от deptk

И ещё: к NAS мне подключение необходимо через web-интерфейс, который непосредственно у этого устройства (synology RS214). У меня есть мой-домен.ru и mail.мой-домен.ru. Как мне сделать disk.мой-домен.ru для подклюения к NAS?

deptk ()

-w ко всем командам

-w, --wait

Wait for the xtables lock. To prevent multiple instances of the program from running concurrently, an attempt will be made to obtain an exclusive lock at launch. By default, the program will exit if the lock cannot be obtained. This option will make the program wait until the exclusive lock can be obtained.

anonymous ()

Оцените конфиг iptables

Это не конфиг iptables.

</thread>

edigaryev ★★★★★ ()
Ответ на: комментарий от deptk

И да, предыдущий оратор тонко намекает, и я присоединяюсь к нему, что это не конфиг iptables. Можете открыть для себя iptables-save / iptables-restore.

И да, похожие команды есть и для IPv6.

Infra_HDC ★★★★★ ()
Ответ на: комментарий от deptk

На сквид я бы завернул через редирект

IPTABLES -t nat -A PREROUTING -i eth1 -s 192.168.0.1/24 -m tcp --dport 80 -j REDIRECT --to-ports 3128

Вместо всего этого

iptables -A INPUT -p TCP -m  multiport --dports 25,110,143 -j ACCEPT
## Web
iptables -A INPUT -p TCP --dport 80 -j ACCEPT
## SSH
iptables -A INPUT -p TCP -i eth1 --dport 22 -j ACCEPT
## DNS
iptables -A INPUT -p TCP -i eth1 --dport 53 -j ACCEPT
iptables -A INPUT -p UDP -i eth1 --dport 53 -j ACCEPT
## DHCP
iptables -A INPUT -p UDP -i eth1 --dport 67 -j ACCEPT

Одной строкой

IPTABLES -A INPUT -p tcp -m tcp  -m multiport  -s 192.168.0.0/24  --dports 22,25,110,143,53,80,3128  -m state --state NEW  -j ACCEPT

Правильно, если ip статический то лучше через SNAT рулить

IPTABLES -t nat -A POSTROUTING    -s 192.168.0.0/24  -j SNAT --to-source 192.168.1.1

Humaxoid ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.