Special:Communication & Concept/FreeBSD 12.X 에서 Full Jail 을 설치하기 위한 방법.

Jump to: navigation, search
#199 [ Ssam ] hit: 126(#81ff81) 1 2

들어가기

  • FreeBSD 웹사이트 참고
  • FreeBSD Jails the hard way 참고
  • This post goes over what is involved in creating and managing jails using only the tools built into FreeBSD.
  • 이 포스트는 FreeBSD에 내장된 도구만을 사용하여 jail을 만들고 관리하는 것과 관련된 내용을 다룹니다.
  • ESXi로 OS 단위로 가상을 만든 후 설치된 OS에 jail을 이용해 원하는 패키지 단위로 묶어서 가상화, 스냅샷은 통째로...


jail network 설정

  1. 에디터 vi /etc/rc.conf 파일을 열어 lo1 interface(루프백 인터페이스) 설정.
  2. jail 에서 사용할 가상 ip 를 10.0.0.1 ~ 10.0.0.5 까지 설정.
  • 편집기 vi /etc/rc.conf 파일을 열어 수정.
파일 내용
hostname="zbm.kr"
# ifconfig_vmx0="DHCP"
ifconfig_vmx0="inet 192.168.0.100 netmask 0xffffff00"
defaultrouter="192.168.0.1"

cloned_interfaces="lo1"
ipv4_addrs_lo1="10.0.0.1-5/24"

ifconfig_vmx0_ipv6="inet6 accept_rtadv"
sshd_enable="YES"
ntpd_enable="YES"
# Set dumpdev to "AUTO" to enable crash dumps, "NO" to disable
dumpdev="AUTO"
zfs_enable="YES"

tcsd_enable="YES"
tcsd_mode="emulator"
tpmd_enable="YES"

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"


로컬 네임서버 설정

  • 에디터 vi /etc/hosts 파일을 열어서 확인(설정하지 않음).
# vi /etc/hosts
::1                     localhost localhost.my.domain
127.0.0.1               localhost localhost.my.domain


lo1 interface 생성

# service netif cloneup
출력 메세지
Created clone interfaces: lo1.
  • lo1 interface 아이피 확인
# ifconfig
출력 메세지
vmx0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
	options=60039b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4,TSO6,RXCSUM_IPV6,TXCSUM_IPV6>
	ether 00:0c:29:8b:43:91
	inet 192.168.0.100 netmask 0xffffff00 broadcast 192.168.0.255 
	inet6 fe80::20c:29ff:fe8b:4391%vmx0 prefixlen 64 scopeid 0x1 
	media: Ethernet autoselect
	status: active
	nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 
	inet 127.0.0.1 netmask 0xff000000 
	groups: lo 
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
lo1: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet 10.0.0.1 netmask 0xffffff00 
	inet 10.0.0.2 netmask 0xffffffff 
	inet 10.0.0.3 netmask 0xffffffff 
	inet 10.0.0.4 netmask 0xffffffff 
	inet 10.0.0.5 netmask 0xffffffff 
	groups: lo 
	nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>


pf(packet filter) 방화벽 설정

  1. FreeBSD는 방화벽은 이미 여러개 설치되어 있어 설정하여 사용하면 된다.
  2. 참고 FreeBSD 웹사이트 Firewalls 를 참고.
  3. pf.conf파일의의 위치가 /etc/pf.conf 이 위치가 아닌 경우 /etc/rc.conf 파일에 추가 한다.
  • 편집기 vi /etc/rc.conf 파일을 열어 추가 한다.
gateway_enable="YES"
ipv6_gateway_enable="YES"
pf_enable="YES"
# pf_rules="/etc/pf.conf" 
pflog_enable="YES"
# pflog_logfile="/var/log/pflog"
ftpproxy_enable="NO"


