리눅스 서버에서 apache-log4j 사용 유무 확인 하기.

리눅스 서버에서 apache-log4j 사용 유무 확인 하기.

apache-log4j 보안 이슈가 발생함.

개발과 배포가 끝나고 유지 보수도 진행하고 있다면 개발자에게 확인하면 되겠지만, 유지 보수를 진행하지 않는 사이트 관리자들이 사용 여부와 버전까지 확인하기가 어렵다는 문제가 있다.

간단하게 아래의 방법으로 log4j 사용을 확인 해 보자.

먼저, 자신의 서버가 웹 서버로 동작하는지 확인해야 한다.

# netstat -antp | grep -i listen
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      677/httpd
tcp        0      0 0.0.0.0:8400            0.0.0.0:*               LISTEN      2314/cvd
tcp        0      0 0.0.0.0:46387           0.0.0.0:*               LISTEN      2314/cvd
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      963/sshd
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1995/master
tcp        0      0 0.0.0.0:49114           0.0.0.0:*               LISTEN      2315/ClMgrS
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      677/httpd
tcp        0      0 127.0.0.1:34107         0.0.0.0:*               LISTEN      2314/cvd
tcp        0      0 0.0.0.0:42276           0.0.0.0:*               LISTEN      2314/cvd
tcp        0      0 127.0.0.1:199           0.0.0.0:*               LISTEN      962/snmpd
tcp6       0      0 :::8009                 :::*                    LISTEN      1418/java
tcp6       0      0 :::8080                 :::*                    LISTEN      1418/java
tcp6       0      0 :::22                   :::*                    LISTEN      963/sshd
tcp6       0      0 ::1:25                  :::*                    LISTEN      1995/master
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      1418/java

Continue reading

리눅스 HA(corosync, pacemaker, shared disk)에 zabbix 모니터링 서버 구성 – part 4

리눅스 HA(corosync, pacemaker, shared disk)에 zabbix 모니터링 서버 구성 – part 4

zabbix 모니터링 서버를 Active/Passive(Standby) 클러스터로 구성하기.

리눅스 HA(corosync, pacemaker) – Part 1
리눅스 HA(corosync, pacemaker, DRBD) – Part 2
리눅스 HA (pacemaker, corosync, iscsi shared storage) – part 3

이 글은 위의 리눅스 HA (pacemaker, corosync, iscsi shared storage) – part 3 의 구성을 기본으로 zabbix 서버를 구성하는 방법을 기술합니다.

1. 구성
몇 가지 방법이 있겠지만, 여기서는 zabbix 서버가 사용하는 mysql 데이타만 공유 스토리지에 위치시키는 방법을 사용하도록 하겠다. 물론, 모든 서비스를 공유 스토리지에 위치시키는 방법도 있을 수 있지만, 그렇게 구성하려면 패키지 설치 보다는 소스코드를 받아서 컴파일하는 것이 유리하다.
여기서는 패키지 설치의 장점을 최대한 살려 가장 단순하고 쉽게 구성해 보도록 한다.

Node1
IP : 192.168.0.31
hostname: wolf1

Node2
IP : 192.168.0.32
hostname: wolf2

iSCSI shared storage Node
IP : 192.168.0.33

Cluster VIP: 192.168.0.30

Continue reading

zabbix 네트워크 스위치 등록

1. 스위치에 snmp 설정

익스트림 스위치 ip: 192.168.0.6
snmp 커뮤니티 TEST를 등록한다.

system_office.7 # configure snmpv3 add community TEST name TEST user v1v2c_ro

2. zabbix 서버에서 snmpwalk로 스위치의 snmp 확인.
이 과정은 필수가 아니며, snmpwalk 도 필수 사항이 아니다. 스위치에 snmp 설정이 잘 되어 있으면 아래처럼 MIB, OID관련 값을 볼 수 있다.

# snmpwalk -v2c -c TEST 192.168.0.6
SNMPv2-MIB::sysDescr.0 = STRING: ExtremeXOS (X430-48t) version 16.2.5.4 16.2.5.4-patch1-7 by release-manager on Thu Nov 15 07:05:05 EST 2018
SNMPv2-MIB::sysObjectID.0 = OID: SNMPv2-SMI::enterprises.1916.2.191
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2238472100) 259 days, 1:58:41.00
SNMPv2-MIB::sysContact.0 = STRING: support@extremenetworks.com, +1 888 257 3000
SNMPv2-MIB::sysName.0 = STRING: system_office
SNMPv2-MIB::sysLocation.0 = STRING:
SNMPv2-MIB::sysServices.0 = INTEGER: 79
IF-MIB::ifNumber.0 = INTEGER: 61
IF-MIB::ifIndex.1001 = INTEGER: 1001

...

Continue reading

Zabbix 설치하기 – CentOS 8 에서.

CentOS 8, Zabbix 설치.

1. 패키지 다운로드
https://www.zabbix.com/download에서 다운로드 받을 수 있다.

