¿es posible usar iptables para permitir el tráfico iniciado por un "proceso", es decir, utilizando el nombre del proceso? Me gustaría, por ejemplo, permitir todo lo que inicia el comando ping.create iptables rule por proceso/servicio
Respuesta
Parece que propietario módulo iptables es eso lo que quiere. En primer lugar, comprobar si está disponible en su sistema:
iptables -m owner --help
Puede leer más aquí: http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
-m owner --pid-owner PID
Ver http://linuxpoison.blogspot.com/2010/11/how-to-limit-network-access-by-user.html y http://linux.die.net/man/8/iptables
en cuenta que necesita el módulo ipt_owner, como - pid-owner no es compatible con xt_owner.
Por ejemplo (esto es sólo una aproximación)
#!/bin/bash
[email protected] &
iptables -m owner --pid-owner %1 -j REJECT
En realidad, sin embargo, que es mejor usar --uid-propietario y --gid-propietario. Primero, el criterio --pid-owner solo coincide con el pid exacto, lo que significa que su programa podría engendrar fácilmente un proceso hijo que no estaría bloqueado por esta regla. (Al menos no he leído lo contrario). En segundo lugar, iptables (8) advierte que --pid-owner está roto en los sistemas SMP (que pueden aplicarse o no a usted, pero en cualquier caso limita la portabilidad). En tercer lugar, hay una condición de carrera en el script anterior, porque el proceso se inicia antes de que se bloquee. (Si hay una forma de obtener un pid de proceso antes de que comience, entonces nunca lo escuché).
Si hay una forma de obtener un pid de proceso antes de que comience, entonces nunca escuché sobre eso.
Se podría escribir un envoltorio que se bifurca en primer lugar, a continuación, añade la regla y los ejecutivos del proceso (asumiendo el programa que se está ejecutando no se bifurca de nuevo), ya que el PID no se cambia por el ejecutivo (3) llamada.
/* NOTE this contains zero error checking */
int main(int argc, char **argv) {
/* Eat argv[0] the name of the wrapper script */
argv++;
argc--;
pid_t my_pid = getpid();
char *iptables_cmd = NULL;
asprintf(&iptables_cmd, "/sbin/iptables -A INPUT -m owner --pid_owner %d -j ACCEPT", my_pid);
system(iptables_cmd);
execv(argv[0], argv);
}
- 1. error de iptables en android: iptables-save y iptables-restore no funciona
- 2. JUnit Rule TemporaryFolder
- 3. control iptables C++
- 4. Cómo actualizar permanentemente iptables
- 5. .htaccess! -f rule not working
- 6. GBM Rule Generation - Consejo de codificación
- 7. create UIImageView
- 8. ¿TestNG es compatible con @Rule de JUnit4?
- 9. Java Rule Engine para Game AI
- 10. Iptables configurando multipuertos múltiples en una regla
- 11. Mysql show create constraint?
- 12. auto create statistics
- 13. create xml from object
- 14. PHP create anidado directorios
- 15. ¿Puedo usar .Create (cero) en lugar de .Create (Aplicación)
- 16. C# create report programmatically
- 17. Oracle Create Ver problema
- 18. show create view definition
- 19. SQL Server create date
- 20. C++ create an parser
- 21. Jquery create object
- 22. MySQL CREATE FUNCTION
- 23. Create common ActionResult
- 24. create table en postgreSQL
- 25. mysql CREATE USER
- 26. Recursively create directory
- 27. Django create UserCreationForm personalizado
- 28. svnadmin create: Opción esperado
- 29. swing create font
- 30. Create TToolbutton runtime
El propietario solo le permite hacer coincidir el usuario o grupo que posee el proceso, no el nombre del proceso en sí. (El indicador de cmd-owner parece haberse eliminado). –
@MikeLundy: agregue un grupo a su sistema (yo uso 'nonet' yo mismo), luego agregue una regla a su cadena de salida de esta manera:' -A OUTPUT -m owner -gid-owner nonet -j REJECT --reject- con icmp-net-unreachable' Ejecuta el programa que sabes de antemano que deseas bloquear, con sg ('sg nonet" your_prog your_args "'). – Bgs
Si no es compatible, entonces ['control groups'] (https://www.kernel.org/doc/Documentation/cgroup-v1/net_cls.txt) son la solución. Es bastante difícil de configurar, pero hay compatibilidad estándar con kernel. Requiere iptables 1.6 que pueda compilarse manualmente. Voy a publicar una respuesta sobre cómo configurar y etiquetar una aplicación en un cgroup y hacer que iptables lo identifique. – KrisWebDev