LINUX.ORG.RU
ФорумAdmin

nmap как он это делает?

 ,


1

1

Собственно есть машина в сети с настроенным iptables (использую для различных экспериментов) enp0s3 - 192.168.3.50 enp0s8 - 192.168.4.17

export IPT="iptables"
#Внешний интерфейс Интернет
export WAN=enp0s3
#Интерфейс к которому подключена локальная сеть
export LAN=enp0s8
#Очистка всех цепочек                                                                                                                                                                                                                                                               
$IPT -F INPUT                                                                                                                                                                                                                                                              
$IPT -F FORWARD                                                                                                                                                                                                                                                            
$IPT -F OUTPUT                                                                                                                                                                                                                                                             
$IPT -t nat -F PREROUTING                                                                                                                                                                                                                                                  
$IPT -t nat -F POSTROUTING                                                                                                                                                                                                                                                 
$IPT -t mangle -F
#Запрет любого трафика кроме кроме идущего через цепочку output
$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP
#разрешаем все входящие пакеты на интрефейс замыкания на себя иначе ничего не работает 
$IPT -A INPUT -i lo -j ACCEPT
# разрешаем пинги на обе сетевухи
$IPT -A INPUT -i -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -i -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -i -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -i -p icmp --icmp-type echo-request -j ACCEPT

#РАЗРЕШЕНЫ ТОЛЬКО ВХОДЯЩИЕ СОЗДАННЫЕ НАШИМИ ИСХОДЯЩИМИ
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#Правила повышающие безопасность

#Блочим входящие tcp соединения не syn пакетом (либо ошибка либо атака)
$IPT -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
$IPT -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT
# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP

#разрешаем ssh на внешнем интерфейсе 
$IPT -A INPUT -i enp0s3 -p tcp --dport 22  -j ACCEPT

#разрешаем доступ из локальной сети на порты 22(ssh),3128 прокси squid,80 - apache веб морды
$IPT -A INPUT -i enp0s8 -p tcp -m multiport --dport 22,80,53,3128 -j ACCEPT
#Разрешаем запросы на сервер времени из локалки 
$IPT -A INPUT -i enp0s8 -p udp --dport 123 -j ACCEPT
#подстройка mtu без этого правила компы ходящие мимо прокси не открывают некоторые сайты
$IPT -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS  --clamp-mss-to-pmtu 

#Разрешаем хождение через цепочку форвард пакетов идущих в ответ на пакеты с локльной сети enp0s8 

$IPT -A FORWARD -i enp0s3 -o enp0s8 -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i enp0s8 -o enp0s3 -m state --state ESTABLISHED,RELATED -j ACCEPT
#Пробрасуем комп из сети в нет

#$IPT -A FORWARD -s 192.168.4.19 -o enp0s3 -j ACCEPT

#Маскарадим то что прошло через цепочку forward
$IPT -t nat -I POSTROUTING -s 192.168.4.0/24 -o enp0s3 -j MASQUERADE

Делаю nmap 192.168.3.50 другой машины в сети вижу 
PORT     STATE  SERVICE
22/tcp   open   ssh
53/tcp   closed domain
80/tcp   closed http
3128/tcp closed squid-http

Каким образом nmap увидел 53,80,3128 ведь доступ к ним открыт из локальной сети ?  

Ответ на: комментарий от Datt_

iptables -vL с этого компа. Правила работают