pf 방화벽 규칙 설정

  1. Enabling scrub provides a measure of protection against certain kinds of attacks based on incorrect handling of packet fragments.
  2. scrub을 활성화하면 패킷 조각을 잘못 처리하여 특정 유형의 공격에 대한 보호 수단을 제공한다.
  3. antispoof for ~, These rules weed out spoofed traffic coming in from the rest of the world as well as any spoofed packets which originate in the local network.
  4. antispoof for ~, 이 규칙은 다른 지역에서 들어오는 스푸핑된 트래픽과 로컬 네트워크에서 시작된 스푸핑된 패킷을 차단한다.
  5. EXT_IF 는 외부와 연결된 인터페이스.
  6. INT_IF 는 내부 루프백 인터페이스
  7. 포트 80 및 443의 트래픽을 INT_WEB_IP jail 으로 리다이렉션 한다.
  8. 포트 25, 465, 995, 587, 993의 트래픽을 INT_MAIL_IP jail 으로 리다이렉션 한다.
  • 편집기 vi /etc/pf.conf 파일을 열어 보면 아무 것도 없음, 편집 한다.


# Define the interfaces
EXT_IF = "vmx0"
EXT_IP = "192.168.0.100"
INT_IF = "lo1"
JAIL_NET = $INT_IF:network

# Define jail's web server IP and port. 
INT_WEB_IP = "10.0.0.2"
WEB_PORTS = "{ 80, 443 }"

# Define jail's mail server IP and port.
INT_MAIL_IP = "10.0.0.3"
MAIL_PORTS = "{ 25, 465, 995, 587, 993 }"
   
# Provides a measure of protection against certain kinds of attacks.
scrub in all
  
# Define the NAT for the jails
nat on $EXT_IF from $JAIL_NET to any -> ($EXT_IF)
  
# Redirect traffic on ports 80 and 443 to the INT_WEB_IP jail
#rdr on $EXT_IF proto tcp from any to $EXT_IP port $WEB_PORTS -> $INT_WEB_IP
rdr pass on $EXT_IF inet proto tcp to port $WEB_PORTS -> $INT_WEB_IP
 
# Redirect traffic on ports MAIL_PORTS to the INT_MAIL_IP jail
#rdr on $EXT_IF proto tcp from any to $EXT_IP port $MAIL_PORTS -> $INT_MAIL_IP
rdr pass on $EXT_IF inet proto tcp to port $MAIL_PORTS -> $INT_MAIL_IP
   
# These rules weed out spoofed traffic and spoofed packets. 
antispoof for $EXT_IF
antispoof for $INT_IF


  • 참고로 n 이 포함되면 규칙이 해석만 되고 로드되지 않는다.
  • 아무 메세지가 뜨지 안으면 성공 에러가 없다는 뜻 임.
# pfctl -nf /etc/pf.conf
  • 방화벽(pf) 와 방화벽 로그(pflog) 서비스 시작
# service pf start
# service pflog start
  • 참고로 규칙 세트를 편집 할 때마다 새 규칙을 로드하여 사용해야 한다.
  • 메뉴얼에 이렇게.. "Flush all NAT, filter, state, and table rules and reload /etc/pf.conf".( 모든 NAT, 필터, 상태 및 테이블 규칙을 비우고 다시로드하십시오 /etc/pf.conf.)
# pfctl -F all -f /etc/pf.conf


Full Jail 의 설치

  • Jail 의 디렉토리 만들기
# mkdir -p /usr/local/jails/www
# mkdir -p /usr/local/jails/mail
  • Download the FreeBSD base files
  • FreeBSD 기본 파일 다운로드
# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/12.1-RELEASE/base.txz -o /tmp/base.txz
# fetch ftp://ftp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/12.1-RELEASE/ports.txz -o /tmp/ports.txz
# tar -xvf /tmp/base.txz -C /usr/local/jails/www
# tar -xvf /tmp/ports.txz -C /usr/local/jails/www

# tar -xvf /tmp/base.txz -C /usr/local/jails/mail
# tar -xvf /tmp/ports.txz -C /usr/local/jails/mail
  • Update your FreeBSD base install.
  • FreeBSD 기본 설치를 업데이트하십시오.( end 나오면 q )
