230 likes | 333 Views
IP Accounting. 유닉스 네트워킹 실습 01390112 정명자. IP Accounting 의 정의. 리눅스 방화벽 소프트웨어와 매우 밀접한 관계를 갖음 네트워크 트래픽에 대한 모든 종류의 유용한 정보를 수집 할 수 있게 하는 기능을 제공 . 얼마나 많은 데이터를 전송하고 수신하고 있는지를 아는 것을 위해 데이터를 수집하는 것. IP 어카운팅을 위한 커널 설정. 활성화 할려면 먼저 리눅스 커널에 설정되어있는지 확인한다 . /proc/net/ip_acct 파일이 존재하는지 검사한다 .
E N D
IPAccounting 유닉스 네트워킹 실습 01390112 정명자
IP Accounting의 정의 • 리눅스 방화벽 소프트웨어와 매우 밀접한 관계를 갖음 • 네트워크 트래픽에 대한 모든 종류의 유용한 정보를 수집 할 수 있게 하는 기능을 제공. • 얼마나 많은 데이터를 전송하고 수신하고 있는지를 아는 것을 위해 데이터를 수집하는 것.
IP 어카운팅을 위한 커널 설정 • 활성화 할려면 먼저 리눅스 커널에 설정되어있는지 확인한다. • /proc/net/ip_acct 파일이 존재하는지 검사한다. • 있다면 IP 어카운팅 기능을 지원하지만 없다면 커널을 새로 구축해야 한다. • 커널 2.4 시리즈 neworking options ---> [*] network packet filtering (replaces ipchains)
IP 어카운팅 설정 • 방화벽에서 사용하는 ipfwadm, ipchains, iptables로 설정한다. • ipfwadm으로 ip 어카운팅을 하기 위한 일반적인 문법 # ipfwadm –A [direction] [command] [parameters] • ipchains와 iptables를 위한 일반적인 명령어 문법 # ipchains –A chain rule-specification # iptables –A chain rule-specification • Ip 어카운팅을 위한 룰 지정 매개변수 • ip 방화벽에서 사용하던 것과 동일하다. • 계산하고 합계를 내길 원하는 네트워크 트래픽을 정확하게 정의 하기 위해 사용하는 것이다.
주소에 따른 어카운팅(1) • 가상 맥주 양조장의 두 부서의 연결되어 있는 리눅스 기반 라우터를 생각해보자. 라우터는 이더넷 장치 두개, eth0와 eth1을 가지고 각각 하나의 부서를 연결하고 있다. 그리고 ppp장치인 ppp0는 GMU의 주 캠퍼스에 연결된 고속 직렬 링크를 통해 연결하고 있다. 또한 비용 지불을 목적으로 직렬 링크를 통해 각 부서마다 생성하는 트래픽의 총합을 알기를 원하고, 관리를 목적으로 두 이더넷 사이에서 생성하는 트래픽의 총합을 알려고 한다고 가정해보자.
주소에 따른 어카운팅(3) 인터페이스 주소 ppp0라는 인터페이스를 통해 어느 방향이건 1772.16.3/24의 주소를 발신지 도는 주신지 주소로 가지고 이동하는 모든 데이 터를 계산하라.
주소에 따른 어카운팅(2) • 각 부서에서 얼마나 많은 데이터가 PPP 링크에서 생성되는가? • ipfwadm # ipfwadm –A both –a –w ppp0 –s172.16.3.0/24 –b # ipfwadm –A both –a –w ppp0 –s172.16.4.0/24 –b • ipchains # Ipchains –A input –i ppp0 –d 172.16.3.0/24 # Ipchains –A output –i ppp0 –s 172.16.3.0/24 # Ipchains –A input –i ppp0 –d 172.16.4.0/24 # Ipchains –A output –i ppp0 –s 172.16.4.0/24 • iptables # iptables –A FORWARD –i ppp0 –d 172.16.3.0/24 # iptables –A FORWARD –o ppp0 –s 172.16.3.0/24 # iptables –A FORWARD –i ppp0 –d 172.16.4.0/24 # iptables –A FORWARD –o ppp0 –s 172.16.4.0/24
주소에 따른 어카운팅(4) • 두 부서 사이에 얼마나 많은 데이터가 이동하는가? • ipfwadm • # ipfwadm –a both –a –s 172.16.3.0/24 –D 172.16.4.0/24 –b • ipchains • # ipchains –A forward –s 172.16.3.0/24 –D 172.16.4.0/24 –b • iptables • # iptables –A FORWARD –s 172.16.3.0/24 –d 172.16.4.0/24 • # iptables –A FORWARD –s 172.16.3.0/24 –d 172.16.3.0/24 • 부서 네트워크 중 한 쪽에 발신지 주소를 가지고 다른 쪽의 주소를 목적지 주소로 가진 모든 데이터그램을 계산한다.
서비스 포트에 따른 어카운팅(1) • 어떤 종류의 트래픽이 PPP 링크를 따라 운반되는지? • Ipfwadm을 사용하여 ppp링크로 운반되는 ftp, smtp, www 데이터 양의 통계를 수집한다. • Ipfwadm –A both –a –w ppp0 –p tcp –s 0/0 ftp ftp-data • Ipfwadm –A both –a –w ppp0 –p tcp –s 0/0 smtp • Ipfwadm –A both –a –w ppp0 –p tcp –s 0/0 www • Ipchains 을 사용하여 ppp링크로 운반되는 ftp, smtp, www 데이터 양의 통계를 수집한다. • ipchains –A input –i ppp0 –p tcp –s 0/0 ftp-data:ftp • ipchains –A output –i ppp0 –p tcp –d 0/0 ftp-data:ftp • ipchains –A input –i ppp0 –p tcp –s 0/0 smtp • ipchains –A output –i ppp0 –p tcp –d 0/0 smtp • ipchains –A input –i ppp0 –p tcp –s 0/0 www • ipchains –A output –i ppp0 –p tcp –d 0/0 www
서비스 포트에 따른 어카운팅(2) • iptables를 사용하여 PPP 링크로 운반되는 ftp, smtp, www 데이터 양의 통계를 수집한다. • Iptables –A FORWARD –i ppp0 –m tcp –p tcp --sport ftp-data:ftp • Iptables –A FORWARD –o ppp0 –m tcp –p tcp --dport ftp-data:ftp • Iptables –A FORWARD –i ppp0 –m tcp –p tcp --sport smtp • Iptables –A FORWARD –o ppp0 –m tcp –p tcp --dport smtp • Iptables –A FORWARD –i ppp0 –m tcp –p tcp --sport www • Iptables –A FORWARD –o ppp0 –m tcp –p tcp --dport www
서비스 포트에 대한 어카운팅(3) • FTP, SMTP, 웹트래픽을 필수 트래픽으로, 그 이외의 다른 트래픽은 꼭 필요하지 않는 것으로 묶는다. (필수 트래픽의 비율이 그렇지 않는 트래픽에 대해 얼마인지) # ipfwadm –A both –a –W ppp0 –p tcp –s 0/0 ftp ftp-data smtp www # ipfwadm –A both –a –W ppp0 –p tcp –s 0/0 1:19 22:24 26:79 81:3276 - 두번째 룰이 ftp, ftp-data smtp www를 제외한 포트를 모두 처리한다 # ipchains –N a-essent # ipchains –N a-noness # ipchains –N a-essent –j ACCEPT # ipchains –N a-noness –j ACCEPT # ipchains –A forward –I ppp0 –p tcp –s 0/0 ftp-data:ftp –j a-essent # ipchains –A forward –I ppp0 –p tcp –s 0/0 smtp –j a-essent # ipchains –A forward –I ppp0 –p tcp –s 0/0 www –j a-essent # ipchains –A forward –j a-noness
서비스 포트에 대한 어카운팅(4) - iptables # iptables –N a-essent # iptables –N a-noness # iptables –N a-essent –j ACCEPT # iptables –N a-noness –j ACCEPT # iptables –A forward –I ppp0 –m tcp –p tcp --sport ftp-data:ftp –j a-essent # iptables –A forward –I ppp0 –m tcp –p tcp --sport smtp –j a-essent # iptables –A forward –I ppp0 –m tcp –p tcp --sport www –j a-essent # iptables –A forward –j a-essent
서비스 포트에 대한 어카운팅(5) • 분할 처리 하게되면 첫째 조각을 제외하고 둘째 조각 이후에 대한 정보가 들어있지 않는 문제점 해결을 위한 룰 설정 • #ipfwadm –A both –a –W ppp0 –p tcp –s 0/0 0xffff • 둘째 이후 조각이 정확하게 어떤 포트로 오는지는 알 수 없지만 셀 수 있게 해준다. 분할된 조각에 가짜 포트번호 0xffff를 할당 • #ipchains –A forward -i ppp0 –p tcp –f • #iptables –A FORWARD –i ppp0 –m tcp –p tcp –f • 데이터의 원래 포트에 대해서는 알려주지 않지만 얼만 많은 데이터가 분할되는지 볼 수 있게 한다. 트래픽의 크기를 어카운팅 할수 있다. • -f는 나뉘어진 데이터그램의 첫째 조각(fragment)을 제외한 모든 것에 적용한다.
ICMP 데이터그램의 어카운팅(1) • icmp는 tcp와 udp처럼 포트를 사용하지는 않지만 icmp 메시지 유형을 가지고 있다. • Icmp 메시지를 많이 생성하여 사용자의 네트워크 접근을 악의적으로 방해하는 시도에 대해 보여주는 어카운팅 룰을 집어 넣을 수 있다. • 송수신되는 ping데이터의 크기에 대한 정보를 수집하는 룰 • ipfwadm • # ipfwadm –A both –a –p icmp –s 0/0 8 # ipfwadm –A both –a –p icmp –s 0/0 0 # ipfwadm –A both –a –p icmp –s 0/0 0xff • ipchains • # ipchains –A forward –p icmp –s 0/0 8 # ipchains –A forward –p icmp –s 0/0 0 # ipchains –A forward –p icmp –s 0/0 –f
ICMP 데이터그램의 어카운팅(2) • iptables # iptables –A FORWARD –m icmp –p icmp –sports echo-request # iptables –A FORWARD –m icmp –p icmp –sports echo-reply # iptables –A FORWARD –m icmp –p icmp –f • 첫째 룰은 icmp 데이터그램 ping요청에 관한 정보 수집. 둘째 룰은 icmp 데이터그램 ping응답에 관한 정보 수집. 셋째 룰은 icmp 데이터그램 분할(fragment)에 관한 정보 수집 • 발신지 또는 목적지 주소를 룰에 지정했다면 그것이 네트워크 내부 또는 외부에서 생성된 것인지와 같이 ping이 어디에서 오는지에 관한 정보를 얻을 수 있다.
프로토콜을 통한 어카운팅(1) • ppp0 인터페이스를 통해 흐르는 모든 트래픽이 tcp, udp또는 icmp 트래픽인지를 분석하고, 각각에 대한 적절한 카운터를 갱신할 수 있다. • ipfwadm • #ipfwadm –A both –a –W ppp0 –p tcp –D 0/0 • #ipfwadm –A both –a –W ppp0 –p udp –D 0/0 • #ipfwadm –A both –a –W ppp0 –p icmp –D 0/0 • ipchains • #ipchains –A forward –i ppp0 –p tcp –d 0/0 • #ipchains –A forward –i ppp0 –p udp –d 0/0 • #ipchains –A forward –i ppp0 –p icmp –d 0/0
프로토콜을 통한 어카운팅(2) • iptables • #iptables –A FORWARD –i ppp0 –m tcp –p tcp #iptables –A FORWARD –o ppp0 –m tcp –p tcp #iptables –A FORWARD –i ppp0 –m tcp –p udp #iptables –A FORWARD –o ppp0 –m tcp –p udp #iptables –A FORWARD –i ppp0 –m tcp –p icmp #iptables –A FORWARD –o ppp0 –m tcp –p icmp - 들어오는 흐름과 내보내는 흐름이 구분되어 있다.
IP Accounting 결과 사용(1) • 수집된 어카운팅 데이터와 설정한 어카운팅 룰을 보려면 방화벽 설정 명령어를 사용하여 룰을 나열한다. 각각에 대한 패킷과 바이트 가운터가 출력 결과에 나열된다. • Ipfwadm으로 어카운팅 데이터 나열 • # ipfwadm –A –l IP accouting rules pkts bytes dir prot source destination ports 9833 2345k I/o all 172.16.3.0/24 anywhere n/a 56527 33m I/o all 172.16.4.0/24 anywhere n/a =>각 방향으로 보내는 패킷의 수를 알려준다. –e 옵션으로 확장된 출력 형식을 사용하면 적용할 수 있는 인터페이스명도 같이 출력한다.
IP Accounting 결과 사용(2) • 출력결과에 있는 몇 가지 필드 설명 • dir : 룰을 적용하는 방향. 값에는 in, out또는 두 가지 모두를 가리키는 i/o가 있음 • Prot : 룰을 적용하는 프로토콜. • opt : 실행 시 사용한 옵션의 부호화된 양식. • ifname : 룰을 적용하는 인터페이스명. • ifaddress : 룰을 적용하는 인터페이스 주소. • 확장 옵션을 사용하여 정확한 단위로 수집한 데이터를 표시 • #ipfwadm –A –l –e -x
IP Accounting 결과 사용(3) • ipchains로 어카운팅 데이터 나열 • #ipchains –L –V -v 인자를 사용하면 어카운팅 데이터(패킷과 바이트 카운터)를 표시 • #ipchains –l –v –x -x 인자(확장 출력 모드)를 사용하여 패킷과 바이트 카운터를 정확한 값으로 표시 • iptables로 어카운팅 데이터 나열 • #iptables –L –V ipchains 명령어와 매우 유사하게 동작한다 어카운팅 카운터를 보기위해 룰을 나열하려면 마찬가지로 –v를 사용해야 하며, -x인자를 지정하여 정확한 값이 있는 확장된 형식의 출력을 보여줌.
카운터 리셋 • 어카운팅 데이터를 정기적으로 읽어서 기록하고 다음 어카운팅 기간까지 어카운팅 데이터를 수집하는 것을 시작하기 위해 카운터를 다시 0으로 리셋하면 된다. • 설정 룰 • #ipfwadm –A –z • #ipchains –z • #iptables –z • 어카운팅 데이터를 읽어버리지 않게 하는 룰 • #ipfwadm –A –l –z • #ipchains –l –z • #iptables –l –z –v • 먼저 어카운팅 데이터를 나열하고 그런 다음 카운터를 즉시 0으로 만들고 카운팅을 재시작한다. • cron명령어를 사용하여 스크립트를 정기적으로 실행한다.
룰 세트 내버리기 • 설정한 IP 어카운팅 룰을 모두 내버리게(flush)하는것. • 리부팅할 필요 없이 룰 세트를 완전히 교체하고 싶을 때 유용함. • 룰 설정 • #ipfwadm –A –f • #ipchains –F • #iptables –F * 설정한 IP어카운팅 룰을 개별적으로 제거할 필요 없이 한 번에 모두 제거한다. * Ipchains로 룰 를 내버리는 것은 사용자 정의 체인은 제거되지 않는다. * 단지 그 안의 룰만 제거된다는 점을 주위해야 한다.
어카운팅 데이터 간접 수집 • 이터넷에 연결되어 있다면 전송하는 것 혹은 목적지를 가진 데이터뿐만 아니라 세그먼트의 모든 데이터에 어카운팅 룰을 적용할 수 있다. • IP forwarding을 꺼서 수신하는 데이터그램을 라우팅 하려고 시도하지 않게 해야 한다. • 설정 룰 • #echo 0 >/proc/sys/net/ipv4/ip_forward 머신이 라우터라면 IP포워딩을 꺼버리기 때문에 라우팅을 멈추게 된다. 그러므로 물리적으로 하나의 네트워크 인터페이스가 있는 머신에서 만 설정해야 된다는 것을 주위. • Ifconfig 명령어를 사용하여 이더넷 인터페이스에 promiscuous모드를 켠다.