Портал

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Портал » Что подкрутить » Фаерволл


Фаерволл

Сообщений 1 страница 8 из 8

1

Это черновик.

0. Как закрыть порт Iptables
как скрыть с возможностью подключения
Закрыть порты iptables, кроме разрешенных

1. Запрет всех входящих подключений.

2. Разрешить подключение к фтп серверу

3. Разрешить входящее к http серверу.

4. Разрешить входящее к почтовому серверу.

5. Разрешить входящее по ssh

6. Не работает DNS:
     для работы DNS надо надо разрешить форвардить 53 порт по tcp и udp если у вас шлюз

Заработало после добавления
iptables -A INPUT -p udp —dport 53 -j ACCEPT

7. Правила обрабатываются последовательно в рамках цепочки.
Действия ACCEPT, REJECT и DROP завершают обработку пакета в цепочке, поэтому если вы хотите сделать с ним что-то ещё, это надо сделать ДО таких действий, а не после.

8. рекомендуется загружать сразу все правила командой iptables-restore либо из файла, либо, если правила удобнее генерировать скриптом, можно прямо внутри скрипта перенаправлять их на ввод iptables-restore. Такой способ загрузки правил срабатывает мгновенно даже при большом количестве правил, поскольку их применения происходит по одному разу на таблицу (строка COMMIT).

0

2

$ nc -zv localhost 80   Проверяет, открыт ли порт 80. Номер порта может быть любым.
$ curl ipinfo.io            географическое расположение заданного IP-адреса.

Вывод текущих правил
Посмотреть правила для таблицы filter, т.е. команда покажет основные правила iptables:

iptables -L -n
Для конкретной таблицы, например nat и mangle:

iptables -t nat -L -n
iptables -t mangle -L -n

Перед применением правил необходимо очистить все существующие цепочки, таблицы и политики.

Минимальный набор правил iptables для десктопа
Задача: запретить все входящие подключения. Исходящие не ограничены.

# Правила по умолчанию
iptable -P INPUT DROP
iptable -P FORWARD DROP
iptable -P OUTPUT ACCEPT
# Разрешить входящие соединения с локалхоста
iptables -A INPUT -i lo -j ACCEPT
# Разрешить уже установленные входящие соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

0

3

Минимальный набор правил iptables для сервера с приложением
Задача: дать доступ до сервиса, пусть это будет веб сервер, работающий на 80 порту, все остальное запретить.
Так как это сервер, то необходимо разрешить коннект для управления по SSH. По аналогии можно открыть любой нужный порт или наборы портов.

# Правила по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
# Разрешить входящие соединения с локалхоста
iptables -A INPUT -i lo -j ACCEPT
# Разрешить уже установленные входящие соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить SSH
iptables -A INPUT -p TCP --dport 22 -j ACCEPT
# Разрешить HTTP порт
iptables -A INPUT -p TCP --dport 80 -j ACCEPT

0

4

Минимальный набор правил iptables для шлюза
Задача:
1. Раздать интернет в локальную сеть при помощи NAT’а.
2. Разрешить обращение машин из локальной сети к внешним HTTP, HTTPS и DNS серверам
3. Пробросить порт на веб сервер, находящийся в этой локальной сети.

### Переменные
# Интерфейс, смотрящий в интернет
INET_IF="eth0"
# Белый IP адрес, принадлежащий $INET_IF
INET_IP="x.x.x.x"
# TCP порты, по которым разрешено ходить в интернет машинам из локальной сети
FORWARD_TCP_PORTS="53,80,443"
# UDP порты, по которым разрешено ходить в интернет машинам из локальной сети
FORWARD_UDP_PORTS="53"
# Локальная сеть
LOCAL_NET="192.168.0.0/24"
# IP адрес локального веб сервера
WEB_SERVER="192.168.0.10"
# Путь до sysctl
SYSCTL="/sbin/sysctl -w"
# Включить в ядре форвард IPv4 пакетов
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/ip_forward
else
    $SYSCTL net.ipv4.ip_forward="1"
fi

### Правила по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

