포트 스캐너로부터 보호하는 방법은 무엇입니까?

포트 스캐너로부터 보호하는 방법은 무엇입니까?

nmap내 기계의 감시를 완전히 방지 할 수 있습니까 ? 포트 스캔을 통해 들어오는 모든 연결을 제거한 후 iptables"필터링됨"이 반환됩니다.nmap이 어떤 포트가 존재하는지 전혀 볼 수 없다면 더 좋을 것입니다.. 가능합니까?

다음 솔루션이 작동하지 않는 것 같습니다.

http://sharadchhetri.com/2013/06/15/how-to-protect-from-port-scanning-and-smurf-attack-in-linux-server-by-iptables/

https://dangertux.wordpress.com/2011/09/18/defeating-port-scans-using-iptables/

http://prithak.blogspot.de/2011/12/blocking-nmap-scans-with-pf-and.html

nmap이 내 장치를 보는 것을 막을 수 없다면 nmap이 내 IP를 완전히 스캔하는 데 오랜 시간이 걸리도록 속도를 제한할 수 있습니까?

답변1

속도 제한에 도달하면 nmap이 스캔 대기 시간을 늘리기 때문에 간단한 속도 제한으로는 충분하지 않습니다. iptables의 가장 좋은 용도는 다음과 같습니다.

먼저 IPset 목록을 만듭니다.

ipset create port_scanners hash:ip family inet hashsize 32768 maxelem 65536 timeout 600
ipset create scanned_ports hash:ip,port family inet hashsize 32768 maxelem 65536 timeout 60

및 iptables 규칙

iptables -A INPUT -m state --state INVALID -j DROP
iptables -A INPUT -m state --state NEW -m set ! --match-set scanned_ports src,dst -m hashlimit --hashlimit-above 1/hour --hashlimit-burst 5 --hashlimit-mode srcip --hashlimit-name portscan --hashlimit-htable-expire 10000 -j SET --add-set port_scanners src --exist
iptables -A INPUT -m state --state NEW -m set --match-set port_scanners src -j DROP
iptables -A INPUT -m state --state NEW -j SET --add-set scanned_ports src,dst

작동 원리:

여기서는 스캔된 포트를 Scand_Ports 세트에 저장하고 hashlimit 규칙에 따라서만 새로운 스캔 포트를 계산합니다. 스캐너가 5개의 다른 포트로 패킷을 보내는 경우(--hashlimit-burst 5 참조) 이는 아마도 스캐너일 가능성이 높으므로 이를 port_scanners 세트에 추가합니다.

port_scanners의 시간 초과는 스캐너의 차단 시간입니다(이 예에서는 10분). 공격자가 10초 동안 스캔을 중지할 때까지 처음부터(--exist 참조) 계산됩니다(--hashlimit-htable-expire 10000 참조).

이러한 매개변수를 자신에게 가장 적합한 값으로 설정할 수 있습니다.

누군가가 IP를 스푸핑으로 "스캔"하여 차단할 수 있다는 점에 유의하세요. 차단 시간 초과를 너무 길게 설정하지 않는 것이 좋습니다.

다음에 추가:

화이트리스트를 추가하려면 화이트리스트를 생성하세요.

ipset create whitelisted hash:net

폐기 규칙을 변경해 보세요.

iptables -A INPUT -m state --state NEW -m set --match-set port_scanners src -m set ! --match-set whitelisted src -j DROP

답변2

SSH와 같은 서비스를 사용 가능하게 만들고 싶다면 Nmap이 이를 찾을 수 있습니다. 일반적으로 포트 검색은 위협을 가하지 않습니다. 어떤 서비스가 실행되고 있는지 모르는 공격자에게 보안을 의존해서는 안 됩니다. SSH에 비표준 포트를 사용하면 주로 기본 포트 22에서 자동화된 무차별 대입 공격이 이루어지기 때문에 로그 노이즈를 줄이는 데 도움이 됩니다.

보안 관점에서 볼 때 주요 목표는 이해/예측, 방지, 감지, 대응 및 복구입니다. 포트 스캐닝이 이들과 어떻게 관련되는지는 다음과 같습니다.

알고/예측하다: 보유하고 있는 자산과 공격자가 노리는 자산이 무엇인지 이해합니다. 노출을 확인하려면 자신을 포트 스캔하세요. 포트 스캔이 할 수 있는 것과 할 수 없는 것을 이해하십시오. 그것은 마법의 해커 요정이 아닙니다.

예방하다: 노출되어서는 안되는 포트/서비스에 대한 접근을 방화벽을 사용하여 차단합니다. 알려진 IP 주소에 대한 액세스를 제한합니다. 민감한 데이터와 서버를 네트워크 경계로 이동하고 VPN 또는 기타 액세스 제어를 통해 액세스를 제어하세요. 속도 제한은 예방이 아니라 지연일 뿐입니다.

발각: 포트 스캔, 무차별 대입 공격 및 기타 공격 징후에 대한 로그를 모니터링합니다. 일반적인 배경 소음이 무엇인지, 실제로 위협을 가하는 것이 무엇인지 알아보세요. 침해 징후에 대한 경고를 설정하세요.

