firewalld_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. //go:build linux
  2. // +build linux
  3. package iptables
  4. import (
  5. "net"
  6. "strconv"
  7. "testing"
  8. )
  9. func TestFirewalldInit(t *testing.T) {
  10. if !checkRunning() {
  11. t.Skip("firewalld is not running")
  12. }
  13. if err := firewalldInit(); err != nil {
  14. t.Fatal(err)
  15. }
  16. }
  17. func TestReloaded(t *testing.T) {
  18. iptable := GetIptable(IPv4)
  19. fwdChain, err := iptable.NewChain("FWD", Filter, false)
  20. if err != nil {
  21. t.Fatal(err)
  22. }
  23. err = iptable.ProgramChain(fwdChain, bridgeName, false, true)
  24. if err != nil {
  25. t.Fatal(err)
  26. }
  27. defer fwdChain.Remove()
  28. // copy-pasted from iptables_test:TestLink
  29. ip1 := net.ParseIP("192.168.1.1")
  30. ip2 := net.ParseIP("192.168.1.2")
  31. const port = 1234
  32. const proto = "tcp"
  33. err = fwdChain.Link(Append, ip1, ip2, port, proto, bridgeName)
  34. if err != nil {
  35. t.Fatal(err)
  36. } else {
  37. // to be re-called again later
  38. OnReloaded(func() { fwdChain.Link(Append, ip1, ip2, port, proto, bridgeName) })
  39. }
  40. rule1 := []string{
  41. "-i", bridgeName,
  42. "-o", bridgeName,
  43. "-p", proto,
  44. "-s", ip1.String(),
  45. "-d", ip2.String(),
  46. "--dport", strconv.Itoa(port),
  47. "-j", "ACCEPT",
  48. }
  49. if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) {
  50. t.Fatal("rule1 does not exist")
  51. }
  52. // flush all rules
  53. fwdChain.Remove()
  54. reloaded()
  55. // make sure the rules have been recreated
  56. if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) {
  57. t.Fatal("rule1 hasn't been recreated")
  58. }
  59. }
  60. func TestPassthrough(t *testing.T) {
  61. if !firewalldRunning {
  62. t.Skip("firewalld is not running")
  63. }
  64. rule1 := []string{
  65. "-i", "lo",
  66. "-p", "udp",
  67. "--dport", "123",
  68. "-j", "ACCEPT",
  69. }
  70. _, err := Passthrough(Iptables, append([]string{"-A"}, rule1...)...)
  71. if err != nil {
  72. t.Fatal(err)
  73. }
  74. if !GetIptable(IPv4).Exists(Filter, "INPUT", rule1...) {
  75. t.Fatal("rule1 does not exist")
  76. }
  77. }