firewalld_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) {
  52. t.Fatal("rule1 does not exist")
  53. }
  54. // flush all rules
  55. fwdChain.Remove()
  56. reloaded()
  57. // make sure the rules have been recreated
  58. if !iptable.Exists(fwdChain.Table, fwdChain.Name, rule1...) {
  59. t.Fatal("rule1 hasn't been recreated")
  60. }
  61. }
  62. func TestPassthrough(t *testing.T) {
  63. rule1 := []string{
  64. "-i", "lo",
  65. "-p", "udp",
  66. "--dport", "123",
  67. "-j", "ACCEPT"}
  68. iptable := GetIptable(IPv4)
  69. if firewalldRunning {
  70. _, err := Passthrough(Iptables, append([]string{"-A"}, rule1...)...)
  71. if err != nil {
  72. t.Fatal(err)
  73. }
  74. if !iptable.Exists(Filter, "INPUT", rule1...) {
  75. t.Fatal("rule1 does not exist")
  76. }
  77. }
  78. }