ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [산대특] Tunneling, wall, watch, IP binding, Channel bonding, FACL, cron, at, log
    [산대특]클라우드기반 빅데이터 활용 정보 시스템보안과정/Linux 2024. 9. 8. 23:30

    0906

     

      Tunneling

    보안에서 터널링(Tunneling)이란

    Telnet 이나 SSH 등으로 타겟 호스트와 연결된 세션 (1차 연결) 내에서

    새로운 연결(터널)을 생성(2차 연결)해서 두 원격 시스템 사이에 은닉된 보안 세션을 형성하는 것.

     

      Tunneling 은 다음 세 가지로 주로 사용되는데

    1) VPN에서 공중망을 통과하는 두 지점이 마치 전용선(leased(독점) line, dedicated(헌신) line)처럼

    연결하는 경우 터널링 기법을 사용한다.

     

    2) 프로토콜이 다른 두 회선을 연결할 때 

    (IPv4 와 IPv6, TCP/IP 와 IPX/SPX, …)도 터널링으로 연결할 수 있다.

     

    3) 해킹할 땐 서버에 설치된 mysql, dns, ssh, web 등의 서비스와 1차 연결한 뒤,

    터널링을 사용해서 Kali 등 로컬에서 이들 서비스에 직접 연결하는 경우도 터널링 기법을 이용한다.

     

     

      wall

      wall이라는 도구는 현재 열려 있는 모든 콘솔(모든 연결된 사용자)로 관리자가 메시지를 뿌릴 때 사용.

    단체로 메시지를 가볍게 보낼 때 좋다.

     

      watch

      이 도구는 원하는 명령어의 결과를 원하는 시간(초) 주기로 갱신해서 보여주는 명령어이다. 

    시스템 자원 사용량 모니터링특정 명령어 입력의 반복 확인 등에서 유용하다.

    d differences 는 이전 출력 결과와 비교해서 변경된 부분을 표시
    n interval=<second> 는 입력한 명령어의 결과를 초 단위(디폴트는 2초) 간격으로 보임
    t no-title 는 헤더를 보이지 않음
    보통 watch -d -n <sec> ‘명령어’ 구문으로 사용한다.

     

      IP binding (IP를 묶는다)

      하나의 물리적 네트워크 카드에 여러 IP 주소를 (가상으로)주는 기법

     

      Channel bonding  (서버에서 좋아해)

      여러개의 물리적인 네트워크 카드를 묶어서 가상의 하나의 네트워크 카드로 생성해서

    대역폭 증가, 폴트 톨러런스, 리던던시, 로드 밸런싱, 라운드 로빈이 된다.

     

      채널 본딩(Channel Bonding)에는 모두 6개의 모드가 있다. 

      일부는 하드웨어 지원이 있어야 설정 가능.

    모드 용도
    mode 0 balance-rr(round robin) load balancing, NIC 순환통신
    mode 1 active-backup failover(시스템 대체 작동), bond 내의 한 NIC만 통신
    mode 2 balance-xor 통신할 때 XOR로 한 NIC 선택
    mode 3 broadcast  fault-tolerance, 모든 NIC으로 통신
    mode 4 802.3ad failover, 동적 부하분산, NIC 대역폭 확장 통신
    mode 5 balance-tlb(or alb) load balancing, 부하가 낮은 NIC으로 통신하여 load balancing 을 이룸

     

      NetworkManager 

      Linux 시스템에는 네트워크 설정을 동적(dynamic)으로 바꿔주는 NetworkManager가 설치되어 있다. 

     자동으로 Linux의 네트워크 설정을 해당 네트워크에 맞춰서 변경시켜서 서비스를 지속적으로 제공. 

     

      Linux FACL(File Access Control List)

    chmod와 chown 명령어를 합한 것

     

    파일/디렉터리에 관한 접근을 제한하는 chmod와 같이 권한으로 접근을 제한하는 Access ACL

    파일/디렉터리에 관한 소유권을 제한하는 chown와 같이 소유권으로 접근을 제한하는 Default ACL이 있다. 

     

     부모 디렉터리에 Default ACL을 적용시키면 

    모든 자식 디렉터리/파일은 부모 디렉터리의 ACL 설정에 따른다.

    FACL은 일반 chmod 권한보다 우선되게 적용된다.

     

    파일에 관한 ACL 설정은 setfacl로 해주고, 확인은 getfacl로 해준다. 

    setfacl 명령어에 u(ser), g(roup), m(odify), o(ther), 그리고 d(efault) 옵션을 줘서 설정할 수 있다.

    설정 여부는 ls -(d)l abc.txt 식으로 해서 맨 끝에 +1 이 있으면 설정된 것이다.

     

     

      관리 작업 자동화하기 - CRON 과 AT

    주기적이고 반복적으로 시행하는 작업’을 cron과 at 도구를 사용해서 원하는 작업을 예약해놓고 작업을 실행 가능.

     

      cron 설정, 두 가지

    nano /etc/crontab 하여

    a. ‘분 시 날짜 월 요일 (root run-parts) 실행파일_위치’ 구문으로 설정하고
    (root run-parts 는 명령어 실행자로써 root로 실행한다는 것인데 생략할 수 있다.)
    b. 실행파일의 위치는 /etc/cron.hourly(daily, weekly, monthly) 디렉터리 중에서 
    원하는 곳에 지정한 실행파일을 넣어주는 방법

     

    crontab -e 한 뒤,

    a. i를 입력해서 Vi 편집모드로 가서
    b. '분 시 날짜 월 요일 실행_명령어' 구문으로 설정할 수 있는데 
    이 경우에는 실행_명령어를 바로 적어주므로 
    별도로 실행될 파일이 있는 위치를 지정할 필요가 없다. 
    (물론, 실행될 파일의 위치를 지정해도 실행된다.)

     

     주기적으로 작업할 내용을 설정할 때에

    분(minute)
    0-59
    시(hour)
    0-23
    날짜(date)
    1-31
    월(month)
    1-12
    주(week)
    0-6(or Sun-Sat)

    으로 표시해주는데, 

    * 기호를 사용하면 매(every) ~의 의미
    @hourly, @daily, @midnight, @weekly, @monthly, @yearly(OR @annually), @reboot
    ex) @reboot * * * * * ~  : 부팅될 때마다 실행  => 설정어구 맨 앞에 써주면 된다.
    분에서 0,20,40 * * * * 하면 매 0분, 20분, 40분을 말하고, 
    분에서 */10 하면 10분마다의 의미이며, 
    요일에서 * * * * 1-5 하면 월~금이고, 
    요일에서 * * * * 1,3,5 하면 월,수,금이 된다.

    이 외에도 여러 설정 방법이 있다. 

     

      시간 설정의 예

      crontab -e(OR /etc/crontab) 하고 

    ① 02 4 * * * root run-parts /etc/cron.daily로 작성해주면
    =>매 04시 02분에 /etc/cron.daily에 있는 실행 쉘 스크립트를 실행한다.
    ② 03 4 * * 0 root run-parts /etc/cron.weekly로 작성해주면
    =>매 일요일(0), 04시 03분에 /etc/cron.weekly에 있는 실행 쉘 스크립트를 실행한다.
    ③ 0,30 8-19 15 * * root run-parts /etc/cron.monthly로 작성해주면
    =>매 15일마다, 8~19시 사이, 정각(0)과 30분마다 지정 파일에 있는 실행 쉘 스크립트를 실행한다. 
    ④ * */2 * * * bash /root/backup.sh 1> /dev/pts/1 하면 
    =>매 2시간마다 /root/ 밑에 있는 backup.sh 스크립트를 실행해서 /dev/pts/1 콘솔에 결과를 보인다. 
    ⑤ 00 18 * * 1 cd ~ && ls > week.out 1> /dev/console 해주면 
    =>월요일(1) 오후 6시(18) 정각(00)에 홈 디렉터리로 가서(cd ~) 내용을 출력(ls)해서 week.out라는 파일로 저장하고, 그 내용을 /dev/console 터미널로 보여라(~ 1> /dev/console)라는 의미이다. 

     

      AT

    AT는 한 번만 실행할 작업을 예약할 때 사용

    at는 일종의 배치파일 형식으로 원하는 명령어를 한 줄에 하나씩 나열, 명령어 실행은 /bin/bash를 이용한다. 

    at에도 /etc/at.allow와 /etc/at.deny 파일이 있어서 at를 사용할 수 있는 사용자를 지정해서 허가/불허가할 수 있다. 

     

    at의 실행결과는 별도로 콘솔에 메시지가 뜨지 않음. 작업 시간이 되면 해당 디렉터리로 가서 실행을 확인해야 한다. 

    atrm 1 : at로 예약된 작업 1을 삭제함 등이 있다.

    at now + 1 min at now at noon at 09:00 Tue

    at 뒤에 시간 실행할_명령어 구문을 주로 사용

    at 4 PM + 3 days 하면 
    =>3일 후 오후 4시에 at를 실행함
    at 10:10 AM Jul 30 하면 
    =>7월 30일 오전 10:10분에 실행함
    at 01:00 tomorrow 하면 
    =>내일 새벽 1시(1 AM 해도 됨)에 실행함 등이다. 
    at now + 10 minutes -f /root/abc.sh 하면 
    =>지금부터 10분 뒤 /root/abc.sh 파일을 실행한다.

     

      Log 관리

      Linux 에서는 시스템에서 운영되는 전반적인 상태가 대부분 로그 파일에 기록.

    로그파일을 보면 시스템 문제의 원인과 침해 되었을 때의 피해 정도 뿐만 아니라 언제, 누가, 어디를 침투해서

    무슨 작업을 했는지 등에 관한 정보를 볼 수 있다.

     

    저장 공간이 다 차면 오래된 로그 정보부터 순차적으로 삭제

    로그 로테이션을 설정하는 등 로그파일 관리대책을 세워서 운영.  

     

     

      로그파일의 운영은 

    1) /var/log/ ~에 있는 것 이외에 별도로 로그 파일을 지정해서 실행시켜 둘 수도 있다. 
    2) 로그저장 공간이 한정되어 있으므로 로그파일을 순환(rotation)시켜서 
    오래된 것부터 삭제하면서 공간을 활용하게 해둔다.
    3) 로그파일은 반드시 다른 저장 공간/다른 호스트에 저장되게 해두는 것이 좋다.
    4) scp, tar, crond 등으로 주기적으로 백업해두는 것도 필요하다.
    5) 로그를 실시간으로 보려면 tail -f /var/log/secure식으로 해두면 된다.

     

      /var/log에 있는 로그파일에는 

    maillog 메일과 관련된 메일 송수신 시간, 메일 서버와 호스트, 데몬, 사용자 등의 정보가 기록된다
    messages 메일, 뉴스 등을 제외한 전체적인 로그가 기록된다
    secure 사용자의 접속을 기록해준다
    lastlog 사용자들이 마지막으로 로그인한 정보가 기록된다
    bootlog 부팅 시 각종 하드웨어와 소프트웨어, 데몬 서비스의 실행이 기록된다
    dmesg 시스템이 부팅될 때 출력되는 주로 하드웨어 관련 메시지들이 기록되는데 
    dmesg 명령어로도 확인할 수 있다 
    cron cron과 관련된 메시지들이 저장된다
    dracut 커널이 사용할 블록장치들의 사전 로딩을 위한 ramdisk 이미지 초기화에 관한 정보가 저장된다 
    spooler 프린터에 관한 로그가 저장된다
    btmp
    wtpm
    utmp
    ∙/var/log/btmp는 lastb 명령어로 로그온 실패 정보를 가지고 있고,
    ∙/var/log/wtmp는 last 명령어로 지금까지 사용자들의 로그인 정보를 누적해서 가지고 있다.
    =>이 두 파일을 cat로 보면 깨져 보이므로 strings /var/log/wtmp식으로 보아야 한다.
    ∙/var/run/utmp는 w, who 명령어로 현재 로그인해서 작업하는 사용자 정보를 보인다.

     

      특정 서비스에 대한 로그 로테이트 파일을 설정한다면 nano /etc/logrotate.d/ntp 하고 

    /var/log/ntpd.log { # /var/log/ 밑에 NTP관련 로그파일을 생성한다

      missingok    # 로그파일이 없어도 경고나 에러 메시지를 보내지 않는다

      notifempty    # 빈 파일이 있으면 알린다

      size 10M    # 로그파일의 크기가 10MB 이상일 때만 순환시킨다

      rotate 5    # 로그파일은 순환기간 내에 5번까지 순환된다

      weekly    # 주 단위로 순환시킨다

      create 0600 root root  # 생성되는 로그파일은 root:root 소유이고 0600 권한을 가진다

      postrotate   # 순환이 되고 나서 

      /sbin/service ntpd restart  # ntpd를 실행시킨다음

      endscript

    } 해서 새로 ntpd 로그 파일을 생성하고, ntpd 서비스를 실행하면 여기에 맞춰서 로그파일이 생성되고 로테이트 된다.

     

     

    System Logger

      시스템 로거는 Linux 커널에서 발생되는 메시지를 로그해주는 도구

    불특정한 소스뿐만 아니라 mail이나 crond 등에서 자동으로 생성되는 실행중인 어플의 소스가 포함.

    시스템 로거는 syslogd라는 데몬으로 실행되며 부팅 시 시작된다.

    시스템 로거에는 

    시스템에서만 설정되는 리거시한 로그 서비스 데몬인 syslog와 

    원격 시스템에도 설정할 수 있는 rsyslog가 있다. 

     

     

      NAT는 네트워크에서 주소변환과 관련된 설정에 사용되는 도구이다. 

    지금같이 IPv4 주소가 부족할 때 '사설_IP <=> 공적_IP' 상호 전환은 필수적인데 

    주로 Linux 머신이나 방화벽에서 NAT를 설정해준다. 

    Linux에서 NAT 설정은 주로 iptables 도구로 설정한다. 

    네트워크에서는 라우터에서 NAT를 설정한다.

     

    NAT는 다음처럼 분류된다. 

    SNAT
    (Source NAT)
    출발지 주소변환으로써 내부의 사설 IP가 외부로 나갈 때 공적 IP로 전환해준다.
    내부=>외부 주소변환이다.
    iptables -A POSTROUTING -t nat -o(output) eth0 -s 192.168.100.10/255.255.255.0(사설) -j SNAT --to-source     210.240.6.78(공적)
    DNAT
    (Destination NAT)
    목적지 주소변환으로써 외부의 공적 IP가 내부로 들어올 때 목적지 주소를 내부의 사설 IP로 전환해준다. 
    외부=>내부 주소변환이다.
    iptables –A PREROUTING –t nat –i(input) eth0 –d 210.240.6.78(공적) –j DNAT —to-destination 192.168.100.80(사설)
    Masquerade 
    (IP Masquerade)
    여러 사설 호스트들에게 동적으로 IP 주소를 할당해준다. 
    인터넷 공유에서 주로 사용되는데 SNAT처럼 내부에서 외부로 나갈 때 주소를 전환
    각각의 사설 IP를 가지고 있는 호스트는 포트별로 구별된다. 
    iptables –A POSTROUTING –t nat –o eth0 –j MASQUERADE

      마스커레이드

     

      SELinux (Secure Enhanced Linux)  

    Linux에 Secure OS 서버를 추구한 기법

    Linux에서의 파일/디렉터리에 관한 권한은 다음 세 가지가 있다.

    임의 접근제어 (Discretionary Access Control:DAC) 
    파일/디렉터리의 소유자가 자신의 파일/디렉터리의 권한을 
    맘대로 설정할 수 있으며 보안상 취약점이 있다. 
    강제 접근제어 (Mandatory Access Control:MAC) 
    DAC를 보강하고자 만든 것으로 SELinux를 통해서 
    시스템 관리자(root)가 정책파일을 만들어서 
    각 사용자의 파일/디렉터리에게 적용시켜서 
    파일/디렉터리의 권한을 중앙에서 일괄적으로 관리하게 한다. 
    역할기반 접근제어 (Role Based Access Control:RBAC) 
    SELinux를 통해서 root의 권한을 롤(role:역할)로 분할해서 
    서비스 별로 최소한의 권한(Minimal Privilege)만 가지게 함으로써 
    만일 root의 권한이 탈취당해도 시스템 전반에는 피해를 최소한으로 줄이게 한다. 데이터베이스에서도 이 RBAC 기반 보안을 사용한다. 

     

      PAM(Pluggable Authentication Modules)

    PAM과 함께 인증기법을 잘 이용하면 매우 강력한 인증 메카니즘을 구성할 수 있다.

    PAM에서의 구성설정이 각 어플에서의 개별적인 구성설정보다 우선 적용.

연의 취업 도전기.