반응형
OSI의 2번째 계층 Data Link Layer의 대표적인 네트워크 공격으로 “MAC Flooding”이 있습니다. 다른 네트워크 공격과는 달리, MAC Flooding은 서버나 PC, 단말 등을 타겟으로 삼기보다 네트워크 스위치를 직접 공격하는 방법입니다. 물론 그 공격의 최종 타겟은 네트워크 상의 단말 기기들이지만 말이죠. 1. MAC table과 보안 허점 네트워크 스위치는 여러 장치(ex., 컴퓨터, 서버, 프린터)를 하나의 LAN으로 묶어줍니다. 스위치에는 랜선을 꼽을 수 있는 물리적 포트가 다수 존재하며, 각각의 장치는 이 물리적 포트를 하나씩 차지하여 본인에게로 도달해야하는 데이터들의 통로로 사용합니다. 스위치는 각 물리적 포트의 할당 현황을 관리·모니터링하게 되며 이 기능을 "MAC ta..
지금까지 수십 여번 AI/Data Analysis 환경을 구축하면서 들었던 의문이 하나 있습니다. “대체 Anaconda는 뭐하러 깔아야 하는 건가” 에 대해서 말이죠. 이번 포스트에서는 굳이 Anaconda 없이도 pytorch나 tensorflow 개발 환경을 구축하고 GPU 활용이 가능하다는 것을 알려드리고자 합니다. Anaconda는 필수가 아니다 가상환경을 만드려면 반드시 Anaconda가 필요한가? Anaconda를 사용하는 첫번째 이유가 여러 개발 환경간의 상호 충돌을 방지하기 위함인 건 맞으나, 가상환경은 애시당초 파이썬 자체에서도 제공하고 있는 기능입니다. python venv를 이용하면 Anaconda 때와 별반 차이 없이 가상환경을 생성하고 pip으로 필요한 패키지만 골라 설치하면 됩..
1. 정보 이론(Information Theory)에서 말하는 ‘정보’ 응용 수학 학문의 갈래에는 수없이 많은 해괴한 이론들이 도사리고 있습니다. 정보 이론(Information Theory)는 그 중에서도 공대생들에게 상당히 귀에 낯익는 용어임에도, 여기서 말하는 ‘정보’라는게 일상적으로 쓰는 그 개념 그 자체인지 항상 모호할 때가 있었습니다. 위키를 비롯한 여러 자료들에서는 정보 이론을 다음과 같이 요약하고 있습니다. 정보, 데이터의 가치를 수학적으로 정량화하는 이론 일상대화에 사용되는 “이건 유익한 정보다”, 또는 “별로 의미없는 정보였네”와 같은 표현처럼, 정보나 특정 사건, 관측치의 중요도를 수치화하여 나타내는 접근법으로 이해해도 될 것 같습니다. 그럼, 정보의 유익함을 산출하는 기준은 무엇이냐..
사전준비작업: Elasticsearch 설치/버전 확인 Kibana 서비스를 띄우려면 Elasticsearch가 미리 설치완료/동작 중인 상태여야 합니다. 두 애플리케이션간의 버전별 호환여부를 잘 확인하여 알맞는 버전의 패키지를 설치하시기 바랍니다. Elasticsearch가 준비되어 있지 않다면 다음 링크(https://citizen.tistory.com/35)의 내용을 우선 따라해보세요. 현재 글을 작성하는 시점(2023, 8월)에서의 Kibana 및 elasticsearch의 최신버전은 8.9.1이며, 본 포스트에서는 8.7.0 버전으로 통일하여 테스트를 진행하였습니다. 패키지 설치 $ curl -O https://artifacts.elastic.co/downloads/kibana/kibana-8...
IP주소 라고하면, 4개의 숫자로 이루어진 조합이라고 익히 알고 있습니다. 그런데 간혹 IP를 설정하는 데 끝자리 뒤에 ‘/’ 표시를 해놓고는 숫자 하나를 더 입력해야할 때가 있습니다. 또는 CIDR notation 방식으로 IP 주소를 표기하게끔 하는 경우도 종종 볼 수 있습니다. 1. CIDR의 등장배경 CIDR, 발음할때는 사이더라고 하고 정확한 명칭은 ‘Classless Inter-Domain Routing’입니다. IP 주소의 개수는 대략 $2^{32}$개로 한정되어 있고, 전체 IP 주소구간은 인터넷 사용자들에게 고유한 IP 대역으로 조각조각내어 배정됩니다. 왜 “Classless” Routing일까? 과거에는 ‘네트워크 클래스’라는 개념을 도입하여 조각난 IP대역의 규모와 용도를 5개의 분류..
1. Docker-compose로 컨테이너 구축을 한번에~ Docker 개발 환경에서는 무수히 많은 컴포넌트들이 연결되어 있습니다. 컨테이너가 최소 1개 이상 존재할 것이고, 컨테이너끼리 또는 외부 네트워크와 연결할 수 있는 네트워크 인터페이스 정보, 공유 스토리지 역할을 할 디렉토리 볼륨 정보, 마지막으로 각 컨테이너에서 동작할 애플리케이션들의 초기 설정까지, 건드려야 할 요소들이 상당히 많습니다. 각각을 구성하기 위해 Docker 엔진에서는 docker run, docker create와 같은 터미널 명령어를 기본적으로 제공합니다만, 아래 예시처럼 컨테이너 하나를 올리는데에만 하드 코딩이 될 수 있습니다. 또, 테스트를 반복할때마다 수십개의 명령어를 처음부터 다시 쭉 입력하는 것도 번거로운 일이죠. ..