# env UNAME_r=12.1-RELEASE freebsd-update -b /usr/local/jails/www fetch install
# env UNAME_r=12.1-RELEASE freebsd-update -b /usr/local/jails/mail fetch install
  • We're downloading these archives over FTP after all, we should confirm that this download is valid and not tampered with.
  • 결국 FTP를 통해 이러한 아카이브를 다운로드하고 있고. 이 다운로드가 유효하고 변조되지 않았 음을 확인해야 한다.
# env UNAME_r=12.1-RELEASE freebsd-update -b /usr/local/jails/www IDS
  • Make sure you jail has the right timezone and dns servers and a hostname in rc.conf.
  • jail 에 올바른 시간대와 DNS 서버 및 rc.conf의 호스트 이름이 있는지 확인한다.
# cp /etc/resolv.conf /usr/local/jails/www/etc/resolv.conf
# cp /etc/localtime /usr/local/jails/www/etc/localtime
# echo hostname=\"www\" > /usr/local/jails/www/etc/rc.conf

# cp /etc/resolv.conf /usr/local/jails/mail/etc/resolv.conf
# cp /etc/localtime /usr/local/jails/mail/etc/localtime
# echo hostname=\"mail\" > /usr/local/jails/mail/etc/rc.conf
  • Edit jail.conf with the details about your jail.
  • 편집기 vi /etc/jail.conf 만들고 내용 추가.
# Global settings applied to all jails. 
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;

# The jail definition for www
www {
    host.hostname = "www.domain.local";
    path = "/usr/local/jails/www";
    interface = "lo1";
    ip4.addr = 10.0.0.2;
}

# The jail definition for mail
mail {
    host.hostname = "mail.domain.local";
    path = "/usr/local/jails/mail";
    interface = "lo1";
    ip4.addr = 10.0.0.3;
}


  • jail 만들고 시작
# jail -c www


  • 편집기 vi /etc/rc.conf 파일에 jail_enable="YES" 추가, vi로 열어서 추가해도 되고, 아래 명령으로도 추가 된다.
# sysrc jail_enable=YES


jail 목록 출력

# jls
메세지 출력
   JID  IP Address      Hostname                      Path
     1  10.0.0.2        www                           /usr/local/jails/www
     2  10.0.0.3        mail                          /usr/local/jails/mail


jail www 콘솔 접속

# jexec www tcsh
메세지 출력
root@www:/ # 
나가기
root@www:~ # exit
메세지 출력
exit
~ # 
  • 참고로 잘 확인 해야될 것, jail 콘솔 root@www:~ # 은 게스트 콜솔 이라고 하고, ~ # 은 호스트 콜솔 이라고 한다.

www jail 에 root 비밀번호 설정

  • 새로 만들어서 필요한 사용자 모두 추가 한다.
  • root 의 비번과 user를 추가 해야된다. (root 비번 변경하지 않는다면 root 메일에 이런 항목 Checking for passwordless accounts: root::0:0::0:0:Charlie &:/root:/bin/csh 을 받게된다.)
root@www:~ # passwd
메세지 출력
Changing local password for root
New Password:                  <---비밀번호 입력
Retype New Password:           <---비밀번호 재입력


  • 사용자 추가
# adduser

[.........]


jail 서비스 start / stop

  • 호스트 콘솔에서
# service jail stop www
# service jail start www

호스트 OS에 필요없는 로그 정지

  • 가상으로 여러개의 OS를 설치 하다보니 불필요 한 곳에 로그가 쌓이게 된다.
  • mail.info 는 주석처리 한다, 메일 로그는 메일 게스트 OS에서 쌓이게 한다.
  • 에디터 vi /etc/syslog.conf 파일을 열어 필요 없는 것 주석처리 한다.
[............]
#mail.info                                      /var/log/maillog
cron.*                                          /var/log/cron
[.............]


jail 를 최신 상태로 유지

# freebsd-update -b /usr/local/jails/www fetch
# freebsd-update -b /usr/local/jails/www install


Logo

Edit Reply#205[ Ssam ]