Portmapper (portmap, rpcbind) is an Open Network Computing Remote Procedure Call (ONC RPC) service that is used to convert numbers of services Remote Procedure Call, such as NIS or NFS into port numbers TCP/UDP, uses the mechanism of broadcast messages RPC on port 111.
An open portmapper service can be used to conduct a DDoS attack. The UDP protocol allows IP spoofing (spoofing). Using the victim's IP address, attackers can send requests to the portmapper. As a result, when the server receives requests, it will send all responses to the victim's address. A large amount of such "reflected" traffic can disable the victim's server or network.
How to check
To check, you can use the rpcinfo utility, which performs an RPC request and displays registered RPC services. You can check both local and remote hosts.
Localhost check example:
	# rpcinfo 
	 
program version netid     address                service    owner
100000    4    tcp6      ::.0.111               portmapper superuser
100000    3    tcp6      ::.0.111               portmapper superuser
100000    4    udp6      ::.0.111               portmapper superuser
100000    3    udp6      ::.0.111               portmapper superuser
100000    4    tcp       0.0.0.0.0.111          portmapper superuser
100000    3    tcp       0.0.0.0.0.111          portmapper superuser
100000    2    tcp       0.0.0.0.0.111          portmapper superuser
100000    4    udp       0.0.0.0.0.111          portmapper superuser
100000    3    udp       0.0.0.0.0.111          portmapper superuser
100000    2    udp       0.0.0.0.0.111          portmapper superuser
100000    4    local     /run/rpcbind.sock      portmapper superuser
100000    3    local     /run/rpcbind.sock      portmapper superuser
	
To check a remote host, you must specify its address, for example, after the key -p or -s for output in abbreviated form, if not specified, then there will be a local RPC call. Sample output:
	rpcinfo -p [IP]
	 
program vers proto   port  service
100000    4   tcp    111  portmapper
100000    3   tcp    111  portmapper
100000    2   tcp    111  portmapper
100000    4   udp    111  portmapper
100000    3   udp    111  portmapper
100000    2   udp    111  portmapper
rpcinfo -s [IP]
program version(s) netid(s)                         service     owner
100000  2,3,4     local,udp,tcp,udp6,tcp6          portmapper  superuser
	
You can read more about the rpcinfo utility by calling the help using the man rpcinfo command (also man rpcbind).
	Additionally, checking the local host can be done with the ss utilities (netstat). Check the description of the keys in the man pages. An example is below (the command header is added separately for clarity):
	ss -lptun | grep 111
	 
Netid State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp   UNCONN 0      0            0.0.0.0:111       0.0.0.0:*    users:(("rpcbind",pid=593,fd=5),("systemd",pid=1,fd=37))                                                                                 
udp   UNCONN 0      0               [::]:111          [::]:*    users:(("rpcbind",pid=593,fd=7),("systemd",pid=1,fd=39))                                                                                 
tcp   LISTEN 0      4096         0.0.0.0:111       0.0.0.0:*    users:(("rpcbind",pid=593,fd=4),("systemd",pid=1,fd=36))                                                                                 
tcp   LISTEN 0      4096            [::]:111          [::]:*    users:(("rpcbind",pid=593,fd=6),("systemd",pid=1,fd=38))
	
How to disable
On systemd distributions, you can disable and remove portmapper (rpcbind) from boot as follows:
	systemctl stop rpcbind.service 
	 
Warning: Stopping rpcbind.service, but it can still be activated by:
	rpcbind.socket
	
Next, stop the socket:
	systemctl stop rpcbind.socket
	
Remove from startup:
	systemctl disable rpcbind.service
systemctl disable rpcbind.socket
	
If you are using script-based boot scripts in /etc/init.d, you can stop the service as follows:
/etc/init.d/rpcbind stop
You can remove it from startup on Debian-based distributions like this:
	update-rc.d -f rpcbind remove
	
In distributions from RedHat:
chkconfig rpcbind off
After disabling the service, the rpcinfo output will look like this:
	rpcinfo 
	 
rpcinfo: can't contact rpcbind: RPC: Remote system error - Connection refused
	
How to restrict connection to portmapper
If the portmapper is required, then you can restrict access to it by only allowing connections to certain IPs. This can be done using a network filter by restricting access to port 111.
Example of UDP protocol restriction for IPv4:
	iptables -A INPUT -p udp -s 192.168.1.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -p udp -s 127.0.0.1 --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j DROP
	
Comments