Síťové připojení TCP/IP může být blokováno, přerušeno, otevřeno nebo filtrováno. Tyto akce jsou obecně řízeny firewallem IPtables, který systém používá, a jsou nezávislé na jakémkoli procesu nebo programu, který může naslouchat na síťovém portu. Za firewallem může na portu naslouchat nebo nenaslouchat program nebo proces (server nebo démon). To lze zkontrolovat pomocí programů netstat nebo ss. Kontrola, zda je port otevřený, blokovaný, zahozený nebo filtrovaný na bráně firewall, není jednoduché. Existují dva způsoby, jak to provést:
- externě otestujte port
- vypište konfiguraci brány firewall a zkontrolujte výstup
1. Použití netstat k zobrazení procesů naslouchání
Chcete-li zjistit, zda program nebo proces naslouchá na portu a je připraven přijmout paket, použijte příkaz netstat.
# netstat -tulnp
Argumenty příkazu netstat jsou uvedeny níže:
t – Zobrazit TCP
u – Zobrazit UDP
l – Zobrazit pouze naslouchající procesy (netstat může zobrazit jak naslouchání, tak všechna navázaná připojení, tedy i jako klient)
n – Neřešte názvy IP adres sítě ani čísla portů
p – Zobrazit název procesu, který naslouchá na portu
Například:
# netstat -tulnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1254/rpcbind tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1484/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1355/cupsd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1562/master tcp 0 0 0.0.0.0:44349 0.0.0.0:* LISTEN 1274/rpc.statd udp 0 0 0.0.0.0:111 0.0.0.0:* 1254/rpcbind udp 0 0 0.0.0.0:631 0.0.0.0:* 1355/cupsd udp 0 0 0.0.0.0:44165 0.0.0.0:* 1274/rpc.statd udp 0 0 0.0.0.0:602 0.0.0.0:* 1274/rpc.statd udp 0 0 0.0.0.0:1001 0.0.0.0:* 1254/rpcbind
2. Pomocí ss můžete vidět procesy naslouchání
Chcete-li zjistit, zda program nebo proces naslouchá na portu a je připraven přijmout paket, použijte program ss.
# ss -nutlp
Argumenty programu ss jsou uvedeny níže:
t – Zobrazení soketů TCP.u – Zobrazit zásuvky UDP.
l – Zobrazit poslechové zásuvky
n – Nyní zkuste přeložit jména
p – Zobrazit proces pomocí soketu
Například:
# ss -nutlp Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port udp UNCONN 0 0 *:111 *:* users:(("rpcbind",1254,6)) udp UNCONN 0 0 *:631 *:* users:(("cupsd",1355,9)) udp UNCONN 0 0 *:44165 *:* users:(("rpc.statd",1274,8)) udp UNCONN 0 0 *:602 *:* users:(("rpc.statd",1274,5)) udp UNCONN 0 0 *:1001 *:* users:(("rpcbind",1254,7)) tcp LISTEN 0 128 *:111 *:* users:(("rpcbind",1254,8)) tcp LISTEN 0 128 *:22 *:* users:(("sshd",1484,3)) tcp LISTEN 0 128 127.0.0.1:631 *:* users:(("cupsd",1355,7)) tcp LISTEN 0 100 127.0.0.1:25 *:* users:(("master",1562,12)) tcp LISTEN 0 128 *:44349 *:* users:(("rpc.statd",1274,9))
3. pomocí lsof najít otevřené porty
Chcete-li zobrazit seznam všech otevřených portů v systému, použijte následující příkaz k vypsání názvu a čísla procesu, který porty otevřel.
# lsof -i
Zde je příklad výstupu:
# lsof -i COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 1254 rpc 6u IPv4 12592 0t0 UDP *:sunrpc rpcbind 1254 rpc 7u IPv4 12596 0t0 UDP *:1001 rpcbind 1254 rpc 8u IPv4 12597 0t0 TCP *:sunrpc (LISTEN) rpc.statd 1274 rpcuser 5r IPv4 12784 0t0 UDP *:xmlrpc-beep rpc.statd 1274 rpcuser 8u IPv4 12788 0t0 UDP *:44165 rpc.statd 1274 rpcuser 9u IPv4 12792 0t0 TCP *:44349 (LISTEN) cupsd 1355 root 7u IPv4 13147 0t0 TCP localhost:ipp (LISTEN) cupsd 1355 root 9u IPv4 13150 0t0 UDP *:ipp sshd 1484 root 3u IPv4 13707 0t0 TCP *:ssh (LISTEN) master 1562 root 12u IPv4 13923 0t0 TCP localhost:smtp (LISTEN) sshd 1657 root 3r IPv4 14745 0t0 TCP 192.168.1.50:ssh->192.168.1.101:49549 (ESTABLISHED)
Externí testování portu
Aplikaci telnet lze použít pro testování jednoduché konektivity síťového soketu, ale pouze pro připojení TCP, nikoli UDP. Pokud například chci zjistit, zda je TCP port 80 v systému připraven přijmout připojení, uvedu IP adresu a port pro telnet:
# telnet 192.168.1.55 80 Trying 192.168.1.55... Connected to example.redhat.com (192.168.1.55). Escape character is '^]'.
Pokud server neposlouchá, odpověď je jiná:
# telnet 10.0.0.25 80 Trying 10.0.0.25... telnet: connect to address 10.0.0.25: Connection refused telnet: Unable to connect to remote host: Connection refused
- To znamená, že připojení bylo aktivně odmítnuto. Subsystém TCP přijal paket, prozkoumal jej a zjistil, že se jedná o požadavek na otevření soketu na portu 80, zjistil, že neexistuje žádný proces připravený k přijetí připojení, a odpověděl odmítnutím.
- Pokud byla brána firewall nakonfigurována tak, aby blokovala nebo filtrovala připojení, telnet by zobrazil něco velmi podobného výše uvedenému, i když byl proces připraven k přijetí připojení.
- Pokud by byla brána firewall nakonfigurována tak, aby přerušovala připojení, neviděli bychom žádnou odpověď a místo toho by vypršel časový limit telnetu:
# telnet 10.0.0.25 80 Trying 10.0.0.25... telnet: connect to address 10.0.0.25: Connection timed out
Výpis pravidel brány firewall
V Red Hat Enterprise Linux mohou být pravidla brány firewall uvedena pomocí příkazu service:
# service iptables status
Nebo pomocí příkazu iptables:
# iptables -xvn -L