대답하다: 보안 침해에 대처하기 위한 계획을 개발합니다. 위협에 대처하기 위해 fall2ban과 같은 자동화된 방어를 설정하세요. 속도 제한은 응답이 될 수 있지만 실제로 어떤 것을 중지합니까?

다시 덮다: 복구 계획을 개발합니다. 정기적으로 백업을 수행하고 백업에서 복원을 테스트하십시오.

답변3

다음은 "필터링된" 상태에 대한 nmap의 문서에 나와 있는 내용입니다.

상태는 열림, 필터링됨, 닫힘 또는 필터링되지 않음일 수 있습니다. 개방형은 대상 시스템의 애플리케이션이 해당 포트의 연결/패킷을 수신하고 있음을 의미합니다. 필터링됨은 방화벽, 필터 또는 기타 네트워크 장애물이 포트를 차단하여 Nmap이 포트가 열려 있는지 닫혀 있는지 확인할 수 없다는 것을 의미합니다. 닫힌 포트에는 애플리케이션 수신이 없지만 언제든지 열 수 있습니다. 포트가 Nmap의 프로브에 응답하면 필터링되지 않은 것으로 분류되지만 Nmap은 포트가 열려 있는지 닫혀 있는지 확인할 수 없습니다. Nmap은 두 가지 상태 중 어느 것이 포트를 설명하는지 결정할 수 없는 경우 open|filtered 및 close|filtered 상태 조합을 보고합니다.

이는 "다운"(즉, 포트에 연결할 수 있지만 수신 대기 중인 서버가 없음)에 대한 정상적인 동작처럼 보이지만 검사 중인 서버가 완전히 조용하기 때문에 nmap의 "필터링" 진단이 식별하는 것 (결국 연결 시간 초과) REJECT보다 iptables 작업에 더 가깝습니다 . , 그렇게 즉시 종료하는 대신 . )DROPDROPREJECT

REJECT따라서 대신 사용해보고 DROP스캔 결과가 원하는 대로 나타나는지 확인하는 것이 좋습니다.

답변4

@ibrahim이 제공한 답변은 매우 훌륭하지만 iptables최신 시스템을 위해 더 이상 사용되지 않습니다 nftables.

iptables따라서 그의 코드를 nftables다음 과 같이 변환하는 방법이 궁금하다면 아래에 설명이 포함된 완벽하고 테스트된 솔루션이 있습니다.

노트:이 예는 에서만 작동 IPv4하지만 TCP잠재적 공격자는 또는 와 같은 다른 프로토콜을 사용하여 UDP공격 할 수도 있으므로 IPv6이를 설명하려면 여기에서 몇 가지 추가 작업을 수행해야 합니다.

파일: attacker.nft
스크립트 실행:sudo nft -f ./attacker.nft

#!/usr/sbin/nft -f

#
# IPv4 port scanning and information gathering detection
#
add table filter_4

# Sees all incoming packets, before any routing decision has been made
# Packets may be addressed to the local or remote systems
add chain filter_4 prerouting_4 {
    # -175 = After conntrack and before mangle
    type filter hook prerouting priority -175; policy accept;
}

# Port scanning detection chain
add chain filter_4 attacker_4 {
    comment "IPv4 port scanning detection chain"
}

# Prerouting filter
add rule filter_4 prerouting_4 jump attacker_4

# IPv4 attack count
add counter filter_4 attacker_count_4 {
    comment "Count of attacks over IPv4"
}

# A record of current attackers on cooldown
# NOTE: Do not set too high timeout because the attacker might as well spoof it's IP
add set filter_4 port_scanners_4 {
    flags dynamic
    type ipv4_addr
    timeout 10m
    size 256
    comment "IP of the attacker performing port scan"
}

# A record of source IP and local ports being accessed
add set filter_4 scanned_ports_4 {
    type ipv4_addr . inet_service
    flags dynamic
    timeout 1m
    size 256
    comment "Potential attacker IP and local port accessed"
}

# Detect port scanning and record attackers IP
# meter: iptables equivalent is hashlimit
# portscan: meter name
# timeout: After how many seconds do meter entries expire
# limit rate over: Match if the rate is above amount
# burst: Maximum initial number of packets to match: this number gets recharged by one every time the limit specified above is not reached, up to this number
# the default is 5, if the entry expires, the burst value is reset too
add rule filter_4 attacker_4 ct state new ip saddr . tcp dport != @scanned_ports_4 meter portscan { ip saddr timeout 10s limit rate over 1/hour burst 5 packets } update @port_scanners_4 { ip saddr }

# Drop packets originating from attacker's IP
add rule filter_4 attacker_4 ct state new ip saddr == @port_scanners_4 log flags all prefix "drop attacker_4 TCP port scanner: " counter name attacker_count_4 drop

# Keep a record of potential attacker IP and local port being probed
add rule filter_4 attacker_4 ct state new update @scanned_ports_4 { ip saddr . tcp dport }

관련 정보