### INPUT
# Разрешить входящие соединения с локалхоста
iptables -A INPUT -i lo -j ACCEPT
# Разрешить принимать уже установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить SSH
iptables -A INPUT -p TCP --dport 22 -j ACCEPT

### FORWARD
# Разрешить уже установленные пересылаемые соединения
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить машинам локальной сети ходить в интернет по указанным TCP портам
iptables -A FORWARD -p TCP -s $LOCAL_NET -m multiport --dport $FORWARD_TCP_PORTS -j ACCEPT
iptables -A FORWARD -p TCP -d $LOCAL_NET -m multiport --dport $FORWARD_TCP_PORTS -j ACCEPT
# Разрешить машинам локальной сети ходить в интернет по указанным UDP портам
iptables -A FORWARD -p UDP -s $LOCAL_NET -m multiport --dport $FORWARD_UDP_PORTS -j ACCEPT
iptables -A FORWARD -p UDP -d $LOCAL_NET -m multiport --dport $FORWARD_UDP_PORTS -j ACCEPT

### NAT
# Включить NAT для локальной подсети
iptables -t nat -A POSTROUTING -s $LOCAL_NET -o $INET_IF -j SNAT --to-source $INET_IP
# Пробросить порт на локальный веб сервер
iptables -t nat -A PREROUTING -p TCP -d $INET_IP --dport 80 -j DNAT --to-destination $WEB_SERVER:80

Надо отметить, что если пробрасывается порт, отличный от списка $FORWARD_TCP_PORTS, то необходимо его туда добавить, т.к. он будет дропаться политикой по умолчанию.
В итоге, скрипт iptables для шлюза будет выглядеть следующим образом. Отличается от предыдущих правил.

#!/bin/sh
# Очистить все правила
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X

### Переменные
# Интерфейс, смотрящий в интернет
INET_IF="eth0"
# Белый IP адрес, принадлежащий $INET_IF
INET_IP="x.x.x.x"
# Локальная сеть
LOCAL_NET="192.168.0.0/24"
# IP адрес локального веб сервера
WEB_SERVER="192.168.0.10"

# Включить в ядре форвард IPv4 пакетов
# Путь до sysctl
SYSCTL="/sbin/sysctl -w"
if [ "$SYSCTL" = "" ]
then
    echo "1" > /proc/sys/net/ipv4/ip_forward
else
    $SYSCTL net.ipv4.ip_forward="1"
fi

### Правила по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

### INPUT
# Разрешить входящие соединения с локалхоста
iptables -A INPUT -i lo -j ACCEPT
# Разрешить принимать уже установленные соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить SSH только из локальной сети
iptables -A INPUT -p TCP -s $LOCAL_NET --dport 22 -j ACCEPT
# Разрешить запросы к кэширующему DNS серверу только из локальной сети
iptables -A INPUT -p TCP -s $LOCAL_NET --dport 53 -j ACCEPT
iptables -A INPUT -p UDP -s $LOCAL_NET --dport 53 -j ACCEPT

### FORWARD
# Разрешить уже установленные пересылаемые соединения
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# TCP порты, по которым разрешено ходить в интернет машинам из локальной сети
FORWARD_TCP_PORTS="80,443"
# Разрешить машинам локальной сети ходить в интернет по указанным TCP портам
iptables -A FORWARD -p TCP -s $LOCAL_NET -m multiport --dport $FORWARD_TCP_PORTS -j ACCEPT
iptables -A FORWARD -p TCP -d $LOCAL_NET -m multiport --dport $FORWARD_TCP_PORTS -j ACCEPT

### NAT
# Включить NAT для локальной подсети
iptables -t nat -A POSTROUTING -s $LOCAL_NET -o $INET_IF -j SNAT --to-source $INET_IP
# Пробросить порт на локальный веб сервер на нестандартный порт
iptables -t nat -A PREROUTING -p TCP -d $INET_IP --dport 80 -j DNAT --to-destination $WEB_SERVER:8090

Не работает DNS:
В разделе «Минимальный набор правил iptables для шлюза» указано, что для работы DNS надо надо разрешить форвардить 53 порт по tcp и udp.

Заработало после добавления
iptables -A INPUT -p udp —dport 53 -j ACCEPT

взято там https://notessysadmin.com/

