Opening Ports in DB System Internal Firewall

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.

Leave a Comment

Your email address will not be published.