Kevin Fenzi, kevin@tummy.com
Dave Wreski, dave@nic.com
v1.1.0 2000년 3월 8일
장 범수, bschang@kldp.org
2000년 5월 9일
-----------------------------------------------------------------------------------
이 문서는 Linux System 관리자가 상대하게 되는 보안 이슈에 대한 일반적 개론을 밝힌다. 일반적인 보안 철학 등과 Linux System을 침입자로부터 보호할 방법 등의 특정 보기를 몇 가지 적어 놓았다. 보안에 관계된 자료들과 Program을 구할 수 있는 곳도 적어 놓았다. 개선 사항, 건설적인 비평, 첨가 사안, 그리고 수정안 등을 감사한 마음으로 수용하겠다. 여러분의 의견은 두 저자 모두에게 "Security HOWTO"를 Mail의 제목에 써서 보내 주기 바란다
-----------------------------------------------------------------------------------
8. Network 보안
사람들이 더 많은 시간을 Computer 접속에 보내게 되면서, Network 보안은 더욱 더 중요해 지고 있다. Network 보안은 물리적이나 지역의 보안을 깨는 것보다 훨씬 쉽다.
Network 보안을 도와줄 도구들은 많으며, 갈수록 많은 것들이 Linux 배포본에 실려 배포되고 있다.
8.1 Packet Sniffer
침입자가 Network의 더 많은 System으로 침투하기 위해서 가장 흔하게 쓰는 방법 중의 하나가 이미 깨어진 Host에서 Packet Sniffer를 실행하는 것이다. 이 "Sniffer"는 Ethernet Port를 감청하면서 지나가는 Packet 흐름에서 Password, Login, su 같은 것이 들리면 그 이후의 내용을 녹음해 둔다. 이 방법을 쓰면, 공격자는 침투하려고 시도조차 않았던 System으로까지 들어가는 Password를 얻게 된다. (암호화가 안된 채로) 평문으로 전송되는 Password는 이 공격에 매우 약한 것이다.
예: Host A의 보안이 깨졌다. 공격자는 (여기에) Sniffer를 설치한다. (잠시 후,) 어떤 관리자의 Host C에서 Host B로 들어가려는 접속 Log-In을 Sniffer가 감지한다. (이제 Packet이 녹음이 되고 있다) 관리자가 B로 Log-In을 하는 순간, 이 관리자의 개인 Password는 녹음이 된다. 잠시 후 관리자가 -- 어떤 문제를 해결하기 위해 -- su를 사용한다. 이제 Host B의 root Password까지 얻게 되었다. 잠시 후에, 관리자가 누군가가 자기 계정에서 다른 Site에 있는 Host Z로 Telnet을 하도록 해 두면 공격자는 이제 Host Z로 Log-In할 Password까지 갖게 된다.
요즘에는 공격자가 Packet Sniffer를 쓰기 위해 System의 보안을 깨고 침입할 필요조차 없어져 버렸다. 공격자는 Laptop이나 PC를 건물 안으로 들고 들어와서 Network를 감청하면 그만인 것이다.
ssh나 다른 암호화된 Password 방식을 사용하면 이 공격을 방해할 수 있다. POP 계정용의 ATOP 등이 이 공격을 방지한다. (Network를 통해 평문 Password를 전송하는 방법들이 다 그렇듯이, 보통의 POP Log-In은 Sniffer에 대단히 취약하다.)
8.2 System Service와 tcp_wrapper
어떤 Service를 제공할 필요가 있는가를 선별하는 것은 Network에 Linux System을 올려놓기 전부터 해야 할 일이다. 제공할 필요가 없는 Service를 아예 해체해 버리면 걱정거리가 하나 줄고, 공격자가 개구멍을 찾을 대상을 하나 줄여 버리는 것이 되는 것이므로.
Linux System에서 Service를 꺼 버리는 방법은 많이 있다. /etc/inetd.conf File을 보면 inetd가 현재 어떤 Service를 제공하고 있는지 알아볼 수 있다. 필요 없는 Service는 모두 주석문 (remark) 처리를 해서 막아 버리고 ((#을 줄의 가장 앞에 쓴다), inetd Process에 SIGHUP 신호를 보내도록 조정하라. [25. SIGHUP]
아울러 /etc/services File에서도 Service를 주석문 처리를 하거나 삭제할 수 있다. 이것은 지역 사용자들도 또한 Service를 못쓰게 된다는 뜻이다 (예로서, 만약 여러분이 ftp를 삭제해 난 후, 이 기계에서부터 원격 Site로 ftp를 사용하려 하면 "unknown service" Message가 나오면서 안 받아 줄 것이다) 보안성이 늘어나는 것은 아니므로 꼭 Service를 /etc/services에서 없애 버릴 가치는 없다. 만약 지역 사용자가 -- 여러분이 주석문 처리를 해서 꺼 버린 -- ftp를 쓰고 싶어한다면, 그는 간단히 자신의 Client를 사용하면서 공용 ftp Port를 써서 여전히 일을 할 수 있을 것이다.
켜 놓는 것이 좋을 Service들은:
ftp
telnet (혹은 ssh)
pop-3 이나 imap 등의 Mail
identd
등이 있다.
어떤 Package를 쓸 일이 없으리라는 것을 알고 있다면, 그 Package를 완전히 삭제할 수도 있다. Redhat 배포본에서는 rpm -e 명령으로 한 Package 전체를 지울 수 있다. Debian에서는 dpkg로 같은 작업을 할 수 있을 것이다.
덧붙여서, (rlogin이 쓰는) login과 (rcp가 쓰는) shell 그리고 (rsh가 쓰는) exec를 /etc/inetd.conf에서 시작되는 것을 막는 것을 포함해서, /rsh/r;pgin/rcp 도구를 꺼 버리는 것이 정말로 필요하다. 이들 Protocol은 극단적으로 보안이 허술하며 (insecure), 예전부터 침탈 (exploit)의 근원이 되어 왔다.
Redhat은 /etc/rc.d/rc[0-9].d를 보고, Debian 경우에는 /etc/rc[0-9].d를 보는 등으로 Directory에서 실행되는 Server들 가운데 불필요한 것들이 있는가 확인하라. 이들 File들은 실제는 /etc/rc.d/init.d (Redhat의 경우; Debian은 /etc/init.d) Directory로 Symbolic Link 되어 있다. init.d에 있는 File들의 이름을 바꿔 버리면 Symbolic Link를 꺼 버리는 효과를 가져온다. 만 약 특정 Run Level에 맞추어서 적당한 Service를 꺼 주고 싶으면, 이에 상응하는 Symbolic Link를 대문자 (Upper-case)에서 소문자 (Lower-case)로 이름을 바꿔 주면 된다. 다음의 경우는 대문자 S를 소문자 s로 바꾼 것이다.
root# cd /etc/rc6.d
root# mv S45dhcpd s45dhcpd
BSD 형식의 rc File들을 갖고 있다면 /etc/rc*을 검사해서 필요 없는 Program들을 볼 수 있다.
대부분의 Linux 배포본에는 모든 TCP Service들을 "보호해 주는(wrapping)" tcp wrapper가 들어 있다. tcp_wrapper (tcpd)는 실제 Server를 실행 할 수 있는 것이 아니 고, 대신 inetd가 불러오는 방법으로 실행된다. 그러면 tcpd는 Service를 요청하는 Host를 검사해서, Server를 실행시키거나 그 Host로부터의 접근을 거부한다. tcpd를 이용해서 tcp Service로의 접근을 제한할 수 있는 것이다. /etc/hosts.allow File을 만들고, 여러분 Computer의 Service에 접근할 필요가 있는 Host들만을 추가하도록 한다.
여러분이 집에서 Modem을 쓰는 Dial-Up 사용자라면, 필자는 "모든" Service에 대한 접근을 거부하도록 조정하기를 권장한다. tcpd는 Service에 접근하려다가 실패한 시도들을 기록하므로, 공격을 받고 있다는 것을 경고해 줄 수도 있다. TCP를 기반으로 하는 새로운 Service를 추가로 설치하게 되면, 반드시 tcp wrapper가 이 Service를 추가 감시하도록 다시 구성하는 것이 좋다. 예를 들면, 가정의 Modem 사용자 (dial-up)는 외부인이 자신의 기계에 연결하는 것을 막으면서도, Mail을 받도록 Internet에 Network 연결을 할 수가 있다. 이렇게 만들려면 /etc/hosts.allow에 다음을 추가한다.
ALL: 127.
물론 /etc/hosts.deny에도
ALL: ALL
이렇게 해 놓으면 외부에서 들어오는 연결은 막으면서도, 내부에서 Internet으로 나가는 연결은 할 수 있게 된다.
염두에 둘 것은 tcp_wrapper는 inetd와, 선정된 소수의 다른 것들에서부터 실행되는 Service들만 보호한다는 것이다. 여러분이 쓰는 기계에는 다른 Service들도 돌아가고 있는 것일 수 있다는 것을 생각해 두자. 여러분 기계에서 돌아가는 모든 Service를 보려면 netstat -ta를 쓰면 된다.
8.3 DNS 정보의 확인
여러분 Network의 모든 Host에 대한 DNS 정보를 최신판으로 유지하는 것으로도 보안이 강화할 수 있다. 만약 불법 Host가 여러분 Network에 연결되는 상황이 벌어지면, DNS Entry가 없을 것이므로, 침입을 알아챌 수가 있게 된다. 많은 Service들은 -- 유효한 DNS Entry가 없는 Host는 접속을 거부하는 식으로 -- 조정할 수 있게 되어 있다.
8.4 identd
identd는 주로 inetd Server에서 수행되는 작은 Program이다. 어느 사용자가 어떤 TCP Service를 수행시키는지 추적하고, 요구하는 누구에게든 추적 결과를 보고한다.
많은 사람들이 identd의 유용성을 오해하고, 이것을 꺼 버리거나 외부 Site로부터 오는 요청을 거부하도록 막아 둔다. identd는 단지 원격 Site에 도움을 주기 위해서 있는 것이 아니다. 여러분이 원격 identd로 얻은 자료가 옳은지 알 방법은 없으므로. identd 요청에는 아무런 인증 절차가 없기 때문이다.
그렇다면 왜 identd를 수행시켜야 할까? identd가 여러분을 도와주기 때문이고, 추적 시에는 여러분의 검문소 역할을 하기 때문이다. 여러분의 identd가 변조되지 않았다면 TCP Service를 쓰고 있는 사람들의 사용자 이름이나 uid를 identd가 원격 Site에 말해 줄 수 있는 것을 알 것이다. 만에 하나, 원격 Site의 관리자가 여러분에게 와서 여러분 Computer의 어느 사용자가 자기의 Site로 침입하려고 했다고 말한다면, 여러분은 손쉽게 그 사용자에 대해서 행동을 취할 수 있다. identd를 실행시키고 있지 않았다면, 누가 그 때 있었는지 알아내기 위해서 수많은 기록들을 살펴보아야 하고, 이런 경우 일반적으로 그 사용자를 추적하기 위해서 훨씬 긴 시간이 걸리게 된다.
대부분의 배포판에 들어 있는 identd는 대부분의 사람들이 생각하는 것보다 더 다양한 설정이 가능하다. 특정한 사용자용으로 identd가 작동하지 않도록 할 수 있고 (이 사용자들은 .noident File을 만들면 된다), 모든 identd 요청을 기록하도록 할 수 있으며 (필자는 이렇게 하기를 권한다) 사용자 이름 대신 uid나 NO-USER를 표기하도록 할 수도 있다.
8.5 SATAN, ISS, 그리고 다른 Network Scanner Program들
Port와 Service를 대상으로 Computer들과 Network에 대한 검사 (scan)를 수행하는 많은 Software Package들이 있다. SATAN과 ISS는 그 가운데 비교적 잘 알려진 Program이다. 이 Software들은 표적 Computer의 (혹은 한 Network 상의 모든 표적 Computer들의) 가능한 모든 Port에 연결하려고 시도하며, 어떤 Service가 그 곳에서 수행되고 있는지 찾아내고자 한다. 이 정보를 바탕으로 표적 Computer가 어떤 침탈법에 취약한지 찾을 수 있다.
SATAN(Security Administrator's Tool for Analyzing Networks)는 Web Interface를 쓰는 Port Scanner Program이다. Computer 한 대나 하나의 Network에 대한 검사 강도는 강, 중, 약 등으로 임의 설정할 수 있다. SATAN을 구해서 여러분의 Computer나 Network를 조사해서 발견되는 문제를 고치는 것이 좋다. SATAN을 MetaLab 등의 믿을 만한 FTP, 또는 Web Site에서 구하도록 주의해야 한다. SATAN을 가장한 트로이 목마가 Internet에 떠돌고 있기 때문이다. 하나 알아두면 좋을 것은, SATAN이 근래에 Update되지 않았고, 아래에 적어 놓은 다른 도구들이 검사 작업을 더 잘할 수가 있다는 것이다.
ISS (Internet Security Scanner)는 또 다른 Port형 검사 Program이다. SATAN 보다 빠르며, 따라서 대규모의 Network를 검사하기에 더 적합할 수 있다. 하지만 SATAN이 더 많은 정보를 제공하는 경향이 있다.
Abacus는 Host용의 보안과 침입 감지 기능을 제공해 주는 도구들의 뭉치다
SAINT는 SATAN을 Update한 형식으로 만들어진 것이다. Web 상에서 돌아가며 SATAN 보다 많은 신형의 Test를 실행할 수 있다.
Nessus는 무료 보안 Program이다. 쉽게 쓸 수 있도록 GTK Graphic Interface를 사용한다. [26. GTK] 새로운 Port Scan Test 방법이 나오면 그 부분만을 Update를 할 수 있도록 Test들을 Plug-In 형식으로 내려 받아 쓸 수 있게 만들어져 있다. 정보를 원한다면 에서 구할 수 있다.
Port Scan 경우의 탐지
SATAN 이나 ISS, 또는 다른 Scanner Program들이 여러분의 Computer를 탐색 (Probe)해 들어오는 것을 경보를 해 주는 여러 도구들이 있기는 하다. 하지만, tcp_wrapper를 여기 저기 많이 쓰면서 여러분의 일지 문서들을 정기적으로 자주 들춰보는 것도 탐색을 알아채는 좋은 방법이다. 가장 강도를 낮추어 조정해도 SATAN은 보통의 Redhat System의 일지에 자취를 남기게 되므로.
" Stealth" Port Scanner도 염두에 두자. (Session이 연결된 상태에 만들어지는) TCP의 ACK bit가 적혀 있는 Packet은 Packet Filtering 방화벽도 관통할 경우가 있다. Session이 연결되지 않은 상태의 Port에서 답으로 보내 주는 RST Packet은 -- 감지자에게는 -- 그 Port가 존재한다는 증거로 쓰일 수 있을 것이다. 내 생각에는 tcp_wrapper가 이런 식의 우회 수색을 감지해 내지는 못한다고 생각한다. [27. Nessus Plug-In]
8.6 Sendmail, qmail과 MTA
여러분이 제공할 수 있는 가장 중요한 Service들 가운데 하나가 Mail Server이다. 불행히도 Mail Server는 공격에 가장 취약한 Service 중의 하나인데, 그 까닭은 이것이 수행해야 하는 작업의 숫자와 필요로 하는 권한이 많기 때문이다.
sendmail을 쓰고 있다면, 최신 Version을 사용하는 것이 매우 중요하다. sendmail은 길고도 긴 침탈의 역사가 있다. 가장 최근의 Version을 항상 사용하도록 유의하라.
염두에 둘 것은 Mail을 보내기 위해서 Sendmail을 켜 놓을 필요가 없다는 것이다. 만약 여러분이 집에서 혼자 쓰는 Home User라면, Sendmail을 아예 끄고서 단순한 Mail Client Program을 써서 Mail을 보낼 수 있다. 또한, Sendmail 초기 실행 문서 (Startup File)에서 "-bd" Flag을 지움으로서 Mail의 수신 요청 (Incoming Request)을 아예 끄는 것도 좋을 것이다. 다른 말로 하면, 여러분의 초기 실행 Script에서 다음의 명령어를 사용해서 Sendmail을 실행할 수 있을 것이다:
# /usr/lib/sendmail -q15m
이 명령어는 첫 시도로 전달이 안되어서 Mail Queue로 보내진 Message를 15분 간격으로 다시 보내려는 재 시도를 한다. [28]
많은 관리자는 아예 Sendmail을 사용하지 않고 다른 Mail 전달 Agent를 사용하기도 한다. 원한다면 qmail로 교체 사용하는 것을 고려하는 것도 좋을 것이다. qmail은 처음부터 보안을 염두에 두고 설계되었다. 이 Program은 보다 빠르고 안정적이며 보안상 안전하다. 에서 구할 수 있다. [29. Sendmail과 qmail]
qmail과 정면으로 경쟁하고 있는 "postfix"도 있다. 이것은 tcp_wrapper 등의 여러 보안 도구를 만든 Wietse Venena가 만든 것이다. 이 전에는 vmailer라고 불렸던 것이고, 현재는 IBM이 후원을 하고 있으며, 설계 초반에서부터 보안을 염두에 두고 만들어져 있다. [30. postfix]
8.7 Service 거부 유도 방식의 공격
(Denial of Service attacks: 이하 DoS)
System의 Service 거부를 유도하게 만드는 방식의 공격 (Denial of Service: DoS)은 공격자가 System 자원의 일부를 매우 바쁘게 만들어서 불통시키는 방법을 써서 System이 정식 요청에 응답하지 못하게 만들거나 정식 사용자의 System 접근을 거부하게 만드는 것이다.
이런 종류의 공격은 근년에 들어 크게 증가해 왔다. 최근의 공격 방법 중 잘 알려진 것들을 아래에 적었다. 새로운 공격 방법들이 항상 나타나고 있으므로 여기 소개된 것들은 그저 몇 가지 사례에 불과하다는 것을 명심해야 한다. 더 새로운 정보를 얻으려면 Linux 보안 List와 bugtraq List와 Archive를 읽도록 하라. [34. Bugtraq 주소]
SYN 홍수(SYN Flooding): SYN 홍수는 Network를 통한 Service 거부 공격이다. 이 방법은 TCP 연결 방식 중에 있는 "허점"을 이용한다. (2.0.30 이후의) 새로운 Linux Kernel들은 SYN 범람 공격 방지하기 위한 조정 Option들을 가지고 있다. Kernel 보호 Option을 보려면 [Kernel 보안]을 보도록 하라.
Pentium "FOOF" Bug: Intel의 정품 Pentium Processor에 일련의 Assembly Code를 보낼 경우 Computer가 무조건 Reboot하게 된다는 것이 최근에 발견되었다. 이것은 어떤 운영체제인가에 관계없이 (Pentium Clone과 Pentium Pro, Pentium2를 제외한) Pentium Processor를 사용하는 모든 Computer에 영향을 미친다. 2.0.32 이상의 Linux Kernel에는 이 Bug로 인해 Computer가 오류 작동하는 것을 막는 우회법이 포함되어 있다. 2.0.33 Kernel은 좀 더 개선된 Kernel 수정안을 가지고 있고, 2.0.32보다 좋은 것으로 인식되고 있다. Pentium을 사용하고 있다면, 지금 Upgrade를 해야 한다.
Ping 홍수 (Ping Flooding): Ping 홍수는 쉬운 부루트 포스 DoS 공격의 일종이다. 공격자는 ICMP Packet을 "홍수처럼" 여러분의 Computer에 보낸다. 공격자가 이 공격을 여러분의 Computer 보다 연결 속도가 빠른 (better bandwidth) Computer에서 시도한다면, 여러분의 Computer는 Network로 아무 것도 전송할 수 없게 될 것이다. 이 공격법의 변종 중 하나인 " Smurfing"은 -- 범인을 찾아내는 것이 더 어렵도록 -- ICMP Packet들의 발신지를 여러분 Computer의 주소인 것처럼 위장해서 다른 Host에 (Packet 신청을) 보낸다
Ping 범람 공격을 받고 있다면, 어디에서 Packet이 오는지 (혹은 오는 것처럼 보이는지) 알아내기 위해서 tcpdump 같은 도구를 쓰도록 하고, 여러분의 ISP에게 이 사실을 연락하도록 하라. Ping 범람은 Router 수준에서 차단하거나 방화벽을 쓰는 것이 가장 쉽다.
죽음의 핑 (Ping o' death): 죽음의 핑 공격은 Kernel Data 구조가 수용할 수 있는 것보다 크기가 큰 IMCP Echo를 요청하는 (IMCP ECHO REQUEST) Packet이 원인이다. (65510 byte의) 커다란 "Ping"을 System에 보내면 System이 서 버리거나 죽어 버리기 때문에, "죽음의 핑"이라고 불리게 되었다. 이 문제는 오래 전에 이미 해결책이 나와 있으니 크게 걱정할 필요는 없다.
Teardrop (눈물 방울) / New tear: 최근 침탈법의 하나인 데 Linux와 Windows의 IP Fragmentation Code에 존재하는 Bug를 쓴다. 2.0.33 Version의 Kernel에서부터 고쳐지기 시작했고, 고칠 때 Kernel Compile-Time Option을 선택할 필요는 없다. Linux는 "New Tear" 침탈법에는 영향을 받지 않는다.
대부분의 침탈법 Code와 이 것들이 어떻게 움직이는 지에 대한 깊은 설명이 필요하면 여기에서 그들의 Search Engine을 써서 구할 수 있다.
8.8 NFS (Network File System) 보안
NFS는 매우 널리 쓰이는 File 공유 Protocol이다. NFS를 이용하면 -- Kernel에서 nfs File System을 지원해 주는 (만약 Linux가 아닌 경우에는 다른 Client가 지원해 주는) 다른 Computer들로 -- nfsd와 mountd를 실행하는 Server가 File System을 "수출" 할 수 있게 해 준다. Mountd는 /etc/mtab에 Mount된 File System을 관리하며, showmount를 쓰면 NFS 내용을 볼 수 있다.
사용자들에게 Home Directory를 제공하기 위해서 NFS를 많은 Site가 사용하고 있으며, 이렇게 함으로써 사용자들이 어느 Computer에서 Log-In하였던 간에 사용자들은 Home File들을 가질 수 있게 된다.
File System을 공유할 때 사용할 수 있는 몇 안 되는 "보안" 설정이 있다. 여러분은 원격 Computer의 root 사용자(uid=0)를 nobody 사용자로 대응시켜서, 공유된 File System 전체 접근 권한을 갖는 것을 거부하도록 nsfd를 설정해야 한다. 그러나 개인 사용자는 각자의 (혹은 최소한 같은 uid의) File에 대한 접근권이 있기 때문에, 원격지의 root 유저는 자기 계정으로의 Log-In이나 su 사용이 가능하며, 자기 File들에 대해서 완전한 접근권을 가질 수 있다. 이렇게 하는 것은 원격 File System을 Mount할 권한을 가진 공격자에게는 사소한 장애물밖에 되지 못한다.
NFS를 꼭 써야 한다면, File System이 공유 사용되어야 만 하는 Computer에게로만 전송 되도록 조정하라. root Directory 전부를 수출하도록 설정해서는 절대로 안되며, 공유가 필요한 Directory만 수출 (Export)하도록 설정해야 한다.
NFS에 대한 더 자세한 정보가 필요하면 NFS HOW-TO를 보도록 하라.
8.9 NIS (Network 정보 Service) (예전의 YP)
Network 정보 Service(Network Information service, 예전의 YP)는 그룹의 Computer들에 정보를 배포하는 한 가지 방식이다. NIS 주 Server는 정보표를 소유하며 그것들을 NIS 대응 (map) File들로 변환한다. 이 대응 File들이 Network를 통해 제공됨으로써 NIS Client Computer들은 Log-In과 Password, Home Directory와 쉘에 대한 정보 (즉 보통의 /etc/passwd File에 들어 있는 모든 정보)를 얻을 수 있게 된다. NIS를 이용하면 사용자들은 Password를 한 번만 바꾸면 그 NIS 영역에 들어 있는 모든 Computer에 (정보가 갱신되도록) 할 수 있다.
NIS는 안전한 것이 아니다. 원래부터 안전을 염두에 두고 만든 것이 아니었다. 단지 간편하고 쓸모 있는 작업 역할을 위해서 만든 것뿐이다. (Network 상 어디에 있건) 여러분의 NIS 도메인의 이름을 알아맞힐 수 있는 사람은 여러분의 passwd File 복사본을 얻을 수 있고, 여러분의 사용자 Password를 깨기 위해 "크랙 (Crack)"과 "존 더 립퍼 (John the ripper)"를 쓸 수 있게 된다. NIS를 속여서 (spoof) 온갖 지저분한 일을 하게 할 수도 있다. 꼭 NIS를 써야 갰다면, 이런 위험들을 감수해야 한다.
NIC+라고 불리는 NIC보다 안전한 대체품이 있다. NIC HOW-TO를 읽어보기 바란다.
8.10 방화벽
방화벽(firewall)은 여러분의 지역 Network 안팎으로 어떤 정보가 출입할 것인가를 조정하는 한 가지 방법이다. 전형적으로 방화벽 Host는 Internet과 지역 LAN을 간섭해서, LAN에서 Internet으로의 Access는 방화벽을 통해서만 가능하도록 하는 것이다. 이렇게 하면 방화벽을 써서 Internet과 여러분의 (Localhost) 사이를 오가는 정보를 제어할 수 있다.
방화벽에는 수많은 유형과 구성 방법들이 있다. Linux Computer는 훌륭한 방화벽이 될 수 있다. 2.0 이상의 Kernel에 Compile을 써서 방화벽 Code를 바로 삽입될 수 있다. 사용자 공간 도구인 2.0 Kernel용 ipfwadm, 2.2 Kernel용 ipchains를 쓰면, 어떤 종류의 Network Traffic을 허락할 것인가를 손쉽게 바꿀 수 있다. 또한 일정한 유형의 Network Traffic을 일지에 적도록 (log) 조정할 수 있다.
방화벽은 Network의 보안 작업에 있어서 매우 중요하고도 유용한 기술이다. 하지만 방화벽이 있으니까 방화벽이 보호하고 있는 Network의 Computer들 자체의 보안은 필요 없다고 생각해서는 절대로 안 된다. 이런 안이한 생각은 절대적으로 치명적인 실수인 것이다. 방화벽과 Linux에 대한 정보를 더 얻고 싶으면 선Site에 가서 최근에 만들어진 방화벽과 HOW-TO를 읽어보도록 하라.
추가의 정보가 IP-Masquerade MINI HOW-TO File에도 있다
ipfwadm (방화벽 Setting을 바꾸는 도구)에 대한 추가의 정보는 이것의 Homepage에서 구할 수 있다.
만약 여러분이 방화벽에 대한 경험이 전혀 없으면서도, 단순 보안용을 넘는 상황에서 방화벽을 쓰기 위해서 방화벽을 세우려는 상황이라면, 오라일리 앤드 어소시에이츠에서 출판한 방화벽 관련 서적이나 온라인 상에서 구할 수 있는 방화벽 문서들을 찾아서 읽어 봐야 하는 것은 필요 조건일 것이다. [책1] 미국 국립 표준 기술 연구소 (National Institure of Standards and Technology: NIST)가 구성한 방화벽에 대한 우수한 문서도 있다. 비록 1995년에 만들어진 문서이기는 해도 아직도 읽을 만한 문서다. 이것은 에서 구할 수 있다. 또 다른 읽을 만한 문서들은:
Freefire Project -- 무료로 사용할 수 있는 방화벽 및 도구들의 목록.
Sun World 방화벽 Design -- 오라일리에서 출판한 책의 저자들이 쓴 문서다. 이 문서는 다른 종류들의 방화벽에 대한 대강의 소개를 한다.
Mason - Linux 용의 자동화 방화벽 구축 Program. Network에 방화벽을 구축하는 과정에서 자동으로 배우면서 사용할 수 있는 도구이다!
8.11 IP 사슬 - Linux Kernel 2.2.x 방화벽 작업 [31]
Linux IP 방화벽 사슬 (IP Firewalling Chains)은 2.0 Linux 방화벽 작업용 Code를 2.2 Kernel용으로 Update한 것이다 이 Update된 Code는 예전의 설치 Code에 비하면 매우 많은 기능을 제공한다. 새 기능의 예로서
보다 융통성 있는 Packet의 조작.
보다 자세한 계정/책임의 관리.
국소적이며 쉬운 보안 정책 (policy) 수정이 가능.
(Packet) 조각들의 철저한 봉쇄, 거부 등이 가능.
수상한 Packet을 일지에 기록.
ICMP/TCP/UDP 이외의 Protocol도 취급 가능.
만약 여러분이 현재 2.0 Kernel에서 ipfwadm을 사용하고 있다면, ipfwadm 명령 형식을 ipchains가 사용하는 것으로 바꿔 주는 Script가 있다.
보다 많은 정보를 위해서는 IP 사슬 HOW-TO (IP Chains Howto)를 반드시 읽어보기 바란다.
8.12 VPN - 가상사설망
VPN (Virtual Private Network: 가상사설망 혹은 가상 사설 Network)은 이미 존재하는 Network를 이용해서 "가상 존재"의 Network를 설립하는 방법 중의 하나이다. 이 가상 Network는 일반적으로 암호화가 되어 있도록 만들어져 있고, Network에 가입되어 있으며 서로가 알고 있는 개체들 (Entities) 간에서만 정보를 송수신 하도록 되어 있다. VPN은 재택 근무하는 사람이 암호화된 가상사설망을 사용함으로 --- 공공 Internet을 통해서 --- 회사 내부 Network에 연결하는 등으로 자주 사용되고 있다.
만약 여러분이 Linux Masquerade를 쓰는 방화벽을 쓰고 있는데 MS PPTP (Microsoft의 VPN Point-to-Point 연결용 제품) Packet을 통과해야 하는 경우에 처한다면, 이 경우에 쓸 수 있는 Linux Kernel Patch가 있다. IP-masq-VPN을 보기 바란다. [32. VPN 한글 정보]
Linux용의 여러 VPN Solution이 있다.
vpnd. - http://sunsite.auc.dk/vpnd/
Free S/Wan. - http://www.xs4all.nl/~freeswan/
(점) ssh를 VPN의 구성으로 쓸 수 있다. VPN MINI-HOW-TO를 보기 바란다.
vps (Virtual Private Server: 가상 사설 서버). - http://www.strongcrypto.com
여러 정보에 대한 사항을 담고 있는 IPSEC 항목도 참조하기 바란다.
'Operating System > Linux' 카테고리의 다른 글
| Linux Security How-To (FAQ/결론) (0) | 2007/06/18 |
|---|---|
| Linux Security How-To (색인) (0) | 2007/06/18 |
| Linux Security How-To (보안 관련 자료) (0) | 2007/06/18 |
| Linux Security How-To (침입 도중이나 후에 할 일들) (0) | 2007/06/18 |
| Linux Security How-To (접속에 앞서서) (0) | 2007/06/18 |
| Linux Security How-To (Network Security) (0) | 2007/06/18 |
| Linux Security How-To (Kernel Security) (0) | 2007/06/18 |
| Linux Security How-To (Password Security & Encryption) (0) | 2007/06/16 |
| Linux Security How-To (File & File System Security) (0) | 2007/06/16 |
| Linux Security How-To (지역보안) (0) | 2007/06/16 |
| Linux Security How-To (물리적 보안) (0) | 2007/06/16 |