2009-08-28 7 views
11

C++ 프로그램 내에서 리눅스 박스로 /부터 인바운드 및 아웃 바운드 트래픽을 제어해야합니다. 내 프로그램 내에서 iptables라고 부를 수는 있지만 중간 사람을 잘라 내고 커널 API 함수에 직접 액세스하고 싶습니다.iptables C++ 컨트롤

나는 libnfnetlink을 사용할 필요가 있다고 생각하지만, API 문서 또는 예제 프로그램을 찾을 수 없었습니다.

내가 구축해야하는 규칙은 상당히 간단합니다. 대상 포트가 X와 같은 패킷을 버리는 것과 같은 것입니다. 전체 방화벽 응용 프로그램을 작성하지는 않습니다.

누구나 더 나은 접근 방식을 제안하거나 일부 문서 또는 예제 응용 프로그램에 대한 링크를 제공 할 수 있습니까? 차라리 iptables 코드를 읽는 것을 피할 것이지만 더 나은 리소스를 찾을 수 없다면 내가해야 할 것 같습니다.

+0

이것은 http://stackoverflow.com/questions/109553/how-can- i-programatically-manage-iptables-rules-on-the-fly – Claris

+0

popen/vfork 오버 헤드가 걱정된다면 다른 프로세스를 사용하여 모든 iptables 변경 사항을 쌓아 올리고 iptables-restore를 사용하여 한 번씩 커밋 할 수 있습니다. – anttir

답변

9

나는 다시 같은 요구 사항을 가지고 있었고 주위를 조사했다. 그러나 일부 오픈 소스 커널 사용자에게 연락을 한 후 이것이 내가 알게 된 이유입니다. -

iptables의 커널 API는 외부화되지 않았기 때문에 문서화 된 API가 아닙니다. 이러한 점에서 API는 언제든지 바뀔 수 있습니다. iptables 도구에서만 사용해야합니다. 응용 프로그램 개발자가 사용해서는 안됩니다.

-satish

당신은 일반적으로 정기적으로 IP 테이블 규칙을 변경할 필요가 없습니다
+3

Mark가 말했듯이 누구도 오픈 소스이므로 사용하지 못하게 할 수 있습니다. 그러나 필요가 발생할 때 API가 변경 될 수 있으므로주의해야합니다. 그런 다음 애플리케이션은 API 동작의 변경 사항을 처리해야합니다. – Satish

+0

+1 흥미로운 정보. Thomi는 많은 popen ("iptables ...")을 수행 할 것입니다. – neuro

+0

매우 흥미 롭습니다. 정보를 제공해 주셔서 감사합니다! – Thomi

0

왜 iptables에 소스를 가져다가 그들이하는 것처럼하지 않습니까? 이후 오픈 소스 ....

+3

안정적인 인터페이스가 필요하기 때문에 언제든지 변경할 수있는 인터페이스가 아닙니다. – Thomi

1

(즉, 자주 실행시). 따라서/sbin/iptables를 호출하는 것이 좋습니다.

당신이 이것을하려한다면 아마도 자신의 인텔리전스가있는 대체 일치 또는 대상 모듈을 보거나 NFQUEUE를 사용하여 자체 결정을 기반으로 사용자 공간 프로그램에 패킷을 대기열에 넣어야합니다 너무 자주 변경 될 수있는 기준 (사용자 공간에 너무 많은 패킷을 보내는 것에주의하십시오. 잠재적 인 성능 문제입니다)