zabbix 사이트에서 zabbix 버전, OS 버전, 데이타베이스, 웹서버를 선택하면 이후 설치 문서에 반영된다.

zabbix 5.0LTS, CentOS8, mysql, Apache 를 선택하고 패키지를 다운로드 받았다.

2. 설치.
zabbix repository를 설치, 등록한다.

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/8/x86_64/zabbix-release-5.0-1.el8.noarch.rpm

zabbix 서버, 프론트엔드, 에이전트를 설치한다.

# dnf install zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-agent

Continue reading

Nagios core에 시스코 스위치 등록하기

Nagios core에 시스코 스위치 등록하기.

설치는 이전 문서 ‘CentOS 8, Nagios core 설치‘를 참고하면 된다.

1. 시스코 스위치의 snmp 설정.
테스트를 위해 기본 설정만 하도록 한다. 커뮤니티 이름은 TEST이고 read only(RO)로 설정했다. 스위치 호스트네임은 System_Node다.

System_Node#conf t
System_Node(config)#snmp-server community TEST ro
System_Node(config)#end

설정확인

System_Node#show snmp community 

Community name: TEST
Community Index: TEST
Community SecurityName: TEST
storage-type: nonvolatile	 active

Continue reading

Django, queryset 결과의 문자열을 변경하는 방법.

Django3.1, queryset 결과 문자열을 변경하는 방법.

아래의 모델에 저장된 MAC 주소는 ‘0021ccd3792f’ 같은 형식으로 일반적으로 표현되는 : 이나 – 이 제거된 형태다.

models.py

class MacTable(models.Model):
...
    mac = models.CharField(max_length=32, verbose_name='MAC Address.')
    device = models.ForeignKey(
        'NetworkDevice', on_delete=models.CASCADE, verbose_name='Network Device'
    )
    interface = models.CharField(max_length=32, verbose_name='Interface')
    vlan = models.CharField(max_length=32, verbose_name='VLAN')
    dropped = models.BooleanField(default=False, verbose_name='Dropped')
....

    class Meta:
        verbose_name_plural = 'MAC address table'
        # unique_together = ('mac', 'device')

이것을 queryset 결과로 템플릿에서 보여주면 ‘0021ccd3792f’ 형식으로 보인다.

이것을 보다 일반적인 ’00:21:cc:d3:79:2f’ 와 같은 형식으로 보여 주려면 몇 가지 방법이 있겠지만, 기존의 queryset이나 view를 수정하지 않고 해당 모델에 아래와 같은 메소드를 추가해 주면 된다.

    @property
    def colon_view_mac(self):
        tmp = self.mac
        mac = f'{tmp[0:2]}:{tmp[2:4]}:{tmp[4:6]}:{tmp[6:8]}:{tmp[8:10]}:{tmp[10:12]}'
        return mac.lower()

그리고, 템플릿 파일을 수정해 준다.

기존의 템플릿에서 mac을 보여주는 부분이 {{ i.mac }} 이었다면, 이 메소드 이름으로 바꿔주면된다.
즉, {{ i.mac }} 을 {{ i.colon_view_mac }} 로 바꿔주면 된다.

익스트림 스위치 ssh/telnet 세션.

익스트림 스위치 ssh/telnet 세션.

익스트림 스위치에 ssh 접속시도했는데, 아래와 같은 접속 거부 메시지가 보였다.

$ ssh wadmin@172.16.100.2
ssh_exchange_identification: read: Connection reset by peer

다행히 telnet 접속도 허용해 놓은 상태여서 일단 접속 가능했다.

현재 세션을 확인해 보면 아래 처럼 8개의 ssh 연결된 상태다. 익스트림 스위치의 ssh 최대 동시 접속은 8 이다. 아래는 8개의 ssh 접속이 있어서 더이상 접속을 허용하지 않는 상태가 되었다.

C-1F.1 # show session
                                                             CLI
    #       Login Time               User     Type    Auth   Auth Location
================================================================================
 79359      Mon Sep 27 12:25:20 2021 wadmin   ssh2    local  dis  192.168.100.122
 79361      Mon Sep 27 12:29:10 2021 wadmin   ssh2    local  dis  192.168.100.122
 79363      Mon Sep 27 12:32:55 2021 wadmin   ssh2    local  dis  192.168.100.122
 79365      Mon Sep 27 12:39:20 2021 wadmin   ssh2    local  dis  192.168.100.122
 79366      Mon Sep 27 12:43:05 2021 wadmin   ssh2    local  dis  192.168.100.122
 79378      Mon Sep 27 13:37:30 2021 wadmin   ssh2    local  dis  192.168.100.122
 79380      Mon Sep 27 13:41:15 2021 wadmin   ssh2    local  dis  192.168.100.122
 79381      Mon Sep 27 13:41:41 2021 wadmin   telnet  local  dis  192.168.100.121
*79382      Mon Sep 27 13:42:39 2021 wadmin   telnet  local  dis  192.168.100.122

Continue reading

