Como já foi mencionado em alguns artigos sobre OCI, devido a pertinente preocupação que devemos ter em relação a segurança dos ambientes criados, temos 2 camadas para liberação de portas em um DB System: Security Lists e o Firewall interno da máquina (Iptables). Aqui, vamos simular a criação de um novo listener, que usa a porta 1522, e os procedimentos necessários para a sua utilização.
Logando no ambiente com o usuário oracle, criando o arquivo listener.ora com o conteúdo do novo listener:
[opc@luxor ~]$ sudo su - oracle
Last login: Tue May 18 07:16:11 UTC 2021
[oracle@luxor ~]$ cd $ORACLE_HOME/network/admin
[oracle@luxor admin]$ vi listener.ora
Conteúdo dos parâmetros respeitando os valores corretos do ambiente:
INSULA=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=luxor.luxorsubnet.luxorvcn.oraclevcn.com)(PORT=1522))
(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
)
SID_LIST_INSULA=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=CORTEX_phx1hb)
(ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/dbhome_1)
(SID_NAME=CORTEX))
)
Iniciando o novo listener:
[oracle@luxor admin]$ lsnrctl start INSULA
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 18-MAY-2021 07:18:43
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Starting /u01/app/oracle/product/12.2.0.1/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/luxor/insula/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=luxor.luxorsubnet.luxorvcn.oraclevcn.com)(PORT=1522)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=luxor.luxorsubnet.luxorvcn.oraclevcn.com)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias INSULA
Version TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date 18-MAY-2021 07:18:43
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/luxor/insula/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=luxor.luxorsubnet.luxorvcn.oraclevcn.com)(PORT=1522)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=extproc)))
Services Summary...
Service "CORTEX_phx1hb" has 1 instance(s).
Instance "CORTEX", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully
[oracle@luxor admin]$ lsnrctl service INSULA
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 18-MAY-2021 07:18:56
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=luxor.luxorsubnet.luxorvcn.oraclevcn.com)(PORT=1522)))
Services Summary...
Service "CORTEX_phx1hb" has 1 instance(s).
Instance "CORTEX", status UNKNOWN, has 1 handler(s) for this service...
Handler(s):
"DEDICATED" established:0 refused:0
LOCAL SERVER
The command completed successfully
Adicionando uma nova string no arquivo tnsnames.ora na máquina do DB-System:
[oracle@luxor admin]$ vi tnsnames.ora
CORTEX_INSULA =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = luxor.luxorsubnet.luxorvcn.oraclevcn.com)(PORT = 1522))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID = CORTEX)
)
)
Realizando teste de tnsping e validando a sua conexão (que teoricamente deve dar certo pois o acesso de origem está dentro da subnet, ou seja, não teria de passar pelas regras do Security List ou Iptables):
[oracle@luxor admin]$ tnsping CORTEX_INSULA
TNS Ping Utility for Linux: Version 12.2.0.1.0 - Production on 18-MAY-2021 07:21:07
Copyright (c) 1997, 2016, Oracle. All rights reserved.
Used parameter files:
/u01/app/oracle/product/12.2.0.1/dbhome_1/network/admin/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = luxor.luxorsubnet.luxorvcn.oraclevcn.com)(PORT = 1522)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = CORTEX)))
OK (0 msec)
[oracle@luxor admin]$ sqlplus system@CORTEX_INSULA
SQL*Plus: Release 12.2.0.1.0 Production on Tue May 18 07:21:21 2021
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Enter password:
Last Successful login time: Tue May 18 2021 07:08:55 +00:00
Connected to:
Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production
SQL> SELECT NAME,OPEN_MODE,CDB FROM V$DATABASE;
NAME OPEN_MODE CDB
--------- -------------------- ---
CORTEX READ WRITE YES
Agora pego essa mesma string de conexão, exceto pelo host, que eu substituo pelo IP público da máquina, e adiciono no arquivo tnsnames.ora do meu notebook pessoal:

Ao fazer o teste de tnsping, vemos que não é possível chegar no ambiente:

Assim, vamos até a Subnet onde reside nossa máquina que hospeda o DB-System, e adicionamos na Security List uma regra para a porta 1522, que é utilizada em nosso novo listener:


Regra criada com sucesso:

Porém, ao tentar realizar o teste de conexão novamente, o mesmo erro é reportado:

Isso nos indica que algum bloqueio ainda ocorre, fora da camada da Security List. Assim, vamos para a camada de firewall interno do S.O (Iptables). Logando com o usuário root, vamos realizar um backup das configurações atuais, para caso de rollback:
[oracle@luxor admin]$ exit
logout
[opc@luxor ~]$ sudo su -
Last login: Tue May 18 07:24:42 UTC 2021
[root@luxor ~]# iptables-save > /tmp/iptables.OLD
[root@luxor ~]# ls -lthr /tmp/iptables.OLD
-rw-r--r-- 1 root root 4.8K May 18 07:31 /tmp/iptables.OLD
[root@luxor ~]#
Adicionando regra para a porta 1522:
[root@luxor ~]# iptables -I INPUT 8 -p tcp -m state --state NEW -m tcp --dport 1522 -j ACCEPT -m comment --comment "Listener INSULA"
[root@luxor ~]#
Validando status do Iptables:
[root@luxor ~]# service iptables status
Redirecting to /bin/systemctl status iptables.service
● iptables.service - IPv4 firewall with iptables
Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
Active: active (exited) since Tue 2021-05-18 06:48:54 UTC; 47min ago
Process: 1089 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
Main PID: 1089 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/iptables.service
May 18 06:48:54 luxor systemd[1]: Starting IPv4 firewall with iptables...
May 18 06:48:54 luxor iptables.init[1089]: iptables: Applying firewall rules: [ OK ]
May 18 06:48:54 luxor systemd[1]: Started IPv4 firewall with iptables.
Salvando arquivo alterado no sysconfig:
[root@luxor ~]# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
[root@luxor ~]#
Após isso, já podemos constatar que o teste de tnsping já resolve com sucesso:

Conectando no ambiente para ter certeza:

Obs: Este procedimento foi criado pelo senhor Ahmed Baraka (www.ahmedbaraka.com) e foi apenas reproduzido por mim em um laboratório pessoal para fins de aprendizado.