firewalld_test.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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. var err error
  19. var fwdChain *ChainInfo
  20. iptable := GetIptable(IPv4)
  21. fwdChain, err = iptable.NewChain("FWD", Filter, false)
  22. if err != nil {
  23. t.Fatal(err)
  24. }
  25. bridgeName := "lo"
  26. err = iptable.ProgramChain(fwdChain, bridgeName, false, true)
  27. if err != nil {
  28. t.Fatal(err)
  29. }
  30. defer fwdChain.Remove()
  31. // copy-pasted from iptables_test:TestLink
  32. ip1 := net.ParseIP("192.168.1.1")
  33. ip2 := net.ParseIP("192.168.1.2")
  34. port := 1234
  35. proto := "tcp"
  36. err = fwdChain.Link(Append, ip1, ip2, port, proto, bridgeName)
  37. if err != nil {
  38. t.Fatal(err)
  39. } else {
  40. // to be re-called again later
  41. OnReloaded(func() { fwdChain.Link(Append, ip1, ip2, port, proto, bridgeName) })
  42. }
  43. rule1 := []string{
  44. "-i", bridgeName,
  45. "-o", bridgeName,
  46. "-p", proto,
  47. "-s", ip1.String(),
  48. "-d", ip2.String(),
  49. "--dport", strconv.Itoa(port),
  50. "-j", "ACCEPT",
  51. }
  52. if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) {
  53. t.Fatal("rule1 does not exist")
  54. }
  55. // flush all rules
  56. fwdChain.Remove()
  57. reloaded()
  58. // make sure the rules have been recreated
  59. if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) {
  60. t.Fatal("rule1 hasn't been recreated")
  61. }
  62. }
  63. func TestPassthrough(t *testing.T) {
  64. rule1 := []string{
  65. "-i", "lo",
  66. "-p", "udp",
  67. "--dport", "123",
  68. "-j", "ACCEPT",
  69. }
  70. iptable := GetIptable(IPv4)
  71. if firewalldRunning {
  72. _, err := Passthrough(Iptables, append([]string{"-A"}, rule1...)...)
  73. if err != nil {
  74. t.Fatal(err)
  75. }
  76. if !iptable.Exists(Filter, "INPUT", rule1...) {
  77. t.Fatal("rule1 does not exist")
  78. }
  79. }
  80. }