Chain INPUT (policy DROP 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 REJECT     tcp  --  any    any     anywhere             anywhere             ctstate INVALID,NEW tcp flags:SYN,ACK/SYN,ACK reject-with icmp-port-unreachable
    0     0 DROP       tcp  --  any    any     anywhere             anywhere             ctstate NEW tcp flags:!FIN,SYN,RST,ACK/SYN
    0     0 ACCEPT     all  --  lo     any     anywhere             anywhere            
    0     0 ACCEPT     icmp --  enp0s8 any     anywhere             anywhere             icmp echo-reply
    0     0 ACCEPT     icmp --  enp0s8 any     anywhere             anywhere             icmp destination-unreachable
    0     0 ACCEPT     icmp --  enp0s8 any     anywhere             anywhere             icmp time-exceeded
    0     0 ACCEPT     icmp --  enp0s8 any     anywhere             anywhere             icmp echo-request
   48  3008 ACCEPT     all  --  any    any     anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 DROP       all  --  any    any     anywhere             anywhere             state INVALID
    0     0 ACCEPT     tcp  --  enp0s3 any     anywhere             anywhere             tcp dpt:ssh
    0     0 ACCEPT     tcp  --  enp0s8 any     anywhere             anywhere             multiport dports ssh,http,domain,3128
    0     0 ACCEPT     udp  --  enp0s8 any     anywhere             anywhere             udp dpt:ntp

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
    0     0 TCPMSS     tcp  --  any    any     anywhere             anywhere             tcp flags:SYN,RST/SYN TCPMSS clamp to PMTU
    0     0 ACCEPT     all  --  enp0s3 enp0s8  anywhere             anywhere             state RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  enp0s8 enp0s3  anywhere             anywhere             state RELATED,ESTABLISHED

drac753 ★★ ()
Последнее исправление: drac753 (всего исправлений: 1)
Ответ на: комментарий от drac753

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

48 пакетов и остальное по нулям - не похоже на рабочую систему. С другой стороны, 48 откуда взялись?

Datt_ ()

Каким образом nmap увидел 53,80,3128 ведь доступ к ним открыт из локальной сети ?

$IPT -A INPUT -i enp0s3 -p tcp --dport 22 -j ACCEPT
$IPT -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT

22 у тебя открыт всем, по остальным это правило может reject отдать (там зависит от того как nmap запущен). Вот и 1 - open, остальные - close

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

В 2020м году большая часть софта продолжает работать с iptables. Например docker в nftables так и не научился, приходится костылить.

По теме - tcpdump поможет понять что происходит.

sergej ★★★★★ ()

Какой смысл в

$IPT -I INPUT -m conntrack --ctstate NEW -p tcp ! --syn -j DROP
$IPT -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT
# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP```

Если у тебя по дефолту всё дропается?

$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

#РАЗРЕШЕНЫ ТОЛЬКО ВХОДЯЩИЕ СОЗДАННЫЕ НАШИМИ ИСХОДЯЩИМИ
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT``` 

Каким образом nmap увидел 53,80,3128 ведь доступ к ним открыт из локальной сети ?

tcpdump -i enp0s3 dst 192.168.4.1 and port 53

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

Встречный вопрос если 22 DROP, подключится на него нельзя, nonmap видит

22/tcp   open   ssh

происходит из-за правила 
$IPT -I INPUT -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT
drac753 ★★ ()
Последнее исправление: drac753 (всего исправлений: 2)
Ответ на: комментарий от drac753

Нет, это из-за правил

#разрешаем ssh на внешнем интерфейсе 
$IPT -A INPUT -i enp0s3 -p tcp --dport 22  -j ACCEPT

#разрешаем доступ из локальной сети на порты 22(ssh),3128 прокси squid,80 - apache веб морды
$IPT -A INPUT -i enp0s8 -p tcp -m multiport --dport 22,80,53,3128 -j ACCEPT

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

К примеру рассмотрим такую ситуацию - есть прокси сервер для локальной сети с белым ip (на котором 22 порт закрыт ) на одном интерфейсе и обычным ip типа 192.168.. на другой сетевухе на котором 22 порт открыт nmap при сканировании белого ip увидит 22 порт открытым?

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

закрываю 22 порт везде запускаю вижу

53/tcp closed domain
80/tcp closed http


открываю 22 порт на интерфейсе enp0s8 который смотрит в локальную сети на 
Открываю правилом добавив 22
$IPT -A INPUT -i enp0s8 -p tcp -m multiport --dport 22,80,53,3128 -j ACCEPT
получаю
22/tcp   open   ssh
53/tcp   closed domain
80/tcp   closed http
3128/tcp closed squid-http
MAC Address: 08:00:27:08:47:76 (Oracle VirtualBox virtual NIC)


Получается что nmap определят открыт или закрыт ssh при открытом 22 порту на любом из интерфейсов enp0s8  enp0s3
drac753 ★★ ()
Последнее исправление: drac753 (всего исправлений: 1)
Ответ на: комментарий от mogwai

DROP вы классифицируете результаты на «соединение установлено» и «время ожидания истекло».

То есть таким образом DROP не дает соединения , но дает возможность nmap получить информацию ?

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

Получается что nmap определят открыт или закрыт ssh при открытом 22 порту на любом из интерфейсов

У тебя там большой конфиг, подсказать какая из строчек дает такой эффект не могу.

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

есть прокси сервер для локальной сети с белым ip (на котором 22 порт закрыт ) на одном интерфейсе и обычным ip типа 192.168.. на другой сетевухе на котором 22 порт открыт nmap при сканировании белого ip увидит 22 порт открытым?

Смотря как закрывать будете. Linux принимает пакеты на любой из IP адресов, пришедшие по любому сетевому интерфейсу. Если вы при блокировании ориентируетесь на интерфейсы (-i eth0), тогда запрос пришедший из мира на любой IP будет заблокирован, а запросы из локальной сети (тоже на любой IP) будут разрешены. Если блокировать с указанием IP - -d x.x.x.x, тогда из обеих сетей запросы на заблокированный IP будут блокироваться, а на не заблокированный будут работать.

Именно поэтому более правильным вариантом будет блокировка ориентированная на входящий сетевой интерфейс.

Если хотите, чтоб из локальной сети работал только локальный IP, - так и укажите:

iptables -A INPUT -i enp0s8 ! -d 192.168.4.17 -j DROP
spirit ★★★★★ ()
Ответ на: комментарий от Datt_

хммм.. А ты уверен, что iptables работает?

Что за странный комментарий? А почему бы им не работать?

В современных дистрибутивах iptables если и есть, то не используется напрямую.

iptables - это просто способ общаться с nt-фильтром, который является частью ядра. Если команда отработала без ошибок, значит, информация nt-фильтру передана.

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

Насколько я понимаю правильнее будет использовать вместо DROP REJECT ?

При большом трафике правило REJECT создает дополнительную нагрузку на сеть (за счет отправки ICMP-пакетов), но в Вашем случае это скорее всего имеет лишь теоретическое значение, на практике разницы не увидите.

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

Емнип в центосе встречал, что айпитейблс команда есть, но сам сервис замаскирвоан и если писать команды айпитейблс, то они игнорятся, и там либо юзать firewalld, либо его удалять и что-то делать с iptables

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

и если писать команды айпитейблс, то они игнорятся

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

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

но в инете пишут что для работы iptables нужно установить iptables-service, и отрубить firewalld, но я этого не делал. Странно

Речь, видимо, о том, чтобы люди не использовали iptables и firewalld одновременно, т. к. они будут переписывать настройки друг друга.

iptables-service

А это просто один из способов применения правил iptables при загрузке машины. Работоспособность самих правил от него не зависит.

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

Происходит трансляция правил iptables в nftables.

Ну да, nftables по заявлениям разработчиков понимают синтаксис iptables за некоторыми исключениями, которые мы с Вами раньше обсуждали. И вроде как в новых системах iptables - это просто символическая ссылка на nftables.

В любом случае, если система съела конкретное правило и не выдала никакой ошибки, можно быть уверенным, что правило будет работать.

Serge10 ★★★★★ ()