BBUWOO'S [ LIKE UNIX ] WORLD Home > Lecture > Firewall > Firewall-6  

HOME
WHAT's BBUWOO?
LInux AnNyung
Open Source
    GitHUB
    GitHUB (for PHP)
LECTURE
MINI LECTURE
QnA BOARD
ENGLISH POEM


WARNNING

강좌의 모든 권리는 본인 김정균에게 있으며 이 강좌를 상업적 목적 으로 이용
하거나 다른 곳으로 옮길시에는 본인의 허락이 있어야 한다. 이글의 가장 최신글은
http://oops.org 에서 확인할수 있다.



OOPS Firewall v7



이 기능은 5.0.0 부터 제거되었다. strings 확장을 사용하는 것 보다는 l7-layer 확장을 사
용하는 것이 훨씬 효율적이기 때문이다. strings 확장을 사용하고 싶다면, modules.conf 에
string 를 등록하고, user.conf 에 직접 룰을 작성하도록 한다.

하단은 참고를 위해 남겨 놓는다.



string.conf 는 패킷에 들어 있는 문자열을 체크하여 패킷을 받아 들일 것인지 아닌지 여부
를 조절할 수 있다. 이 부분은 이전 버젼에서 filter.conf 에서 제공하던 기능을 좀더 세분
화 하여 강력하게 설정을 할 수 있도록 3.1.0 버젼에서 독립적인 설정 파일로 분리가 된 것
이다.

일단 이 기능을 사용하기 위해서는 KERNEL 과 iptabels 에서 ipt_string 에 관한 기능이 지
원이 되어야 한다.

string match 는 iptables 의 patch-o-matics 를 이용하여 모듈을 빌드하여야 한다.

본인이 패키징을 한 iptables 를 설치했다면, /usr/share/doc/iptables 에 빌드할 수 있는
방법을 제공해 놓았으니 참고하기 바란다.

개인적으로 이 기능은 별로 추천을 하지 않는다. 설정을 잘못하면 쓸데없이 세션을 잡고선
놔주지 않을 수가 있기 때문이다.


Hanterm - cat /etc/oops-firewall/string.conf

 [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]$


다음은 oops-firewall 의 구동을 어떻게 하는지에 대해서 알아 보겠다.


>> 이전 : OOPS Firewall Port Forwarding 설정
>> 다음 : OOPS Firewall 고급 설정


    



 Home > Lecture > Firewall > Firewall-6

Copyright 1997-2024 JoungKyun Kim 
LAST MODIFIED: 2017/01/18