Portmapper (portmap, rpcbind) — сервис системы удаленного вызова процедур (Open Network Computing Remote Procedure Call), служит для преобразования номеров сервисов Remote Procedure Call
, таких как NIS
или NFS
в номера портов TCP/UDP
, использует механизм широковещательных сообщений RPC
на порт 111
.
Открытой службой portmapper
могут воспользоваться для проведения DDoS-атаки. Протокол UDP
позволяет осуществить подмену IP (спуфинг). Используя IP-адрес жертвы, злоумышленники могут отправлять запросы к portmapper. В результате, когда сервер получит запросы, он будет отправлять все ответы на адрес жертвы. Большой объем такого «отраженного» трафика может вывести из строя сервер или сеть жертвы.
Как проверить
Для проверки можно использовать утилиту rpcinfo
, которая выполняет RPC-запрос и выводит зарегистрированные RPC-сервисы. Проверять можно как локальный, так и удалённые хосты.
Пример проверки локального хоста:
# 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
Для проверки удалённого хоста необходимо указать его адрес, например после ключа -p
или -s
для вывода в сокращённом виде, если не указать то будет локальный вызов RPC. Пример вывода:
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
Подробнее про утилиту rpcinfo можно прочитать, вызвав справку с помощью команды man rpcinfo
(также man rpcbind
).
Дополнительно проверку локального хоста можно выполнить утилитами ss (netstat
). Описание ключей проверяйте в man-справках.
Пример ниже (заголовок команд добавлен отдельно для наглядности):
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))
Как отключить
В дистрибутивах, в которых используется система systemd, отключить и удалить из загрузки portmapper (rpcbind
) можно следующим образом:
systemctl stop rpcbind.service
Warning: Stopping rpcbind.service, but it can still be activated by:
rpcbind.socket
Далее остановить сокет:
systemctl stop rpcbind.socket
Удалить из автозагрузки:
systemctl disable rpcbind.service
systemctl disable rpcbind.socket
Если используются сценарии загрузки на базе скриптов в /etc/init.d
, то остановить службу можно следующим образом:
/etc/init.d/rpcbind stop
Удалить из автозагрузки в дистрибутивах на базе Debian можно так:
update-rc.d -f rpcbind remove
В дистрибутивах от RedHat:
chkconfig rpcbind off
После отключения сервиса вывод rpcinfo
будет такой:
rpcinfo
rpcinfo: can't contact rpcbind: RPC: Remote system error - Connection refused
Как ограничить подключение к portmapper
Если portmapper
необходим, то можно ограничить доступ к нему, разрешив подключение только для определенных IP. Это можно сделать при помощи сетевого фильтра, ограничив доступ к порту 111
.
Пример ограничения протокола UDP
для 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