NFsec Logo

Nmap widzi przez iptables?

23/11/2013 w Bezpieczeństwo Brak komentarzy.  (artykuł nr 421, ilość słów: 609)

Z

ałóżmy, że na moim serwerze posiadam zainstalowany tylko serwer MySQL, który nasłuchuje na wszystkich interfejsach (zewnętrzny / wewnętrzny / lokalny). Jednak za pomocą netfilter ograniczam do niego dostęp tylko do interfejsu zwrotnego, a w przyszłości wybiorę kolejne adresy IP, które będą mogły się z nim łączyć. Wydaje proste polecenie iptables:

iptables -A INPUT -p tcp --dport 3306 ! -s 127.0.0.1 -j DROP

A więc mój firewall wygląda następująco:

[root@darkstar ~]# iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
DROP       tcp  -- !localhost.localdomain  anywhere            tcp dpt:mysql

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere


Z innego serwera za pomocą klienta MySQL próbuje się połączyć z serwerem, aby upewnić się, że połączenie zostanie odrzucone. I tak jest. Dla spokoju ducha za pomocą nmap sprawdzam, jak wygląda to z jego punktu widzenia:

intruder:~# nmap -v darkstar.com

Starting Nmap 5.00 ( http://nmap.org ) at 2013-11-23 21:10 CET
NSE: Loaded 0 scripts for scanning.
Initiating Ping Scan at 21:10
Scanning 12.34.56.78 [4 ports]
Completed Ping Scan at 21:10, 0.03s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 21:10
Completed Parallel DNS resolution of 1 host. at 21:10, 0.00s elapsed
Initiating SYN Stealth Scan at 21:10
Scanning darkstar.com (12.34.56.78) [1000 ports]
Completed SYN Stealth Scan at 21:10, 1.23s elapsed (1000 total ports)
Host darkstar.com (12.34.56.78) is up (0.00036s latency).
Interesting ports on darkstar.com (12.34.56.78):
Not shown: 999 closed ports
PORT     STATE    SERVICE
3306/tcp filtered mysql

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 1.33 seconds

Upewniłem się, że mój firewall blokuje dostęp do serwera MySQL, ale nie za bardzo pasuje mi to, że nmap przez proste skanowanie portów jest w stanie powiedzieć, że na moim serwerze teoretycznie zainstalowany jest serwer MySQL. Jak to jest możliwe? Odpowiedź tkwi w sposobie, w jaki firewall odpowiada na żądanie połączenia. Jeśli reguła łańcucha trafia w sposób postępowania typu DROP – przychodzący pakiet po prostu jest ignorowany. Jest to zupełnie inny sposób niż ten, który wykonywany jest przez system operacyjny, gdy żadna aplikacja nie nasłuchuje na danym porcie – wówczas system odpowiada na żądanie pakietem TCP RST. Dlatego dość sprytny skaner portów jest w stanie odróżnić, który port jest nieużywany, a który zwyczajnie filtrowany. Jeśli chcemy, aby nasz firewall zachował się identycznie jak system operacyjny wystarczy w/w regułę zastąpić następującym wpisem:

iptables -A INPUT -p tcp --dport 3306 ! -s 127.0.0.1 -j REJECT --reject-with tcp-reset

Powtarzając skanowanie skanerem nmap – wyniki są następujące:

intruder:~# nmap -v darkstar.com

Starting Nmap 5.00 ( http://nmap.org ) at 2013-11-23 21:18 CET
Nmap scan report for darkstar.com (12.34.56.78)
Host is up (0.000015s latency).
All 1000 scanned ports on darkstar.com (12.34.56.78) are closed

Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 16.96 seconds

Więcej informacji: Filtered: NMAP Port Scanner Sees Through IPtables Firewall, NMAP vs IPTables

Kategorie K a t e g o r i e : Bezpieczeństwo

Tagi T a g i : , , , ,

Zostaw odpowiedź.

Musisz być zalogowany by móc komentować.