네트워크를 통한 자산 현황 수집 자동화
소규모 혹은 대규모 네트워크상의 서버들을 운영하다 보면 자산 정보를 어떻게 구축하고 관리하는지가 가장 중요한 이슈일 것이다. 자산이 제대로 식별되지 않는다면 서비스에 문제가 발생했을때 또는 보안적 문제가 발생했을때에 어떻게 어디를 보아야 할지 전혀 알수 없을수도 있다. 특히 자산이 몇백대 수준을 넘어가기 시작하고 한두명이서 이를 관리하다 보면 역시 한계에 부딫힐수 밖엔 없을 것이다.
서버는 MRTG를 통해서 당연히 적은수의 서버라도 관리를 하고 있을것이나 네트워크 장비들은 어떠한가 ? 네트워크 토폴로지를 명확하게 구분하고 어떤 포트가 사용중인지를 정확하게 파악하고 있어야지만 네트워크의 관리가 될수 있을 것이다.
이를 자동화 해주기 위해 다양한 정보를 이용하여 자산을 자동으로 식별하고 정리해주는 툴을 소개하고자 한다.
Netdisco는 SNMP를 이용하여 정보를 폴링하여 자산 정보를 구축해 주는 툴이다.
서버에 대한 정보뿐 아니라 네트워크 장비에 대해서 세세한 그림을 그려주는것이 장점으로 현재 어떤 포트에 연결이 되어 있는장비에 대한 정보를 자세히 보여 준다...
Netdisco의 설치는 docker의 compose를 이용하여 간단하게 설치하여 구성해 볼수도 있다. docker 설치는 아래 링크에 적혀 있는 메뉴얼대로 따라가면 된다. 혹시 docker와 compose가 설치되지 않았다면 배포본에 따라서 설치가 가능하니 별도로 검색을 통해서 설치 하기 바란다.
https://hub.docker.com/r/netdisco/netdisco
sudo groupadd netdisco -g 901
sudo useradd -u 901 -p x -g netdisco netdisco
mkdir -p netdisco/{logs,config,nd-site-local}
sudo chown -R netdisco:netdisco netdisco
curl -Ls -o docker-compose.yml https://tinyurl.com/nd2-dockercompose
docker-compose up
실제 환경에서 사용하기를 원하시는 분들은 아래의 링크를 통해서 설치를 해서 사용하시기 바란다.
https://metacpan.org/pod/App::Netdisco
설치가 완료 되고 나면 http://localhost:5000 으로 접속하면 아래와 같은 화면을 볼수 있고 별도의 설정 없이도 SNMP Public으로 설정된 노드가 있을경우에는 Discover에 IP를 넣고 간단하게 해당 장비에 대한 정보를 폴링 할수 있다.
간단하게 살펴 보았지만 응용할 경우 다양한 정보의 수집이 가능하고 간단(?)하게 구성이 가능한 장점이 있다. 한번은 실제 사용환경에서 사용중인 네트워크 장비의 여유포트 정보나 전체 트래픽 정보를 수집하여 관리하기 위해서 구성해 보고는 싶은 마음이 들게 하는 툴이다. 다만 전체 자산에 대해서 구축 되지 않는다면 힘든 부분이 있을것이고 SNMP를 꼭 써야하는 부분은 아무래도 걸리는 부분이긴 하다. 하지만 스위치가 1,000대 이상 있는 환경에 여유 포트가 어디인지도 모르고 수동으로 일일이 관리한다면 한번 써보기를 권하고 싶고 나역시도 기회가 된다면 제대로 설치해서 사용해 보고 싶다.
혹시라도 구성을 해보고 싶은 분들은 Public 이 아닌 Private으로 SNMP를 설정해서 해보시길 바란다. 그리고 공인망에서는 Private도 신중히 고민해 보고 사용하기 바란다.
추가적으로 자세한 설정은 아래의 링크에서 찾아볼수 있으므로 이를 활용하여 셋팅하면 된다.
https://github.com/netdisco/netdisco/wiki/Configuration
https://github.com/netdisco/netdisco
https://store.docker.com/r/netdisco/netdisco
Docker를 기본적으로 실행하게 되었을때 나타나는 로그 화면이다. 모든 솔루션이 다 그렇듯 로그상에서 다양한 정보가 노출되므로 이를 한번 읽어 보는것도 구조를 파악하는데 도움이 된다.
Creating sokoban_netdisco-postgresql_1_69cc969b7aa0 ... done
Creating sokoban_netdisco-web_1_781134b1dfd5 ... done
Creating sokoban_netdisco-backend_1_9d1cb310bc6f ... done
Attaching to sokoban_netdisco-postgresql_1_f38f5382e1e9, sokoban_netdisco-backend_1_5eb62388469d, sokoban_netdisco-web_1_17e1975c08d4
netdisco-postgresql_1_f38f5382e1e9 | The files belonging to this database system will be owned by user "postgres".
netdisco-postgresql_1_f38f5382e1e9 | This user must also own the server process.
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-backend_1_5eb62388469d | Attempting to create directory /home/netdisco/perl5
netdisco-postgresql_1_f38f5382e1e9 | The database cluster will be initialized with locale "en_US.utf8".
netdisco-postgresql_1_f38f5382e1e9 | The default database encoding has accordingly been set to "UTF8".
netdisco-postgresql_1_f38f5382e1e9 | The default text search configuration will be set to "english".
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | Data page checksums are disabled.
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | fixing permissions on existing directory /var/lib/postgresql/data ... ok
netdisco-postgresql_1_f38f5382e1e9 | creating subdirectories ... ok
netdisco-postgresql_1_f38f5382e1e9 | selecting default max_connections ... 100
netdisco-postgresql_1_f38f5382e1e9 | selecting default shared_buffers ... 128MB
netdisco-postgresql_1_f38f5382e1e9 | selecting dynamic shared memory implementation ... posix
netdisco-postgresql_1_f38f5382e1e9 | creating configuration files ... ok
netdisco-web_1_17e1975c08d4 | Attempting to create directory /home/netdisco/perl5
netdisco-backend_1_5eb62388469d | config watcher: watching /home/netdisco/environments for updates.
netdisco-web_1_17e1975c08d4 | config watcher: watching /home/netdisco/environments for updates.
netdisco-postgresql_1_f38f5382e1e9 | running bootstrap script ... ok
netdisco-postgresql_1_f38f5382e1e9 | performing post-bootstrap initialization ... sh: locale: not found
netdisco-postgresql_1_f38f5382e1e9 | No usable system locales were found.
netdisco-postgresql_1_f38f5382e1e9 | Use the option "--debug" to see details.
netdisco-postgresql_1_f38f5382e1e9 | ok
netdisco-postgresql_1_f38f5382e1e9 | syncing data to disk ... ok
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | WARNING: enabling "trust" authentication for local connections
netdisco-postgresql_1_f38f5382e1e9 | You can change this by editing pg_hba.conf or using the option -A, or
netdisco-postgresql_1_f38f5382e1e9 | --auth-local and --auth-host, the next time you run initdb.
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | Success. You can now start the database server using:
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | pg_ctl -D /var/lib/postgresql/data -l logfile start
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | waiting for server to start....LOG: could not bind IPv6 socket: Address not available
netdisco-postgresql_1_f38f5382e1e9 | HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
netdisco-postgresql_1_f38f5382e1e9 | LOG: database system was shut down at 2018-12-11 15:44:30 UTC
netdisco-postgresql_1_f38f5382e1e9 | LOG: MultiXact member wraparound protections are now enabled
netdisco-postgresql_1_f38f5382e1e9 | LOG: database system is ready to accept connections
netdisco-postgresql_1_f38f5382e1e9 | LOG: autovacuum launcher started
netdisco-postgresql_1_f38f5382e1e9 | done
netdisco-postgresql_1_f38f5382e1e9 | server started
netdisco-postgresql_1_f38f5382e1e9 | ALTER ROLE
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | /usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/netdisco-initdb.sh
netdisco-postgresql_1_f38f5382e1e9 | netdisco-db-entrypoint: configuring Netdisco user and db
netdisco-postgresql_1_f38f5382e1e9 | CREATE ROLE
netdisco-postgresql_1_f38f5382e1e9 | netdisco-db-entrypoint: restarting pg privately to container
netdisco-postgresql_1_f38f5382e1e9 | waiting for server to shut down...LOG: received fast shutdown request
netdisco-postgresql_1_f38f5382e1e9 | .LOG: aborting any active transactions
netdisco-postgresql_1_f38f5382e1e9 | LOG: autovacuum launcher shutting down
netdisco-postgresql_1_f38f5382e1e9 | LOG: shutting down
netdisco-postgresql_1_f38f5382e1e9 | LOG: database system is shut down
netdisco-postgresql_1_f38f5382e1e9 | done
netdisco-postgresql_1_f38f5382e1e9 | server stopped
netdisco-postgresql_1_f38f5382e1e9 | waiting for server to start....LOG: could not bind IPv6 socket: Address not available
netdisco-postgresql_1_f38f5382e1e9 | HINT: Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
netdisco-postgresql_1_f38f5382e1e9 | LOG: database system was shut down at 2018-12-11 15:44:32 UTC
netdisco-postgresql_1_f38f5382e1e9 | LOG: MultiXact member wraparound protections are now enabled
netdisco-postgresql_1_f38f5382e1e9 | LOG: database system is ready to accept connections
netdisco-postgresql_1_f38f5382e1e9 | LOG: autovacuum launcher started
netdisco-postgresql_1_f38f5382e1e9 | done
netdisco-postgresql_1_f38f5382e1e9 | server started
netdisco-postgresql_1_f38f5382e1e9 | netdisco-db-entrypoint: bringing schema up-to-date
netdisco-postgresql_1_f38f5382e1e9 | netdisco-db-entrypoint: importing OUI
netdisco-postgresql_1_f38f5382e1e9 | COPY 23285
netdisco-postgresql_1_f38f5382e1e9 | netdisco-db-entrypoint: marking schema as up-to-date
netdisco-postgresql_1_f38f5382e1e9 | netdisco-db-entrypoint: adding admin user if none exists
netdisco-postgresql_1_f38f5382e1e9 | INSERT 0 1
netdisco-postgresql_1_f38f5382e1e9 | netdisco-db-entrypoint: adding session key if none exists
netdisco-postgresql_1_f38f5382e1e9 | INSERT 0 1
netdisco-postgresql_1_f38f5382e1e9 | netdisco-db-entrypoint: queueing stats job
netdisco-postgresql_1_f38f5382e1e9 | INSERT 0 1
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | waiting for server to shut down...LOG: received fast shutdown request
netdisco-postgresql_1_f38f5382e1e9 | .LOG: aborting any active transactions
netdisco-postgresql_1_f38f5382e1e9 | LOG: autovacuum launcher shutting down
netdisco-postgresql_1_f38f5382e1e9 | LOG: shutting down
netdisco-postgresql_1_f38f5382e1e9 | LOG: database system is shut down
netdisco-postgresql_1_f38f5382e1e9 | done
netdisco-postgresql_1_f38f5382e1e9 | server stopped
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | PostgreSQL init process complete; ready for start up.
netdisco-postgresql_1_f38f5382e1e9 |
netdisco-postgresql_1_f38f5382e1e9 | LOG: database system was shut down at 2018-12-11 15:44:40 UTC
netdisco-postgresql_1_f38f5382e1e9 | LOG: MultiXact member wraparound protections are now enabled
netdisco-postgresql_1_f38f5382e1e9 | LOG: database system is ready to accept connections
netdisco-postgresql_1_f38f5382e1e9 | LOG: autovacuum launcher started