0

5

Доступ по FTP до файлов сайта https://notessysadmin.com/ftp-access-to-website-files
Монтирование FTP ресурса как локальный каталог https://notessysadmin.com/mount-ftp-as- … -directory
Работа с FTP ресурсом как с локальной файловой системой

Поставить пакет curlftpfs:

aptitude install curlftpfs
Монтирование из консоли:

curlftpfs ftp://USER:PASSWORD@HOST/ /mnt
Строка для /etc/fstab, чтобы монтировалось при перезагрузке:

curlftpfs#HOST /mnt fuse user=USER:PASSWORD
#Так же можно монтировать вложенный каталог
curlftpfs#HOST/dir /mnt fuse user=USER:PASSWORD
Для проверки правильности записи без перезагрузки системы можно выполнить:

mount -a
При работе не надо забывать, что это FTP, хоть раздел и примонтирован как локальная файловая система.

Отмонтировать можно как обычно:

umount /mnt

0

6

Как закрыть порт Iptables
как скрыть с возможностью подключения
Закрыть порты iptables, кроме разрешенных
Как скрыть порт iptables?
Выводы

КАК ЗАКРЫТЬ ПОРТ IPTABLES
В этой статье я не стану подробно рассматривать все возможности Iptables, виды цепочек и как работает эта служба.
Все это мы рассмотрели в статье настройка Iptables для начинающих. Вместо этого, перейдем ближе к делу.
Чтобы заблокировать порт нам сначала нужно понять какие порты открыты в Linux и за что они отвечают.
Чтобы посмотреть какие порты слушаются локально, можно использовать утилиту netstat:

sudo netstat -ntulp

Для анализа портов, доступных извне используется программа nmap:

nmap localhost

Как видите, извне у нас, кроме стандартных портов веб-сервера, доступны mysql, ftp, dns и другие сервисы.
Некоторые из них не должны быть доступны публично. Это не критично, но и нежелательно.
Мы можем очень просто закрыть такие порты с помощью iptables. Общий синтаксис команды для блокировки порта будет выглядеть вот так:

$ iptables -A INPUT -p tcp --dport номер_порта -j DROP

Например, если мы хотим заблокировать порт iptables mysql, то необходимо выполнить:

sudo iptables -A INPUT -p tcp --dport 3306 -j DROP

Можно закрыть порт для определенного интерфейса, например, eth1:

sudo iptables -A INPUT -i eth1 -p tcp --dport 3306 -j DROP

Или даже для ip и целой подсети. Например, закрыть все подключения к порту 22 SSH кроме IP адреса 1.2.3.4:

sudo iptables -A INPUT -i eth1 -p tcp -s !1.2.3.4 --dport 22 -j DROP

Здесь знак восклицания означает инверсию, то есть применить ко всем кроме этого.
Можно убрать этот знак и указать только IP, к которым нужно применить запрет.
Мы рассмотрели как закрыть порт iptables в цепочке INPUT, которая отвечает за входящие соединения, это более применимо к серверам.
Но что, если нужно закрыть подключение к удаленному порту из этого компьютера или нашей сети? Для этого существует цепочка OUTPUT.

Например, заблокируем попытки отправки почты подключением к любой машине по порту 25:

sudo iptables -A OUTPUT -p tcp --dport 25 -j DROP

Также, как и раньше, вы можете указать исходящий сетевой интерфейс, только теперь он указывается опцией -o:

sudo iptables -A OUTPUT -o eth1 -p tcp --dport 25 -j DROP

После того как вы завершите с настройкой портов нужно сохранить все созданные правила, чтобы они остались активными даже после перезагрузки. Для этого выполните:

sudo iptables-save

Чтобы посмотреть текущие правила для каждой из цепочек выполните:

sudo iptables -L -n -v

Такая команда покажет все правила, а если вы хотите только информацию о заблокированных портах, выполните:

sudo iptables -L -n -v | grep -i DROP

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

sudo iptables -F