mysql, 1040, ‘Too many connections’

mysql, 1040, ‘Too many connections’

mysql을 이용해서 스크립트 작성중 too many connections 오류가 발생했다.

스크립트 실행 전에 processlist를 확인해 보면 아래와 같다.

ysql> show full processlist\g
+--------+----------+-----------------+----------+---------+------+----------+-----------------------+
| Id     | User     | Host            | db       | Command | Time | State    | Info                  |
+--------+----------+-----------------+----------+---------+------+----------+-----------------------+
| 142415 | foxxipam | localhost:42880 | foxxipam | Sleep   |  239 |          | NULL                  |
| 142416 | foxxipam | localhost:42898 | foxxipam | Sleep   |  239 |          | NULL                  |
| 144300 | foxxipam | localhost       | foxxipam | Sleep   |  750 |          | NULL                  |
| 144325 | foxxipam | localhost       | foxxipam | Query   |    0 | starting | show full processlist |
+--------+----------+-----------------+----------+---------+------+----------+-----------------------+
4 rows in set (0.00 sec)

Continue reading

익스트림 스위치 로그 필터 (exos log filter)

익스트림 스위치 로그 필터 (exos log filter)

아래처럼 동일한 로그가 반복되어 발생(192.168.100.122 에서 5분단위로 mac 수집 스크립트를 실행하고 있는 상태로 로그인 로그아웃 로그가 발생)하는 상황이다.
192.168.100.22에서 로그인/로그아웃 되는 로그는 많기도 하고 불필요하기도 해서 기록에 남기지 않고 싶다. 이것은 log filter를 설정하여 해결 할 수 있다.

Switch.5 # show log
08/27/2021 15:32:31.15 <Info:AAA.logout> User wadmin logout from telnet (192.168.100.122)
08/27/2021 15:32:30.39 <Info:AAA.authPass> Login passed for user wadmin through telnet (192.168.100.122)
08/27/2021 15:26:49.16 <Info:AAA.logout> User wadmin logout from telnet (192.168.100.122)
08/27/2021 15:26:48.91 <Info:AAA.authPass> Login passed for user wadmin through telnet (192.168.100.122)
08/27/2021 15:21:09.45 <Info:AAA.logout> User wadmin logout from telnet (192.168.100.122)
08/27/2021 15:21:09.20 <Info:AAA.authPass> Login passed for user wadmin through telnet (192.168.100.122)
08/27/2021 15:15:29.67 <Info:AAA.logout> User wadmin logout from telnet (192.168.100.122)
08/27/2021 15:15:28.92 <Info:AAA.authPass> Login passed for user wadmin through telnet (192.168.100.122)
08/27/2021 15:09:49.07 <Info:AAA.logout> User wadmin logout from telnet (192.168.100.122)
08/27/2021 15:09:48.77 <Info:AAA.authPass> Login passed for user wadmin through telnet (192.168.100.122)
08/27/2021 15:04:10.48 <Info:AAA.logout> User wadmin logout from telnet (192.168.100.122)
08/27/2021 15:04:09.69 <Info:AAA.authPass> Login passed for user wadmin through telnet (192.168.100.122)
08/27/2021 14:58:29.28 <Info:AAA.logout> User wadmin logout from telnet (192.168.100.122)
08/27/2021 14:58:28.99 <Info:AAA.authPass> Login passed for user wadmin through telnet (192.168.100.122)
08/27/2021 14:52:49.75 <Info:AAA.logout> User wadmin logout from telnet (192.168.100.122)

Continue reading

django admin 페이지에서 다른 모델의 필드값을 drop-down 리스트로 사용하기.

Django 관리자 페이지에서 다른 모델 필드값 drop-down list로 사용하기

모델은 아래와 같다.

class Category(models.Model):
    name = models.CharField(max_length=64, unique=True)


class NetworkDevice(models.Model):
    ...
    category = models.CharField(max_length=64, null=True, blank=True, verbose_name='Category')

위의 모델에서, NetworkDevice 모델의 category 필드의 입력값을 Category 모델의 값에서 가져오기를 원하는경우, ForeignKey를 사용하면 되지만, 외래키를 사용하는경우 Category 쪽의 데이타를 삭제하는 경우 문제가 발생할 수도 있다.
그런 경우를 비롯해 외래키를 사용하지 않고 비슷한 효과를 보려면, 모델이 choices 파라메터를 튜플 타입으로 지정하면 된다.

위의 모델을 아래 처럼 수정하면, 원하는 결과를 얻을 수 있다.

class Category(models.Model):
    name = models.CharField(max_length=64, unique=True)

categories = []
for c in Category.objects.all():
    cat = (c.name, c.name)
    categories.append(cat)

class NetworkDevice(models.Model):
    ...
    category = models.CharField(max_length=64, choices=tuple(categories), null=True, blank=True, verbose_name='Category')

이제, 관리자 페이지에서 NetworkDevice를 추가 할때 아래 그림처럼 category를 선택할 수 있다.