| 
									
										
										
										
											2024-02-29 23:07:40 -03:00
										 |  |  | {% extends 'base.html' %} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {% block page_custom_head %} | 
					
						
							|  |  |  | <style> | 
					
						
							|  |  |  |     .first-line-container { | 
					
						
							|  |  |  |         display: flex; | 
					
						
							|  |  |  |         align-items: center; /* Centraliza os itens verticalmente */ | 
					
						
							|  |  |  |         width: 100%; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       .more-link { | 
					
						
							|  |  |  |         margin-left: auto; /* Empurra o link para a direita */ | 
					
						
							|  |  |  |         text-decoration: none; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       .more-text { | 
					
						
							|  |  |  |         display: none; | 
					
						
							|  |  |  |         width: 100%; | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2024-03-01 19:08:32 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |       .fw_automatic_rule { | 
					
						
							|  |  |  |         display: none; | 
					
						
							|  |  |  |       } | 
					
						
							| 
									
										
										
										
											2024-02-29 23:07:40 -03:00
										 |  |  |        | 
					
						
							|  |  |  | </style> | 
					
						
							|  |  |  | {% endblock%} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {% block content %} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <div class="card card-primary card-outline"> | 
					
						
							|  |  |  |     <div class="card-body"> | 
					
						
							|  |  |  |         {% include "firewall/firewall_nav_tabs.html" %} | 
					
						
							|  |  |  |         <div class="tab-content" id="custom-content-below-tabContent"> | 
					
						
							|  |  |  |             <div class="tab-pane fade show active" id="custom-content-below-home" role="tabpanel" aria-labelledby="custom-content-below-home-tab"> | 
					
						
							|  |  |  |                 <table class="table table-striped table-hover"> | 
					
						
							|  |  |  |                     <thead> | 
					
						
							|  |  |  |                         <th>#</th> | 
					
						
							|  |  |  |                         <th><i class="fas fa-info-circle"></i></th> | 
					
						
							|  |  |  |                         <th>In</th> | 
					
						
							|  |  |  |                         <th>Out</th> | 
					
						
							|  |  |  |                         <th>Source</th> | 
					
						
							|  |  |  |                         <th>Destination</th> | 
					
						
							|  |  |  |                         <th>Protocol</th> | 
					
						
							|  |  |  |                         <th>Port</th> | 
					
						
							|  |  |  |                         <th>State</th> | 
					
						
							|  |  |  |                         <th>Action</th> | 
					
						
							| 
									
										
										
										
											2024-03-01 19:08:32 -03:00
										 |  |  |                         <th><i class="far fa-edit"></i></th> | 
					
						
							| 
									
										
										
										
											2024-02-29 23:07:40 -03:00
										 |  |  |                     </thead> | 
					
						
							|  |  |  |                     <tbody> | 
					
						
							| 
									
										
										
										
											2024-03-05 08:39:01 -03:00
										 |  |  |                             <tr class="fw_automatic_rule">   | 
					
						
							|  |  |  |                               <td>-</td> | 
					
						
							|  |  |  |                               <td><i class="fas fa-info-circle" title="Automatic rule: Allow established/related traffic"></i></td> | 
					
						
							|  |  |  |                               <td></td> | 
					
						
							|  |  |  |                               <td></td> | 
					
						
							|  |  |  |                               <td></td> | 
					
						
							|  |  |  |                               <td></td> | 
					
						
							|  |  |  |                               <td>all</td> | 
					
						
							|  |  |  |                               <td></td> | 
					
						
							|  |  |  |                               <td>Related<br> | 
					
						
							|  |  |  |                                   Established | 
					
						
							|  |  |  |                               </td> | 
					
						
							|  |  |  |                               <td>ACCEPT</td> | 
					
						
							|  |  |  |                               <td></td> | 
					
						
							|  |  |  |                             </tr> | 
					
						
							| 
									
										
										
										
											2024-03-01 19:08:32 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |                         {% for rule in port_forward_list %} | 
					
						
							|  |  |  |                             {% if rule.add_forward_rule and current_chain == 'forward' %} | 
					
						
							|  |  |  |                                 <tr class="fw_automatic_rule">   | 
					
						
							|  |  |  |                                   <td>-</td> | 
					
						
							|  |  |  |                                   <td><i class="fas fa-info-circle" title="Port forward automatic rule. {{ rule.description|default_if_none:'' }}"></i></td> | 
					
						
							|  |  |  |                                   <td>{{ firewall_settings.wan_interface }}</td> | 
					
						
							|  |  |  |                                   <td>wg{{ rule.wireguard_instance.instance_id }}</td> | 
					
						
							|  |  |  |                                   <td></td> | 
					
						
							|  |  |  |                                   <td> | 
					
						
							|  |  |  |                                     {% if rule.ip_address %} | 
					
						
							|  |  |  |                                       {{ rule.ip_address }} | 
					
						
							|  |  |  |                                     {% elif rule.peer %} | 
					
						
							|  |  |  |                                       {{ rule.peer }} | 
					
						
							|  |  |  |                                     {% endif %} | 
					
						
							|  |  |  |                                   </td> | 
					
						
							|  |  |  |                                   <td>{{ rule.get_protocol_display }}</td> | 
					
						
							|  |  |  |                                   <td>{{ rule.port }}</td> | 
					
						
							|  |  |  |                                   <td></td> | 
					
						
							|  |  |  |                                   <td>ACCEPT</td> | 
					
						
							|  |  |  |                                   <td></td> | 
					
						
							|  |  |  |                                 </tr> | 
					
						
							|  |  |  |                             {% elif rule.masquerade_source and current_chain == 'postrouting' %} | 
					
						
							|  |  |  |                               <tr class="fw_automatic_rule">   | 
					
						
							|  |  |  |                                 <td>-</td> | 
					
						
							|  |  |  |                                 <td><i class="fas fa-info-circle" title="Port forward automatic rule. {{ rule.description|default_if_none:'' }}"></i></td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                                 <td>wg{{ rule.wireguard_instance.instance_id }}</td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                                 <td> | 
					
						
							|  |  |  |                                   {% if rule.ip_address %} | 
					
						
							|  |  |  |                                     {{ rule.ip_address }} | 
					
						
							|  |  |  |                                   {% elif rule.peer %} | 
					
						
							|  |  |  |                                     {{ rule.peer }} | 
					
						
							|  |  |  |                                   {% endif %} | 
					
						
							|  |  |  |                                 </td> | 
					
						
							|  |  |  |                                 <td>{{ rule.get_protocol_display }}</td> | 
					
						
							|  |  |  |                                 <td>{{ rule.port }}</td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                                 <td>MASQUERADE</td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                               </tr> | 
					
						
							|  |  |  |                             {% endif %} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         {% endfor %} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-29 23:07:40 -03:00
										 |  |  |                         {% for rule in firewall_rule_list %} | 
					
						
							|  |  |  |                              | 
					
						
							|  |  |  |                             <tr> | 
					
						
							|  |  |  |                                 <td style="width: 1%; white-space: nowrap;">{{ rule.sort_order }}</td> | 
					
						
							|  |  |  |                                 <td style="width: 1%; white-space: nowrap;">{% if rule.description %}<i class="fas fa-info-circle" title="{{ rule.description }}"></i>{% endif %}</td> | 
					
						
							| 
									
										
										
										
											2024-03-01 10:41:00 -03:00
										 |  |  |                                 <td>{{ rule.in_interface|default_if_none:'' }}</td> | 
					
						
							|  |  |  |                                 <td>{{ rule.out_interface|default_if_none:'' }}</td> | 
					
						
							| 
									
										
										
										
											2024-02-29 23:07:40 -03:00
										 |  |  |                                 <td> | 
					
						
							|  |  |  |                                     {% if rule.source_ip %}{% if rule.not_source %}<span title="Not source">!</span> {% endif %}{{ rule.source_ip }}/{{ rule.source_netmask }}<br>{% endif%} | 
					
						
							|  |  |  |                                     {% for peer in rule.source_peer.all %}{% if rule.not_source %}<span title="Not source">!</span> {% endif %}{{ peer }}{% if rule.source_peer_include_networks %} <span title="Include peer networks">+</span>{% endif %}<br>{% endfor %} | 
					
						
							|  |  |  |                  | 
					
						
							|  |  |  |                                 </td> | 
					
						
							|  |  |  |                                 <td> | 
					
						
							|  |  |  |                                     {% if rule.destination_ip %}{% if rule.not_destination %}<span title="Not destination">!</span> {% endif %}{{ rule.destination_ip }}/{{ rule.destination_netmask }}<br>{% endif%} | 
					
						
							|  |  |  |                                     {% for peer in rule.destination_peer.all %}{% if rule.not_destination %}<span title="Not destination">!</span> {% endif %}{{ peer }}{% if rule.destination_peer_include_networks %} <span title="Include peer networks">+</span>{% endif %}<br>{% endfor %} | 
					
						
							|  |  |  |                                 </td> | 
					
						
							|  |  |  |                  | 
					
						
							| 
									
										
										
										
											2024-03-05 09:23:47 -03:00
										 |  |  |                                 <td>{{ rule.get_protocol_display|default_if_none:'all' }}</td> | 
					
						
							| 
									
										
										
										
											2024-03-01 10:41:00 -03:00
										 |  |  |                                 <td>{{ rule.destination_port|default_if_none:'' }}</td> | 
					
						
							| 
									
										
										
										
											2024-02-29 23:07:40 -03:00
										 |  |  |                                 <td> | 
					
						
							|  |  |  |                                     {% if rule.state_new %}{% if rule.not_state %}<span title="Not state">! </span>{% endif %}New<br>{% endif %} | 
					
						
							|  |  |  |                                     {% if rule.state_related %}{% if rule.not_state %}<span title="Not state">! </span>{% endif %}Related<br>{% endif %} | 
					
						
							|  |  |  |                                     {% if rule.state_established %}{% if rule.not_state %}<span title="Not state">! </span>{% endif %}Established<br>{% endif %} | 
					
						
							|  |  |  |                                     {% if rule.state_invalid %}{% if rule.not_state %}<span title="Not state">! </span>{% endif %}Invalid<br>{% endif %} | 
					
						
							|  |  |  |                                     {% if rule.state_untracked %}{% if rule.not_state %}<span title="Not state">! </span>{% endif %}Untracked<br>{% endif %} | 
					
						
							|  |  |  |                                 </td> | 
					
						
							|  |  |  |                                 <td>{{ rule.get_rule_action_display }}</td> | 
					
						
							|  |  |  |                                 {% comment%} | 
					
						
							|  |  |  |                                 <td>{{ rule. }}</td> | 
					
						
							|  |  |  |                                 {% endcomment %} | 
					
						
							|  |  |  |                                 <td style="width: 1%; white-space: nowrap;"> | 
					
						
							|  |  |  |                                     <a href="/firewall/manage_firewall_rule/?uuid={{ rule.uuid }}" ><i class="far fa-edit"></i></a> | 
					
						
							|  |  |  |                                 </td> | 
					
						
							|  |  |  |                             </tr> | 
					
						
							|  |  |  |                         {% endfor %} | 
					
						
							|  |  |  |                  | 
					
						
							| 
									
										
										
										
											2024-03-01 19:08:32 -03:00
										 |  |  |                         {% if current_chain == 'forward' %} | 
					
						
							|  |  |  |                         {% for wireguard_instance in wireguard_instances %} | 
					
						
							|  |  |  |                             <tr class="fw_automatic_rule"> | 
					
						
							|  |  |  |                               <td>-</td> | 
					
						
							|  |  |  |                               <td><i class="fas fa-info-circle" title="Automatic Rule: Firewall Settings Peer to Peer traffic"></i></td> | 
					
						
							|  |  |  |                               <td>wg{{ wireguard_instance.instance_id }}</td> | 
					
						
							|  |  |  |                               <td>wg{{ wireguard_instance.instance_id }}</td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                                 <td> | 
					
						
							|  |  |  |                                   {% if firewall_settings.allow_peer_to_peer %} | 
					
						
							|  |  |  |                                     ACCEPT | 
					
						
							|  |  |  |                                   {% else %} | 
					
						
							|  |  |  |                                     REJECT | 
					
						
							|  |  |  |                                   {% endif %} | 
					
						
							|  |  |  |                                 </td> | 
					
						
							|  |  |  |                                 <td></td> | 
					
						
							|  |  |  |                             </tr> | 
					
						
							|  |  |  |                         {% endfor %} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                         <tr class="fw_automatic_rule"> | 
					
						
							|  |  |  |                           <td>-</td> | 
					
						
							|  |  |  |                           <td><i class="fas fa-info-circle" title="Automatic Rule: Firewall Settings Instance to Instance"></i></td> | 
					
						
							|  |  |  |                           <td>wg+</td> | 
					
						
							|  |  |  |                           <td>wg+</td> | 
					
						
							|  |  |  |                             <td></td> | 
					
						
							|  |  |  |                             <td></td> | 
					
						
							|  |  |  |                             <td></td> | 
					
						
							|  |  |  |                             <td></td> | 
					
						
							|  |  |  |                             <td></td> | 
					
						
							|  |  |  |                             <td>{% if firewall_settings.allow_instance_to_instance %}ACCEPT{% else %}REJECT{% endif %}</td> | 
					
						
							|  |  |  |                             <td></td> | 
					
						
							|  |  |  |                         </tr> | 
					
						
							|  |  |  |                         {% endif %} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-29 23:07:40 -03:00
										 |  |  |                     </tbody> | 
					
						
							|  |  |  |                 </table> | 
					
						
							|  |  |  |                  | 
					
						
							| 
									
										
										
										
											2024-03-01 00:25:45 -03:00
										 |  |  |                 <a href="/firewall/manage_firewall_rule/?chain={{ current_chain }}" class='btn btn-primary'>Create Firewall Rule</a> | 
					
						
							| 
									
										
										
										
											2024-03-01 16:32:14 -03:00
										 |  |  |                 <a href="/firewall/firewall_settings/?chain={{ current_chain }}" class='btn btn-outline-primary'>Firewall Settings</a> | 
					
						
							| 
									
										
										
										
											2024-03-01 19:08:32 -03:00
										 |  |  |                 <a class='btn btn-outline-primary' onclick=$('.fw_automatic_rule').slideToggle();>Display automatic rules</a> | 
					
						
							| 
									
										
										
										
											2024-02-29 23:07:40 -03:00
										 |  |  |             </div> | 
					
						
							|  |  |  |         </div> | 
					
						
							|  |  |  |     </div> | 
					
						
							|  |  |  | </div> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {% endblock %} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {% block custom_page_scripts %} | 
					
						
							|  |  |  | <script> | 
					
						
							|  |  |  |     document.addEventListener("DOMContentLoaded", function() { | 
					
						
							|  |  |  |         document.querySelectorAll('td').forEach(function(td) { | 
					
						
							|  |  |  |           let brCount = (td.innerHTML.match(/<br>/g) || []).length; | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |           if (brCount >= 2) { | 
					
						
							|  |  |  |             let contentParts = td.innerHTML.split('<br>'); | 
					
						
							|  |  |  |             // Mantém a estrutura do contêiner com o texto e o link "More" | 
					
						
							|  |  |  |             let firstLineContainer = `<div class="first-line-container">${contentParts[0]}<a href="#" class="more-link">more</a></div>`; | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |             td.innerHTML = firstLineContainer + | 
					
						
							|  |  |  |                            '<span class="more-text" style="display: none;">' + | 
					
						
							|  |  |  |                            contentParts.slice(1).join('<br>') + '</span>'; | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |         document.querySelectorAll('.more-link').forEach(function(link) { | 
					
						
							|  |  |  |           link.addEventListener('click', function(e) { | 
					
						
							|  |  |  |             e.preventDefault(); // Impede a ação padrão do link | 
					
						
							|  |  |  |             let moreText = this.parentNode.nextElementSibling; // Seleciona o span corretamente | 
					
						
							|  |  |  |             if (moreText.style.display === "none") { | 
					
						
							|  |  |  |               moreText.style.display = "inline"; | 
					
						
							|  |  |  |               this.textContent = "less"; | 
					
						
							|  |  |  |             } else { | 
					
						
							|  |  |  |               moreText.style.display = "none"; | 
					
						
							|  |  |  |               this.textContent = "more"; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |           }); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {% endblock %} |