저는 현재 FreeBSD 11.2를 사용하고 있습니다(곧 12로 업그레이드될 수도 있습니다). 작고 완전히 권한 있는 DNS 서버가 필요합니다(조회 또는 캐싱 없음, 도메인 10개 미만, 시간당 쿼리 10개 미만, 기록 변경 거의 없음).
아마도 보안으로 유명하지만 작아 보이고 필요한 기능을 수행하는 을( TinyDNS
를 ) 선택할 것입니다 .djbdns
pf
보안의 일부는 IP/포트 필터와 매우 낮은 속도, 속도 제한기( 이 목적으로 사용됨)가 있음에도 불구하고 인터넷에 노출된다는 것입니다 . 그러나 이러한 이유로 나는 명백한 취약점을 피하기 위해 데몬을 설정하는 방법에 특별한 주의를 기울이고 싶습니다. 나는 필수 사용자 및 그룹, 시작/중지 스크립트, 탈옥/루트화, 공격자가 악용할 수 있는 주요 비필수 액세스/기능 최소화/비활성화/거부 등의 작업에 대해 이야기하고 있습니다.
(내가 언급해야 할 것은할 수 있는Tinydns는 "보통" 테스트 시스템에 설치되고 필요한 .conf
파일이 생성되므로 이는 순전히 안전한 방법으로 실행하는 방법입니다. 누락되었습니다.)
저는 chrooted/jailed를 실행하기 위한 소프트웨어를 설정하거나 적절한 보안 관행을 위해 chrooted/jailed 패키지를 검토한 경험이 없습니다. 비록 제가 특정 DNS 서버 패키지를 선택한 이유는 명백하기 때문입니다. 설정의 단순화를 위해.
해당 .conf
파일을 무시하면 TinyDNS가 서비스로 올바르게 실행되도록 설정하고 "데몬에게는 중요하지 않지만 공격자에게 도움이 될 다른 항목"에 대한 액세스를 이상적으로 최소화하는 "레시피"는 어떻게 보일까요?
답변1
꽤 길기 때문에 끝까지 읽기가 너무 귀찮은 분들을 위해 매우 짧은 버전을 소개합니다.
echo "testjail { }" >> /etc/jail.conf
mkdir -p /usr/local/jails/testjail
bsdinstall jail /usr/local/jails/testjail
service jail start testjail
pkg -j testjail install -y nginx
sysrc -j testjail "nginx_enable"=YES
service -j testjail nginx start
나는 일반적으로 "너무 광범위한" 질문을 고려하고 사람들이 직접 참조할 것을 제안합니다.FreeBSD 매뉴얼. 그러나 나 자신은 그 부분이 다소 형편없이 작성되고 혼란스럽다는 것을 알았습니다. 모든 것이 있지만 보기보다 훨씬 쉽습니다! 명령을 나열하기보다는 개념에 더 집중했으면 좋겠습니다. 당신은 독서를 즐길 수 있습니다감옥 - 가치는 높지만 가상화는 좋지 않음
대신, 제가 개인적으로 해왔던 일들과 겪었던 걸림돌들을 겸손하게 설명하려고 합니다. 나의 실패가 당신의 것이 아닐 수도 있지만, 나도 당신과 같은 상황에 있었기 때문에 나의 여정이 도움이 되기를 바랍니다. FreeBSD 전체에 대해 더 많이 알수록 감옥에 갇히는 것이 더 쉬워집니다.
감옥이란 무엇입니까?
많은 설명이 감옥의 중요한 부분을 모호하게 만듭니다. 커널이 하는 일을 이해하는 데 많은 도움이 됩니다. 코드를 "실행"하고 PID(프로세스 ID) 및 UID(사용자 ID)를 추적합니다. 많은 Unix 사용자에게는 이것이 상식입니다. FreeBSD 커널에는 나중에 JID(Jail ID)라는 개념이 추가되었습니다. 그런 다음 커널은 프로세스를 감옥으로 나눌 수 있습니다. 이것이 본질적으로 의미하는 바는 FreeBSD 커널이 오버헤드 없이 시스템을 "가상화"할 수 있다는 것입니다. 여전히 코어는 하나뿐이지만 여러 시스템을 가질 수 있습니다. 이것이 이 개념을 이해하는 열쇠입니다.
감옥 없이 일반 상자를 실행하는 경우. 그러면 모든 프로세스는 JID 0에 속합니다. 감옥을 사용하기 시작하면 우리는 그것을 "감옥 호스트"라고 부릅니다.
이를 염두에 두고 나의 다음 단계는 FreeBSD가 실제로 어떻게 작동하는지에 대한 연관성을 이해하는 것이었습니다. Linux 배경 지식이 있다면 Linux가 "그냥" 커널이라는 것을 알고 계실 것입니다. 시스템을 구성하는 것은 배포판(Ubuntu, Debian, Slackware 등)에서 제공하는 사용자 공간입니다. FreeBSD는 커널 모드와 사용자 모드의 조합입니다. 완전한 운영체제(OS)입니다.
매우 대략적인 요약입니다12장 FreeBSD 부팅 프로세스예:
당신은 아마도 FreeBSD가 얼마나 모듈식인지 알고 있을 것이며, rc 시스템을 다음과 같은 것으로 대체할 수 있습니다.오픈RC그러나 단순화를 위해 지금은 이를 무시합니다.
그런 다음 감옥을 시작(부팅)하면 커널은 새 JID(예: 1)로 초기화됩니다. 여기의 모든 것은 감옥 1로 제한됩니다. init가 액세스해야 하는 콘텐츠는 chroot 다음의 파일 시스템에 있어야 합니다. 일을 단순하게 유지하고 싶다면가득한사용자 영역. 하지만 우리는 감옥을 호스트 시스템에서 분리하고 싶기 때문에전체 사본사용자 영역에 있습니다!
이러한 것들이 서로 어떻게 연관되어 있는지의 중요성은 과소평가될 수 없습니다. 모든 것을 이해하고 나면 감옥이 많은 FreeBSD 도구에서 직접 지원된다는 것을 알게 될 것입니다. ps -J
“하지만”, bsdinstall
“ 그리고” freebsd-update
같은 단순한 단어 가 아닙니다 pkg
! FreeBSD 시스템을 유지하는 것이 당신에게 제2의 천성이라면 감옥은 당신에게 공원 산책이 될 것입니다!
그러나 우리 대부분은 열반으로 가는 길 중간쯤에 있으며 이를 "올바르게" 수행하기 위해 몇 가지 개념을 놓고 씨름해야 할 수도 있습니다.
언덕
난 정말 좋아언덕. 이는 사물이 어디에 있어야 하는지에 대한 명확하고 일관된 시각을 제공합니다. 불행하게도 당국은 교도소의 기본 위치에 대해 어떠한 결정도 내리지 않았습니다. 이것을 다른 위치를 사용하는 다양한 튜토리얼과 결합하고 "기본 설치" 및 "템플릿"에 대한 다양한 용어를 혼합하면 상황이 매우 빨리 혼란스러울 수 있습니다!
본 매뉴얼에서는 이에 대해 논의하지 않고 단지 언급만 할 뿐입니다 /here/is/the/jail
. 마지막 예에서는 /home/j
및 를 사용합니다 /home/j/mroot
. 나는 사용자 디렉토리와 사용자 디렉토리만 유지하는 것을 선호합니다 /home
. 단순히 이와 같이 약어 표기법을 사용하는 것은 내 책에서 j
큰 금기 사항입니다 .
가장 일반적이고 "올바른" 입장은 /usr/local/jails
ZFS를 사용하는 사람들의 강력한 경쟁자입니다./jails
이 위치에 나는 감옥의 루트를 배치할 것입니다. 그것이 내가 말한 방법입니다. 이제부터 감옥은 이곳에 위치하게 될 것이다.
처음 시작했을 때 나는 이것이 매우 혼란스럽다는 것을 알았습니다. 나에게 그것을 어디에나 놓을 수 있는 자유를 주는 것은 결과를 이해하지 못하기 때문에 나를 더욱 불안하게 만듭니다.
이러한 혼란을 더하기 위해 많은 튜토리얼에서는 "basejail", "skeleton 디렉터리", "템플릿"을 사용합니다. 이는 감옥이 정확히 무엇인지에 대한 혼란을 가중시키고 많은 관리자들과 혼동하게 만듭니다.
파일 시스템
우리는 실제로 어떤 파일 시스템을 사용하고 있는지 신경 쓰지 않습니다. UFS 또는 ZFS일 수 있습니다. 감옥에서는 chroot 디렉터리만 필요합니다.
UFS를 사용할 때 주목해야 할 중요한 점은 슬라이스가 어떻게 배열되는지입니다. 초보자들은 이렇게까지 생각하지 않는 경우가 많습니다. chroot를 수용할 만큼 충분한 공간이 있는 슬라이스는 무엇입니까? 그래서 나는 특히 /home
이런 목적으로 사용하는 것을 싫어합니다. 어쩌면 이 목적을 위해 슬라이스를 생성하거나 어딘가에 디렉토리를 생성한 다음 충분한 공간이 있는지 결정할 수도 있습니다.
ZFS를 사용하는 경우 문제는 실제로 동일합니다. ZFS의 구조로 인해 mkdir
. 하지만 처음에는 걱정할 필요가 없습니다. ZFS를 사용하여 "mkdir"을 실행하는 것이 더 적합할 수 있습니다. 이렇게 하면 작업이 더 간단해지고 ZFS 없이도 계속 진행할 수 있습니다.
다음 문제는 많은 튜토리얼이 새로운 감옥을 만들기 위해 복사할 준비가 된 완전한 스톡 시스템인 "basejail"로 작동한다는 것입니다. 일부 튜토리얼에서는 복사 대신 ZFS 복제를 수행하라고 지시합니다. 오랜 시간에 걸쳐 기본 감옥을 업데이트하고 자연스럽게 스냅샷을 생성하게 됩니다. 그러나 복제본이 있는 스냅샷은 삭제할 수 없다는 것을 알게 될 것입니다. 그래서 실제 사용에서는 zfs 보내기/받기를 선호합니다.
내 생각에는 튜토리얼에서는 ZFS를 부록으로만 다루어야 한다고 생각합니다. ZFS 자체는 거대한 주제이므로 그렇게 다루어야 합니다. 감옥과 ZFS에 익숙해지면 원하는 대로 결합하여 이점을 얻을 수 있습니다. 이렇게 하지 않으면 손상되었을 때 수리할 수 있는 능력도 없이 매우 취약한 타워를 건설하게 될 것입니다.
뚱뚱함/두꺼움 vs 날씬함
FreeBSD 매뉴얼"완전한" 교도소와 "서비스" 교도소에 대해 이야기해 보세요. 대부분의 다른 곳에서는 "두꺼운"(뚱뚱한/가득한) 감옥과 "마른" 감옥이라는 용어를 사용합니다. Thick Jail과 Thin Jail은 모두 "완전히" 가상화된 FreeBSD 시스템이며, FreeBSD 매뉴얼에서는 이를 "전체" Jail이라고 부릅니다. 그러나 "서비스" 교도소는 더 찾기 어렵습니다.
두꺼운 감옥은 완전한 운영 체제의 복사본입니다. 그런데 지방이 얼마나 되나요? base/lib32/ports가 포함된 FreeBSD 11.2의 무게는 1.4G이지만 감옥의 경우 "base"만으로도 상대적으로 작은 512M을 유지할 수 있습니다(Windows 10의 C:\Windows 비교에서 20G에 비해).
Thin Jail은 "전체" Jail의 디스크 사용량을 최소화하는 기술입니다. 사용하여빈 파일 시스템(루프백 파일 시스템 하위 트리) 읽기 전용 파일 시스템과 잘 배치된 몇 개의 심볼릭 링크를 마운트하여 읽기/쓰기 부분을 활성화하여 디스크 사용량을 줄입니다. 불행하게도 나는 손에 어떤 숫자도 가지고 있지 않습니다. 디스크 구조가 확보되면 파일 시스템을 마운트하기 위해 감옥을 시작할 때 mount.fstab
파일 시스템에 간단히 추가할 수 있습니다 .jail.conf
이 작업을 수행하는 방법에 대한 아이디어가 있습니다.FreeBSD의 어려운 길. 이를 통해 제3자 유틸리티 없이 감옥을 처리하는 방법을 배웠고 결국 요점을 알 수 있었습니다. 제목에도 불구하고 이것은 실제로 가장 쉬운 방법입니다. 그러나 그들은 한 가지 잘못을 저질렀습니다. zfs clone을 수행하면 안 되지만 zfs 보내기/받기는 수행해야 합니다.순수한 감옥, 쉬운 방법. 둘 다 약간 오래된 작품에서 영감을 얻었을 수도 있습니다.nullfs가 있는 여러 FreeBSD Jail. 또 다른 귀중한 소스는FreeBSD 씬 감옥. 마지막으로 업데이트된 리소스에서는 VNET(이에 대해서는 다시 설명하겠습니다!)이 구성되는 방법도 다룹니다.vnet 및 ZFS가 포함된 FreeBSD Jail
위의 작업은 흔히 Prison-lite라고 불리지만 다른 곳에서도 수행할 수 있습니다.방법. 모든 길은 로마로 통하므로 현지에서 어떻게 구현하는지 결정하는 것은 귀하에게 달려 있습니다.
이 모든 것이 우리를 '섬김'이라는 찾기 힘든 감옥으로 이끈다. 대부분의 봉쇄 상황에서 하나의 특정 서비스만 운영하는 교도소. 이를 지원하는 얇은 레이어만 있는 실제 애플리케이션입니다. 할 수는 있지만 이에 대한 작업을 많이 본 적이 없습니다.
일반적인 콘텐츠는 jail.conf
다음과 같습니다.
exec.start = "/bin/sh /etc/rc"; # Start command
exec.stop = "/bin/sh /etc/rc.shutdown"; # Stop command
이렇게 하면 rc 시스템이 시작/중지될 때 감옥에서 실행됩니다. 매우 간단한 실행 파일이 있는 경우 이를 가리키기만 하면 됩니다. 따라서 질문은: 내 서비스가 액세스해야 하는 운영 체제는 몇 개입니까? 어떤 공유 라이브러리가 필요하며 스크립트를 실행합니까?
내가 아는 한, 당신을 위해 이것을 해줄 수 있는 직업은 없습니다. 따라서 전체 감옥으로 시작한 다음 특정 서비스에 필요하지 않은 콘텐츠를 제거합니다. 많은 명령줄 유틸리티(예 top
: , ps
및 ) tail
는 일반적으로 데몬에서 사용되지 않으므로 안전하게 제거할 수 있습니다. 하지만 감옥 안에서 직접 디버깅하는 경우에는 놓칠 수도 있습니다. 데몬을 직접 시작한다면 exec.start
그럴 필요가 없습니다 rc.subr
.
이 경로를 따라 서비스가 계속 작동하는 동안 운영 체제에서 제거할 수 있는 양(공격 표면을 줄이기 위해)을 결정하기 위해 연속적인 살인을 시작하는 경우 다음을 알아야 합니다.나노BSD. 이는 필요에 맞게 설치를 조정하는 데 도움이 됩니다.
그래서 – 절대적으로 가능합니다. 그러나 내가 아는 한 공공사업은 없다. 대부분의 사람들은 두꺼운 감옥이나 얇은 감옥을 선택하고 그곳에서 지정된 서비스를 운영할 것입니다.
의존성 지옥
교도소 체중 감량을 할 때는 모든 것이 올바른지 확인하기 위해 매우 조심해야 합니다. 그렇지 않으면 모든 것이 무너질 것입니다. 시스템을 업데이트할 때 모든 다른 부분을 업데이트해야 한다는 것을 기억해야 합니다. 시작하는 기지 감옥 또는 소스. 템플릿과 실제 감옥. 움직이는 바퀴가 많아 관리가 더 어려워집니다. 할 수는 있지만 노력과 보상을 비교 평가해야 합니다. 디스크 공간은 매우 저렴하므로 노력할 가치가 있으려면 상당한 서비스가 필요합니다.
그렇다면 전체 운영 체제가 포함된 간단한 Fat Jail을 사용하는 것이 좋습니다.
ZFS에 만족한다면 꼭 사용해 보세요. 하지만 그렇지 않다면 간단한 디렉터리에서 chroot하는 것이 좋습니다. 감옥에서 일하는 것이 편안해지면 크림 추가를 시작할 수 있습니다.
핵심은 감옥을 그 자체로 하나의 시스템으로 생각하는 것입니다. 오늘 시스템을 올바르게 유지 관리한다면 이미 시스템을 사용하는 습관이 있고 freebsd-update fetch install
커널과 사용자 공간을 모두 업데이트한다는 것을 알게 될 것입니다.
믹스에 감옥을 추가할 때, 감옥도 업데이트하는 것을 기억하면 됩니다:
freebsd-update -b /usr/local/jails/testjail install
업그레이드하는 경우 감옥도 기억하세요.
freebsd-update -b /usr/local/jails/testjail --currently-running 10.3-RELEASE -r 11.0-RELEASE upgrade
패키지를 신선하게 유지하는 것처럼
pkg upgrade
pkg -j testjail upgrade
안녕하세요! 난 그냥 감옥에 서비스를 넣고 싶어요!
좋아요! 모든 주의 사항을 염두에 두고 완전히 일반적인 시스템에서 간단한 방법으로 이를 수행해 보겠습니다. TinyDNS는 나쁜 예이므로 설치해 봅시다.nginx
- 제인 감옥 구성 만들기
/etc/jail.conf
- 부팅 시 감옥이 시작되도록 허용
- 감옥 이름 "testjail"을 추가했습니다.
- "testjail" chroot 디렉토리 추가
- chroot에 OS 설치(기본만 선택.
lib32
/ 선택 취소ports
) - 감옥을 시작하다
nginx
감옥에 패키지를 추가합니다 .- 부팅 시 nginx를 시작하도록 감옥에 지시
- 지금 nginx를 시작해보세요!
완벽한!
1번과 2번은 감옥에 갈 준비를 하는 용도로만 사용됩니다. 각각의 새로운 감옥에는 3~6개가 있습니다. 1회 제공량당 7~9개.
cat <<'EOF'>/etc/jail.conf
# Global settings applied to all jails.
host.hostname = "${name}.jail";
ip4 = inherit;
ip6 = inherit;
path = "/usr/local/jails/${name}";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
# Specific seetings can be applied for each jail:
'EOF'
sysrc "jail_enable"=YES
echo "testjail { }" >> /etc/jail.conf
mkdir -p /usr/local/jails/testjail
bsdinstall jail /usr/local/jails/testjail
service jail start testjail
pkg -j testjail install -y nginx
sysrc -j testjail "nginx_enable"=YES
service -j testjail nginx start
이것이 제가 감옥과 간단한 행정을 하는 "올바른" 방법이라고 부르는 것입니다. 다양한 변형이 있습니다. 마지막 줄은 로 대체될 수 있습니다 service jail restart testjail
. 이제 감옥에 갇힌 nginx 인스턴스에서 웹을 탐색할 수 있습니다.
일부 FreeBSD 기본 설정은 감옥에 적합하지 않습니다. 따라서 다음 설정도 고려하십시오.
sysrc -j testjail sendmail_enable="NONE"
sysrc -j testjail sendmail_submit_enable="NO"
sysrc -j testjail sendmail_outbound_enable="NO"
sysrc -j testjail sendmail_msp_queue_enable="NO"
감옥을 없애다
감옥 삭제:
- 감옥을 막다
- "/etc/jail.conf"에서 감옥 이름을 제거합니다.
- 파일을 삭제할 수 있도록 플래그를 재설정하세요.
- 파일 삭제
service jail stop testjail
sed -i '' '/^testjail {/ d' /etc/jail.conf
chflags -R noschg /usr/local/jails/testjail
rm -rf /usr/local/jails/testjail
위의 내용은 Part III 교도소 관리 도구 없이도 기존 도구를 사용하여 교도소를 관리하는 것이 어렵지 않음을 보여주기 위한 것입니다.
안녕하세요! 난 그냥 TinyDNS를 감옥에 넣고 싶을 뿐이에요!
당신은 "정상적으로" TinyDNS를 설치할 수 있다고 썼으므로 나는 당신에게 맡길 것입니다. 주의를 기울이고 있는 다른 사람이라면 이것이 다음과 같이 간단할 것이라고 추측할 수도 있습니다.
pkg -j testjail install djbdns
하지만 패키지를 만든 사람이 /usr/local/etc/rc.d
. 대체 서비스 관리를 사용하도록 선택할 수 있습니다.가정 교사아니면 그것을 추가하는 간단한 트릭/etc/rc.local. 또는 보너스 포인트를 얻으려면 rc 스크립트를 만들어 우리 모두가 즐길 수 있도록 기여하세요!
이를 통해 실제로 알아야 할 두 가지 구체적인 감옥 명령을 소개합니다.길링스실행중인 감옥을 나열하고프로그램 실행감옥에서 무언가를 수행할 수 있게 해줍니다.
root@test:~ # jls
JID IP Address Hostname Path
3 testjail.jail /usr/local/jails/testjail
명령줄을 루트로 가져오려면 간단히 루트 셸을 실행하면 됩니다(tcsh라는 것을 기억하세요!)
root@test:~ # jexec testjail /bin/tcsh
root@testjail:/ # tinydns
tinydns: fatal: $IP not set
root@testjail:/ # exit
exit
root@test:~ #
이 쉘에서 작업할 때 모든 것이 감옥/chroot에 있습니다.
그들은 당신에게 아무 말도 하지 않습니다!
나는 지금까지 대부분의 튜토리얼에서 설명한 내용에서 벗어나지 않습니다. 파일 시스템에서 많은 시간을 낭비한 후 흥미로운 부분을 건너뜁니다. 요즘에는 네트워크에 접속할 수 없는 컴퓨터가 별로 재미가 없습니다. 위의 예에서는 네트워크 스택을 호스트와 공유합니다. 이는 감옥과 동일한 포트를 사용하여 감옥 호스트에서 아무것도 실행할 수 없음을 의미합니다. 내 예에서는 웹 서버의 포트 80입니다.
반면에 요즘에는 방화벽을 설정하는 것이 매우 쉽습니다. 모든 포트를 로컬 포트로 취급하면 됩니다. IPv6를 사용하면 모든 것이 쉬워집니다. 그러나 우리 대부분(모두?)은 여전히 IPv4와 싸워야 합니다. IPv4는 간단하지만 필요한 주소가 없을 수 있으므로 일종의 NAT를 사용해야 합니다.
네트워킹에 대해 실제로 알고 싶다면 가상 네트워크 인터페이스가 있습니다.인터넷. 성숙해졌어년도하지만 이를 사용하려면 VIMAGE를 지원하는 커널을 컴파일해야 합니다. 이는 일반 커널에서 활성화됩니다.프리BSD 12.0이후.
VNET을 사용하면 방화벽을 실행할 수 있는 멋진 가상 인터페이스가 제공됩니다.~에감옥.
감옥 호스트의 통합 방화벽이 나와 내가 원하는 것에 충분하기 때문에 현재 VNET을 사용하고 있지 않습니다. 이를 통해 교도소 안팎의 교통을 통제할 수 있습니다. 이로 인해 감옥에서 물건을 꺼내기가 더 어려워집니다.
감옥 호스트에서는 일부 아웃바운드 트래픽(http/ftp/namesolution)을 허용하는 경우가 많습니다. 그러나 감옥의 모든 트래픽에 대해 양방향 및 감옥 사이에 허용되는 포트를 명시적으로 지정합니다.
비결은 트래픽을 다른 인터페이스로 전환하는 것입니다. 로컬 루프백 인터페이스 lo0
는 좋은 선택입니다. 그러나 규칙을 더 효과적으로 분리하려면 새 인터페이스 이름으로 복제하는 것이 좋습니다 lo1
. 감옥 호스트의 IP 주소를 사용하여 설정하고 미리 채울 수 있습니다 ifconfig
. 그러나 감옥 하위 시스템이 자동으로 이 모든 것을 처리하므로 이는 필요하지 않습니다.
이를 위해 우리는 /etc/jail.conf
이제 다음과 같이 보입니다:
# Global settings applied to all jails.
host.hostname = "${name}.jail";
interface = "lo1";
path = "/usr/local/jails/${name}";
mount.fstab = "/usr/local/jails/${name}.fstab";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
exec.clean;
mount.devfs;
# Specific seetings can be applied for each jail:
testjail { ip4.addr = 172.17.2.1; }
ip4/6 = inherit;
로 변경된 방법에 주목하세요 interface="lo1"
. 또한 mount.fstab
이것이 nullfs 마운트를 추가한 방법이지만 지금은 더 이상 논의하지 않겠습니다. 그런 다음 테스트 감옥에 사용하려는 내부 IP를 추가했습니다.
그런 다음 다음을 추가하여 lo1
복제합니다 /etc/rc.conf
.
sysrc "cloned_interfaces"="lo1"
이렇게 하려면 재부팅해야 합니다. 다시 시작하지 않고 지금 시도하려면 인터페이스를 직접 만들어야 합니다.
ifconfig lo1 create
ifconfig lo1 up
cloned_interfaces="lo1"
이는 의 설정과 동일한 효과를 갖습니다 /etc/rc.conf
. 감옥이 시작될 때 자동으로 처리되므로 IP 주소에 대한 별칭을 만들 필요가 없습니다.
그러나 교통량이 아무데도 가지 않기 때문에 이것은 지루합니다.
트래픽을 계속 실행하려면 방화벽을 설정하고 일부 NAT를 시작해야 합니다. 내가 선택한 독은퍼프. 귀하의 규칙 세트는/etc/pf.conf
http용 감옥 IP에 외부적으로 NAT하려면:
rdr pass inet proto tcp from any to (em0) port http -> 172.17.2.1 port http
많은 서비스는 자체적으로 연결할 수 없으면 시작되지 않습니다. 그래서 이에 대한 규칙도 추가했습니다.
pass on lo1 proto tcp from 172.17.2.1 to 172.17.2.1 port http
NAT 규칙은 외부인이 연결하도록 하려는 경우에만 필요합니다. 여러 개의 감옥을 갖기 시작하면 일반적으로 하나의 감옥이 다른 감옥에 연결될 수 있기를 원합니다.
pass on lo1 proto tcp from 172.17.2.1 to 172.17.2.2 port 8180
이러한 간단한 방화벽 설정을 통해 감옥과 외부 세계 사이에 매우 우수한 네트워크 격리를 달성할 수 있습니다.
일반화하다
내 경험을 바탕으로 감옥 사용 방법을 배우려면 다음 경로를 따르는 것이 좋습니다.
- 기본 커널 기능 이해 - 프로세스란 무엇입니까?
- chroot에 대해 알아보기
- 시작 프로세스 이해
- 뚱뚱한 감옥을 짓다
- 감옥에서 일합니다. 사용/업데이트
- 그를 이해하다
- 약한 감옥을 건설하다
- 여러 감옥에서 작동
- 네트워킹에 대해 알아보기
- 네트워크 설정
- ZFS에 대해 알아보기
이것이 나의 요리법입니다. 당신이 기대했던 것과 정확히 일치하지 않을 수도 있습니다 :-)
제공된 도구로 어려운 작업을 처리하고 싶지 않다면 일부 타사 도구를 확인하세요.
이 모든 것에서 문제가 상당히 광범위하고 선호하는 설정에 크게 의존한다는 것을 알 수 있습니다. 예를 들어 잘 작동하는 패키지에 대한 영수증을 보여드린 것 같지만 nginx
다른 질문이 필요할 수도 있습니다.
- TinyDNS를 보호하는 방법은 무엇입니까?
- 권한이 없는 사용자로tinydns를 실행하는 방법은 무엇입니까?
- rc 스크립트 작성 방법
하지만 감옥 부분은 제외하겠습니다.