ЗАКРЫТЬ ПОРТЫ IPTABLES, КРОМЕ РАЗРЕШЕННЫХ
По умолчанию политика для цепочек INPUT и OUTPUT - разрешать все подключения,
а уже с помощью правил мы указываем какие подключения стоит запретить.
Но если вы хотите закрыть все порты кроме разрешенных iptables. То нужно поступить по-другому.
Мы поменяем политику по умолчанию, так чтобы она запрещала все и разрешим только доступ к нужным портам.

Например, меняем политику для цепочки INPUT:

sudo iptables -P INPUT DROP

Затем разрешаем все входящие соединения от локального интерфейса:

sudo iptables -A INPUT -i lo -j ACCEPT

Затем разрешаем доступ к портам 80 и 22:

sudo iptables -A INPUT -i eth0 -p tcp --dport 80 --match state --state NEW -j ACCEPT
$ sudo iptables -A INPUT -i eth0 -p tcp --dport 80 --match state --state NEW -j ACCEPT

КАК СКРЫТЬ ПОРТ IPTABLES?
Закрыть порт, это очень хорошо, но что если он нужен нам открытым и желательно, чтобы для других этот же порт был недоступен.
Существует такая технология, как Port Knocking, которая позволяет открывать нужный порт только для определенного
ip адреса и только после обращения его к нужному порту.
Например, нам нужно защитить SSH от перебора паролей и несанкционированного доступа.
Для этого все пакеты, которые будут приходить на порт 22, 111 и 112 мы будем перенаправлять в цепочку SSH.

Как вы уже догадались, порт 22 нам непосредственно нужен, на порты 111 и 112 будут включать его и отключать соответственно.
Когда пользователь обратится к порту 111 мы укажем системе, что нужно присвоить всем его пакетам имя ssh, при обращении к порту 112 уберем этот флаг.
А если пользователь решит зайти на 22 порт, то проверим присвоено ли этому пакету имя SSH, если да, то пропустим, в противном случае - отбросим.

Сначала создаем цепочку SSH:

sudo iptables -N SSH

Перенаправляем пакеты:

sudo iptables -A INPUT -p tcp --dport 22 -j SSH
$ sudo iptables -A INPUT -p tcp --dport 111 -j SSH
$ sudo iptables -A INPUT -p tcp --dport 112 -j SSH

При обращении к порту 111 присваиваем IP адресу имя, сам пакет дальше не пускаем:

sudo iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 111 -m recent --set --name SSH --rsource -j DROP

При обращении к 112 убираем имя у IP:

sudo iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 112 -m recent --remove --name SSH --rsource -j DROP

И нам осталось только проверить имеет ли наш пакет, который пытается обратиться к 22 порту имя SSH и если да, то мы его одобряем:

sudo iptables -A SSH -p tcp -m state --state NEW -m tcp --dport 22 -m recent --rcheck --name SSH --rsource -j ACCEPT

Вот и все. Теперь для того чтобы открыть наш SSH порт будет достаточно попытаться подключиться к порту 111 с помощью telnet.
Утилита сообщит, что произошла ошибка во время подключения, поскольку мы отбросили пакет:

telnet ip_адрес 111

Но зато теперь вы можете получить доступ к сервису SSH на порту 22. Чтобы снова закрыть порт выполните:

telnet ip_адрес 112

Даже при открытии, этот порт доступен только вашему ip адресу и больше никому другому. Но нужно заметить, что это не панацея.
Кто-либо может случайно запросить порт, который предназначен для активации, и таким образом, открыть себе доступ к службе SSH. Так что надежные пароли и ключи шифрования это не отменяет.

0

7

правки в /etc/sysctl.conf:

$ sudo vi /etc/systcl.conf
# Дропаем ICMP-редиректы (против атак типа MITM)
net.ipv4.conf.all.accept_redirects=0
net.ipv6.conf.all.accept_redirects=0
# Включаем механизм TCP syncookies
net.ipv4.tcp_syncookies=1
# Различные твики (защита от спуфинга, увеличение очереди «полуоткрытых» TCP-соединений и так далее)
net.ipv4.tcp_timestamps=0
net.ipv4.conf.all.rp_filter=1
net.ipv4.tcp_max_syn_backlog=1280
kernel.core_uses_pid=1

источник Журнал Хакер. https://xakep.ru/2014/10/02/paranoid-linuxoid/ 
нужно перепроверять.

