Una de las nuevas funcionalidades de seguridad que incorpra Solaris 10 / OpenSolaris reside que la mayoria de servicios de red o de acceso al sistema ya estan integrados con TCP_WRAPPER.
En este articulo vamos a ver como permitir/denegar el acceso al puerto TCP 1111, el cual es habilitado por el proceso rpcbind (utilizado para clientes NFS, NIS...). Es decir podemos limitar los hosts que envian peticiones de tipo RPC a nuestro sistema.
Dentro de SMF, entramos en este servicio de red, asi:
# svccfg
svc:> select network/rpc/bind
svc:/network/rpc/bind> listprop
config application
config/allow_indirect boolean true
config/verbose_logging boolean true
config/enable_tcpwrappers boolean true
fs dependency
fs/entities fmri svc:/system/filesystem/minimal
fs/grouping astring require_all
fs/restart_on astring none
fs/type astring service
identity dependency
identity/entities fmri svc:/system/identity:node
identity/grouping astring require_all
identity/restart_on astring refresh
identity/type astring service
sysidtool dependency
sysidtool/entities fmri svc:/system/sysidtool:net
sysidtool/grouping astring require_all
sysidtool/restart_on astring none
sysidtool/type astring service
routing dependency
routing/entities fmri svc:/network/initial:default
routing/grouping astring optional_all
routing/restart_on astring none
routing/type astring service
general framework
general/entity_stability astring Unstable
general/single_instance boolean true
start method
start/exec astring "/lib/svc/method/rpc-bind %m"
start/group astring root
start/limit_privileges astring :default
start/privileges astring basic,file_chown,file_chown_self,file_owner,net_privaddr,proc_setid,sys_nfs
start/project astring :default
start/resource_pool astring :default
start/supp_groups astring :default
start/timeout_seconds count 60
start/type astring method
start/use_profile boolean false
start/user astring root
start/working_directory astring :default
stop method
stop/exec astring "/lib/svc/method/rpc-bind %m %{restarter/contract}"
stop/group astring root
stop/limit_privileges astring :default
stop/privileges astring basic,proc_owner
stop/project astring :default
stop/resource_pool astring :default
stop/supp_groups astring :default
stop/timeout_seconds count 60
stop/type astring method
stop/use_profile boolean false
stop/user astring root
stop/working_directory astring :default
tm_common_name template
tm_common_name/C ustring "RPC bindings"
tm_man_rpcbind template
tm_man_rpcbind/manpath astring /usr/share/man
tm_man_rpcbind/section astring 1M
tm_man_rpcbind/title astring rpcbind
Habilitamos el filtrado:
svc:/network/rpc/bind> setprop config/enable_tcpwrappers=true
Finalizamos la edicion de este servicio y lo reiniciamos:
svc:/network/rpc/bind> end
# svcadm restart rpc/bind
Justo en este momento, ya estamos en condiciones de configurar el acceso. Denegamos todo y unicamente permitimos el acceso a través de la interface de loopback.
# cat /etc/hosts.deny
ALL: ALL
# cat /etc/hosts.allow
rpcbind: 127.0.0.1
Y comprobamos que dicho filtrado es correcto:
# uname -a
SunOS opensolaris 5.10 Generic_120012-14 i86pc i386 i86pc
# telnet opensolaris 1111
Trying 10.73.130.251…
telnet: connect to address 192.168.1.3: Connection refused
Fácil, no?