[root@bbuwoo oops-firewall]$ cat /etc/oops-firewall/string.conf
##########################################################################
# STRING MATCH configuration
##########################################################################
#
# 이 섹션은 패킷에 포함되어 있는 문자열을 검색하여 룰을 지정 하도록 한다
#
# 이 섹션을 지정하기 위해서는 iptables 에서 ipt_string 을 지원해 줘야 한
# 다. ipt_string 을 지원하도록 하기 위해서는 README.STRING을 읽어 보도록
# 한다. README.STRING 은 /usr/doc/oops-firewall-version/ 에서 찾을 수 있
# 다.
#
# 스트링 매치를 사용하기 위한 모듈의 위치를 설정한다.
# 형식 module 의 경로
#
# 부팅시 자동으로 모듈로 올라오거나 또는 커널에 탑재했을 경우에는 이 지시
# 자를 설정하지 않는다. 단, rc.local 같은 곳에 insmode 명령을 이용해서 모
# 듈 에 탑재할 경우에는 oops_fireall보다 늦게 올라오므로 이 섹션의 설정이
# 적용이 안될수 있으므로 이런 경우는 oops-firewall이 모듈을 올리도록 여기
# 에 패스를 설정해 주는 것을 권장한다.
#
#STRING_MODULE = /usr/doc/iptables-1.2.6a/ipt_string.o
STRING_MODULE =
이 부분은 ipt_string.o 를 modprobe 로 올릴 수 없을 경우에 해당 경로를
직접 지정하도록 하는 것이다. modprobe ipt_string 으로 모듈을 올릴수
있다면 OOPS Firewall 이 알아서 올리므로 지정을 하지 않는다.
만약 modprobe 로 올리고 싶다면 생성한 ipt_string.o 를
mv ipt_string.o /lib/modules/$(uname -r)/kernel/net/ipv4/netfilter 로
복사를 한 후에 depmod -a 명령을 실행해 주고, modprobe ipt_string 명령
을 실행한 후에, lsmod 명령으로 ipt_string 이 올라와 있는지 확인한다.
#
# STRING MATCH 의 사용여부를 결정한다.
# 형식 1 -> MATCH STRING rule 을 사용
# 0 -> 사용하지 않음
#
USE_STRING_MATCH = 0
STRING_MODUE설정에서 모듈로 만들지 못했거나 또는 커널에 탑재를 못했을
경우에는 이 값을 0 으로 나두기 바란다. 이 설정을 사용하지 않겠다는 의
미이다.
# 패킷에서 체크하여 거부할 문자열을 지정
# 기본으로 CODE_RED를 거부하는 문자열이 지정됨
#
# 형식 TCP_FLAG:PORT:STRING
# TCP_FLAG -> 이 형식은 iptables 의 --tcp-flags 형식을 취한다.
# PORT -> STRING 이 들어오는 포트를 지정한다.
# STRING -> 거부할 문자열을 지정한다.
# IO_PORT -> 들어오는 포트와 나가는 포트를 지정
# sport : start port
# dport : destination port
# IO_PORT 가 지정되지 않은 경우에는 dport 로 자동 지정
# 주의 공백 문자는 + 를 사용하도록 한다
#
STRING_MATCH = ACK+ACK:80:/default.ida?
이 부분은 바로 문자열을 체크하는 부분으로 : 를 구분자로 이용하여 4 부
분을 나뉘게 된다. 첫번째 부분 ACK+ACK 에서 +는 blank 문자를 대신한다.
즉, 적용 되는 값은 ACK ACK 로 적용이 되게 된다. 일단 처음 부분은 TCP
FLAG 를 의미한다. 이는 iptables 의 --tcp-flags 의 형식 대로 지정을 한
다. 이것을 지정하기 위해서는 iptables 의 --tcp-flags 에 대해서 어느정
도 지식이 있어야 한다. 두번째는 체크할 포트번호를 지정한다. 물론 들어
오는 패킷만 해당된다. 마지막 세번째 필드는 체크 할 문자열을 대입 하며
정규표현식은 지원하지 않는다. 또한 이 부분에서도 blank 문자는 + 를 사
용해야 한다. 마지막 필드는 출발지 포트와 목적지 포트를 명시를 하게 된
다. 만약 명시하지 않았을 경우에는 목적지 포트를 의미하게 된다. 이것은
iptables 나 ipchains의 출발지 포트 또는 목적지 포트와 동일하게 사용이
된다.
출발지 포트와 목적지 포트의 설명을 잠시 하자면, 내가 텔넷으로 A서버의
텔넷 데몬에 접속을 한다고 가정을 한다면 내 서버의 포트는 1024 번 이상
의 임의의 포트가 열려 A 서버의 23 번 포트에 접속을 하게 될 것이다.
이 때 출발지 포트는 1024 번 이상의 임의의 포트가 될것이며 목적지 포트
는 A 서버의 23 번 포트가 된다. 이는 반대 입장에서도 마찬가지 이다. 패
킷의 출발점이 어디냐를 기중으로 하여 출발지와 목적지를 구분하게 된다.
출발지와 목적지 포트를 지정할 수 있는 기능은 3.1.0 부터 새로 지원되는
기능으로 이 기능을 이용하면 여러가지 필터링이 가능하다.
# masq 를 사용할 경우 masq 를 이용한 서비스들의 패킷 제어
#
# masq service 를 할 경우에는 위의 체크에서는 걸리지를 않게 된다. 이는
# 위의 체크는 INPUT chain 을 통한 패킷을 제어하는 반면 MASQ packet 들은
# FORWARD chain 을 통해 이루어 지기 때문에 이렇게 분리하여 설정을 한다.
# 기본적인 설정은 위의 STRING_MATCH 와 동일하게 적용이 가능하다.
#
STRING_MASQ_MATCH = ACK+ACK:80:readme.eml:sport
이 기능 역시 3.1.0 부터 추가된 기능으로 OOPS FIREWALL 이 MASQ 의 기능
을 사용할 경우에 MASQ client 로 오가는 패킷들의 문자열을 체크할 수 있
다. 이 기능을 사용함에 있어서는 상당한 network에 관한 이해가 요구된다.
위의 설정은 Nimda virus 에 감염된 페이지를 막는 설정이다. Nimda 의 경
우에는 Nimda 에 감염된 웹페이지 만 봐도 client 들이 감염이 될 수가 있
다. 그러므로 위의 설정을 이용해서 막는다면 일단 Nimda 에 대해서 웹을
통해 감염되는 것은 걱정할 필요가 없을 것이다. 하지만 반대로 Nimda 를
경고하는 기술 문서들(에는 Nimda 가 어떻게 감염을 시키는지 자세히 적어
놓을 경우 readme.eml 이라는 단어가 나오게 될것이다.)을 볼 경우에는
readme.eml 이라는 단어 때문에 패킷이 끊어져 볼 수 없게 된다. 즉, 장단
점이 있다는 얘기이다.
이것을 사용하고 안하고는 관리자의 몫으로 남겨둘 뿐이지만, 필자의 견해
로서는 사용 안하는 것을 더 권장하고 싶다.
설정 방식은 STRING_MATCH 와 동일하다.
[root@bbuwoo oops-firewall]$
|