0

8

https://archlinux.org.ru/forum/topic/16077/?page=1#post-169427

iptables -A OUTPUT -p TCP -o eth0 -m multiport --dports 21,22,43,110,25,53,80,443 -j ACCEPT
iptables -A OUTPUT -p UDP -o eth0 -m multiport --dports 53,67,68 -j ACCEPT

iptables -N TCP
iptables -N UDP
iptables -N BAD_PACKETS
iptables -N REJECT_PACKETS

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

iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -m comment --comment="request packets"
iptables -A INPUT -i lo -j ACCEPT -m comment --comment="allow LoopBack"
iptables -A INPUT -s 192.168.22.0/24 -j ACCEPT -m comment --comment="my_local"

iptables -A INPUT -j BAD_PACKETS -m comment --comment="Jump To BAD_PACKETS"
iptables -A INPUT -j REJECT_PACKETS -m comment --comment="Jump To REJECT"

iptables -t raw -I PREROUTING -m rpfilter --invert -j DROP -m comment --comment="spoofing attacks"

iptables -A INPUT -p icmp --icmp-type 8 -m conntrack --ctstate NEW -j ACCEPT

iptables -A TCP -p tcp --syn -m conntrack --ctstate NEW --dport 80 -j ACCEPT -m comment --comment="Web"
iptables -A TCP -p tcp --syn -m conntrack --ctstate NEW --dport 14922 -j ACCEPT -m comment --comment="ssh"
iptables -A UDP -p udp -m conntrack --ctstate NEW --dport 53 -j ACCEPT -m comment --comment="DNS"

iptables -A REJECT_PACKETS -p tcp -m recent --update --seconds 60 --name TCP-PORTSCAN -j REJECT --reject-with tcp-reset
iptables -A REJECT_PACKETS -p udp -m recent --update --seconds 60 --name UDP-PORTSCAN -j REJECT --reject-with icmp-port-unreachable
iptables -A REJECT_PACKETS -j REJECT --reject-with icmp-proto-unreach

iptables -A INPUT -j LOG --log-prefix "INPUT DROP: " -m comment --comment="In ALL Drop $ Log"
iptables -A INPUT -j LOG --log-prefix "INPUT REJECT: " -m comment --comment="In ALL Reject $ Log"
iptables -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: " -m comment --comment="out ALL Drop $ Log"

#Drop
iptables -A BAD_PACKETS -p TCP ! --syn -m state --state NEW -j DROP -m comment --comment="Force SYN packets check"
iptables -A BAD_PACKETS -p TCP --tcp-flags ALL ALL -j DROP -m comment --comment="XMAS"
iptables -A BAD_PACKETS -p TCP --tcp-flags ALL NONE -j DROP -m comment --comment="Drop all NULL packets"
iptables -A BAD_PACKETS -p TCP --tcp-flags ALL SYN -m state --state ESTABLISHED -j DROP
iptables -A BAD_PACKETS -p ICMP --fragment -j DROP -m comment --comment="Force Fragments packets check"
iptables -A BAD_PACKETS -m conntrack --ctstate INVALID -j DROP -m comment --comment="Drop all packets with invalid parameters"
iptables -A BAD_PACKETS -d 255.255.255.255 -j DROP -m comment --comment="broadcast"
iptables -A BAD_PACKETS -j RETURN
iptables -A BAD_PACKETS -p TCP -o enp4s0 -m multiport --dports 113,81,137,138,139 -j DROP -m comment --comment="Ident, Netbios"

Судя по логам:

iptables -A REJECT_PACKETS -j REJECT --reject-with icmp-proto-unreach
и
iptables -A BAD_PACKETS -j RETURN

одно и тоже.

Да нифига.
Правила обрабатываются последовательно в рамках цепочки.
Действия ACCEPT, REJECT и DROP завершают обработку пакета в цепочке, поэтому если вы хотите сделать с ним что-то ещё, это надо сделать ДО таких действий, а не после.

использовать Маскарадинг,

iptables -t nat -A POSTROUTING -s 192.168.1.153 -j MASQUERADE

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»



Вы здесь » Портал » Что подкрутить » Фаерволл