¿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. Java Rule Engine para Game AI
- 9. ¿TestNG es compatible con @Rule de JUnit4?
- 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. Oracle Create Ver problema
- 17. C# create report programmatically
- 18. Create common ActionResult
- 19. show create view definition
- 20. Scala create List [Int]
- 21. C++ create an parser
- 22. Recursively create directory
- 23. SQL Server create date
- 24. Create TToolbutton runtime
- 25. mysql CREATE USER
- 26. Jquery create object
- 27. create table en postgreSQL
- 28. swing create font
- 29. svnadmin create: Opción esperado
- 30. Django create UserCreationForm personalizado
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