WvStreams
|
00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Weaver Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * WvIPFirewall is an extremely simple hackish class that handles the Linux 00006 * 2.4 "iptables" firewall. It's okay to create more than one instance 00007 * of this class; they'll co-operate. 00008 * 00009 * They need you to have created the appropriate firewall tables already, 00010 * however, and call them from the right places in the Input and/or Forward 00011 * firewalls. 00012 */ 00013 #ifndef __WVIPFIREWALL_H 00014 #define __WVIPFIREWALL_H 00015 00016 #include "wvinterface.h" 00017 #include "wvstringlist.h" 00018 #include "wvaddr.h" 00019 00020 00021 DeclareWvList(WvIPPortAddr); 00022 class IWvIPFirewall 00023 { 00024 public: 00025 virtual ~IWvIPFirewall() { } 00026 virtual void zap() = 0; 00027 virtual void add_port(const WvIPPortAddr &addr) = 0; 00028 virtual void add_redir(const WvIPPortAddr &src, int dstport) = 0; 00029 virtual void add_redir_all(int dstport) = 0; 00030 virtual void add_redir_port_range(const WvIPPortAddr &src_min, 00031 const WvIPPortAddr &src_max, int dstport) = 0; 00032 virtual void add_proto(WvStringParm proto) = 0; 00033 virtual void add_forward(const WvIPPortAddr &src, const WvIPPortAddr &dst, 00034 bool snat) = 0; 00035 00036 virtual void del_port(const WvIPPortAddr &addr) = 0; 00037 virtual void del_redir(const WvIPPortAddr &src, int dstport) = 0; 00038 virtual void del_redir_all(int dstport) = 0; 00039 virtual void del_redir_port_range(const WvIPPortAddr &src_min, 00040 const WvIPPortAddr &src_max, int dstport) = 0; 00041 virtual void del_proto(WvStringParm proto) = 0; 00042 virtual void del_forward(const WvIPPortAddr &src, const WvIPPortAddr &dst, 00043 bool snat) = 0; 00044 }; 00045 00047 class WvIPFirewall : public IWvIPFirewall 00048 { 00049 class FFwd 00050 { 00051 public: 00052 WvIPPortAddr src; 00053 WvIPPortAddr dst; 00054 bool snat; 00055 00056 FFwd(const WvIPPortAddr &_src, const WvIPPortAddr &_dst, bool _snat) : src(_src), dst(_dst) 00057 { snat = _snat; } 00058 }; 00059 00060 class Redir 00061 { 00062 public: 00063 WvIPPortAddr src; 00064 int dstport; 00065 00066 Redir(const WvIPPortAddr &_src, int _dstport) : src(_src) 00067 { dstport = _dstport; } 00068 }; 00069 00070 class RedirAll 00071 { 00072 public: 00073 int dstport; 00074 00075 RedirAll(int _dstport) 00076 { dstport = _dstport; } 00077 }; 00078 00079 class RedirPortRange 00080 { 00081 public: 00082 WvIPPortAddr src_min; 00083 WvIPPortAddr src_max; 00084 int dstport; 00085 00086 RedirPortRange(const WvIPPortAddr &_src_min, 00087 const WvIPPortAddr &_src_max, int _dstport) 00088 : src_min(_src_min), src_max(_src_max) 00089 { dstport = _dstport; } 00090 }; 00091 00092 DeclareWvList(FFwd); 00093 DeclareWvList(Redir); 00094 DeclareWvList(RedirAll); 00095 DeclareWvList(RedirPortRange); 00096 00097 FFwdList ffwds; 00098 RedirList redirs; 00099 RedirAllList redir_alls; 00100 RedirPortRangeList redir_port_ranges; 00101 00102 WvIPPortAddrList addrs; 00103 WvStringList protos; 00104 00105 WvString port_command(const char *cmd, const char *proto, 00106 const WvIPPortAddr &addr); 00107 WvString redir_command(const char *cmd, 00108 const WvIPPortAddr &src, int dstport); 00109 WvString redir_port_range_command(const char *cmd, 00110 const WvIPPortAddr &src_min, const WvIPPortAddr &src_max, int dstport); 00111 WvString redir_all_command(const char *cmd, int dstport); 00112 WvString proto_command(const char *cmd, const char *proto); 00113 WvString forward_command(const char *cmd, const char *proto, 00114 const WvIPPortAddr &src, 00115 const WvIPPortAddr &dst, bool snat); 00116 WvLog log; 00117 const char *shutup() const 00118 { return ignore_errors ? " >/dev/null 2>/dev/null " : ""; } 00119 00120 public: 00121 WvIPFirewall(); 00122 virtual ~WvIPFirewall(); 00123 00124 static bool enable, ignore_errors; 00125 00126 virtual void zap(); 00127 virtual void add_port(const WvIPPortAddr &addr); 00128 virtual void add_redir(const WvIPPortAddr &src, int dstport); 00129 virtual void add_redir_all(int dstport); 00130 virtual void add_redir_port_range(const WvIPPortAddr &src_min, 00131 const WvIPPortAddr &src_max, int dstport); 00132 virtual void add_proto(WvStringParm proto); 00133 virtual void add_forward(const WvIPPortAddr &src, const WvIPPortAddr &dst, 00134 bool snat); 00135 virtual void del_proto(WvStringParm proto); 00136 virtual void del_port(const WvIPPortAddr &addr); 00137 virtual void del_redir(const WvIPPortAddr &src, int dstport); 00138 virtual void del_forward(const WvIPPortAddr &src, const WvIPPortAddr &dst, 00139 bool snat); 00140 virtual void del_redir_all(int dstport); 00141 virtual void del_redir_port_range(const WvIPPortAddr &src_min, 00142 const WvIPPortAddr &src_max, int dstport); 00143 }; 00144 00145 #endif // __WVIPFIREWALL_H