Marzo 22, 2007SharpKnocking.NetfilterFirewall es el namespace donde están todas las clases que he realizado para interactual con iptables. El siguiente fragmento de código es usado para insertar al principio de la cadena input una regla que redirija todos los paquetes a una cadena llamada SharpKnocking-INPUT donde están las reglas que aceptarín o denegarán el paquete en función de si le hemos dado acceso o no. Es un ejemplo de como usar la librería para alterar las reglas del firewall.
//Create rule for adding a new chain NetfilterRule rule = new NetfilterRule(); //Create new chain command NewChainCommand cmd = new NewChainCommand(); cmd.ChainName = this.chainName; //Set in the rule rule.Command = cmd; //Execute FirewallManager.instance.ApplyRule(rule); //Execute in default table named filter this.ruleSet.ExecRule(rule); //Create insert rule to redirect INPUT packets to our chain rule = new NetfilterRule(); //Create insert command InsertRuleCommand iCmd = new InsertRuleCommand(); iCmd = new InsertRuleCommand(); iCmd.RuleNum = 1; iCmd.ChainName = "INPUT"; rule.Command = iCmd; //Create jump option to redirect to our chain JumpOption jopt = new JumpOption(); jopt.Target = RuleTargets.CustomTarget; jopt.CustomTarget = CustomRuleTargets.UserDefinedChain; jopt.CustomTargetName = this.chainName; //Add to rule rule.Options.Add(jopt); //Execute FirewallManager.instance.ApplyRule(rule); //Execute in default table named filter this.ruleSet.ExecRule(rule); //Create rule rule = new NetfilterRule(); //Create append rule command AppendRuleCommand acmd = new AppendRuleCommand(); acmd.ChainName = this.chainName; //Set in the rule rule.Command = acmd; //Create option to accept loopback traffic InInterfaceOption inOpt = new InInterfaceOption(); inOpt.Interface = "lo"; //Add to rule rule.Options.Add(inOpt); //Create jump option with accept target jopt = new JumpOption(); jopt.Target = RuleTargets.Accept; //Add to rule rule.Options.Add(jopt); //Execute FirewallManager.instance.ApplyRule(rule); //Execute in default table named filter this.ruleSet.ExecRule(rule); //Create rule to accept new or related connections rule = new NetfilterRule(); //Create append rule command acmd = new AppendRuleCommand(); acmd.ChainName = this.chainName; //set in the rule rule.Command = acmd; //Load state extension with -m option MatchExtensionOption meop = new MatchExtensionOption(); meop.Extension = MatchExtensions.State; //Add to rule rule.Options.Add(meop); //The previous option causes the extension to be instantiated //Create jump option to ACCEPT //Execute De tal modo que al ejecutar un programa con ese trozo de código para inicializar las líneas nos quedaría el siguiente conjunto de reglas (muestro la salida del comando iptables-save):
# Generated by iptables-save v1.3.5 on Fri Mar 23 18:06:53 2007 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] : OUTPUT ACCEPT [0:0] :SharpKnocking-INPUT - [0:0] -A INPUT -j SharpKnocking-INPUT -A SharpKnocking-INPUT -i lo -j ACCEPT -A SharpKnocking-INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A SharpKnocking-INPUT -j DROP COMMIT # Completed on Fri Mar 23 18:06:53 2007 Así es como vamos a dejar las reglas del cortafuegos al inicio (también podríamos conservar las existentes e insertar nuestra cadena delante de las existentes). Sobre la marcha podremos ir añadiendo las ips aceptadas antes del drop final de la cadena y puede que incluyamos la opción de insertar nuestrar reglas sin eliminar las existentes.
mangelp | General | 22 Marzo, 10:55am
|
Main
Categorías
Posts Recientes
Archivos de Blog
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||