2009-08-28 14 views
11

Potrzebuję kontrolować ruch przychodzący i wychodzący do/z Linuxa z poziomu programu C++. Mógłbym zadzwonić pod numer iptables z mojego programu, ale wolę wyciąć środkowego człowieka i uzyskać dostęp do funkcji API jądra.iptables C++ control

Uważam, że muszę użyć libnfnetlink, jednak nie udało mi się znaleźć dokumentacji interfejsu API ani przykładowych programów.

Reguły, które muszę zbudować, są dość proste - takie rzeczy jak upuszczanie pakietów z portem docelowym równym X itd. NIE mam zamiaru pisać pełnej aplikacji firewall.

Czy ktoś może zaproponować lepsze podejście lub podać link do niektórych dokumentów lub przykładowych aplikacji? Wolę unikać czytania kodu iptables, ale chyba nie będę musiał, jeśli nie znajdę lepszych zasobów.

+0

To jest dupę http://stackoverflow.com/questions/109553/how-can- i-programatycznie-zarządzaj-iptables-rules-on-the-fly – Claris

+0

Jeśli martwisz się o obciążenie popen/vfork, możesz użyć innego procesu, aby upakować wszystkie zmiany iptables i zatwierdzić je raz na jakiś czas za pomocą iptables-restore. – anttir

Odpowiedz

9

Rok temu miałem ten sam wymóg i sprawdziłem. Ale po skontaktowaniu się z kilkoma facetami z kernela open source, to właśnie poznałem -

Interfejsy API iptables jądra nie są eksternalizowane, co oznacza, że ​​nie są udokumentowanymi API. W tym sensie interfejsy API mogą zmieniać się w każdej chwili. Powinny być używane tylko przez narzędzie iptables. nie powinny być używane przez twórców aplikacji.

-satish

+3

Jak powiedział Mark, nikt nie może powstrzymać cię przed użyciem, ponieważ jest to open source. Należy jednak zachować ostrożność, ponieważ interfejsy API mogą się zmieniać w razie potrzeby. Następnie aplikacja musi zająć się zmianami w zachowaniu interfejsów API. – Satish

+0

+1 ciekawe informacje. Myślę, że Thomi zrobi dużo popen ("iptables ...") – neuro

+0

bardzo interesujące - dziękuję za informację! – Thomi

0

Dlaczego nie zdobyć źródła iptables i zrobić to tak, jak oni to robią? Ponieważ jest to open source ...

+3

, ponieważ potrzebuję stabilnego interfejsu - nie takiego, który może się zmienić w każdej chwili. – Thomi

1

Nie powinno normalnie trzeba zmienić zasady tabele IP regularnie (czyli często przy starcie). Dlatego wywołanie/sbin/iptables powinno być w porządku.

Jeśli próbujesz to zrobić, to prawdopodobnie musisz spojrzeć na alternatywny moduł dopasowujący lub docelowy, który zawiera jego własną inteligencję, lub użyć NFQUEUE do kolejkowania pakietów do programu przestrzeni użytkownika, który może podejmować własne decyzje na podstawie o kryteriach, które mogą zmieniać się tak często, jak się podoba (uwaga na wysyłanie zbyt wielu pakietów do przestrzeni użytkownika, jest to potencjalny problem z wydajnością)