Name : BETA-TESTERS
Project name : ZW3B-API-BETA-TESTERS
Authorized. - 200 - Client API Name and Origin Wildcard OK
Firewall ICMPv6 - IPv6 : Pare-feu GNU/Linux
NdM : 2024/10/02 - Ajout de la fonction ipv6_ula() et nat_v6()
NdM : 2024/03/24 - Modification de la fonction ipv6_strongswan()
NdM : 2023/07/01 - Ajout de la fonction server_dns()
Je vais d'écrire comment-faire un pare-feu IPv6 - ICMPv6.
Installer les paquets qui sont des logiciels/commandes réseaux IPv6.
Script avec 1 ligne
001apt install iputils-ping dnsutils net-tools whois ipv6toolkit thc-ipv6 ipv6pref
Stéphane Huc a changé son nom de domaine - Le nouveau est : http://doc.huc.fr.eu.org
Il nous a créé une fonction pour filtrer les paquets ICMPv6 depuis IPtables pour les requetes des routeurs : c'est la fonction icmpv6_huc()
.
Je vous ai concocté un script firewall-ipv6.sh
ici avec quelques lignes supplémentaires comme le forward entre les cartes et autres :
J'ai ajouté une fonction icmpv6_limit()
pour la protection à 1 ping/seconde par adresse IPv6::/128 (--icmpv6-type 128/0
que Stéphane Bortzmeyer nous expliquer (ici et là ) :) Au dessus de 1 ping par seconde (ICMPv6 echo-request) on DROP l'explosion de PING, et cela par une seule IPv6 source (--hashlimit-srcmask 128
).
NdMoi-même : Il faut lancer/executer la fonction en dessous de (pour qu'elle soit lancer après) la fonction icmpv6_huc
pour que la règle ip6tables -I INPUT -p icmpv6 ... -j DROP
soit au dessus de la chaîne aICMPs ;)
Il faut autoriser les echo-request
et echo-reply
en -j ACCEPT
dans la chaine aICMPs
de Stéphane Huc sinon on est limité(e) à un ping par seconde pour tout le monde qui pourait pinguer l'IPv6 (la même adresse IPv6).
Puis c'est OKay çà PING et çà DROP comme on veut - De la machine elle-même et de l'extérieur ;)
Script avec 543 lignes
001#!/bin/bash 002### BEGIN INIT INFO 003# Provides: firewall-ipv6 004# Required-Start: $remote_fs $syslog 005# Required-Stop: $remote_fs $syslog 006# Default-Start: 2 3 4 5 007# Default-Stop: 0 1 6 008# Short-Description: Start daemon at boot time 009# Description: Enable service provided by daemon. 010### END INIT INFO 011#####-------------------------- VARIABLES ----------------------------###### 012 013# chemin commande iptables 014IP6TABLE="/sbin/ip6tables" 015 016# interface reseau 017LOOP_IF="lo" 018 019#WAN_IP="2607:5300:60:9389::1" 020 021WAN_IF="vmbr0" 022VM1_IF="vmbr1" 023 024#CT_DNS="fc01::10:10:0:1" 025#CT_WEB="fc01::10:10:0:10" 026 027# Network and IPs 028#SUBNETPREFIX="2607:5300:0060:9389::/64" 029 030# port du service ssh 031port_ssh="22" 032 033# port du service rsync 034port_rsync="873" 035 036# ports tcp et udp a ouvrir 037TCP_OK="514 4949" # SYSLOG MUNIN 038UDP_OK="123 161 514 547" # NTP SNMP SYSLOG DHCP 039 040# ip qui ont acces en ssh au serveur 041SSH_OK="2001:0bc8:25bb:ff00::/56" 042 043# ip accedant au serveur en rsync 044RSYNC_OK="2001:0bc8:25bb:ff00::/56" 045 046##### 047# on fixe les sysctl 048##### 049function kernel() 050{ 051 # Don't accept source routed packets. 052 /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_source_route 053 054 # Disable ICMP redirect acceptance. 055 /bin/echo "0" > /proc/sys/net/ipv6/conf/all/accept_redirects 056 057 # Enable the following lines only if a router! 058 # Enabling IPv6 forwarding disables route-advertisement reception - accept_ra=0|2 059 # A static gateway will need to be assigned. 060 # 061 echo "1" > /proc/sys/net/ipv6/conf/all/forwarding 062 # 063 #End router forwarding rules 064 065 echo " "+ KERNEL : [OK] 066} 067 068##### 069# on accepte tout de et pour "lo" local 070##### 071 072function loopback() 073{ 074 $IP6TABLE -A INPUT -i lo -j ACCEPT 075 $IP6TABLE -A FORWARD -i lo -j ACCEPT 076 $IP6TABLE -A FORWARD -o lo -j ACCEPT 077 $IP6TABLE -A OUTPUT -o lo -j ACCEPT 078 079 echo " "+ LOOPBACK : [OK] 080} 081 082##### 083# on fixe les regles general (DROP||ACCEPT) 084##### 085 086function policy() 087{ 088 $IP6TABLE -P INPUT $1 089 $IP6TABLE -P FORWARD $1 090 $IP6TABLE -P OUTPUT $1 091 092 echo " "+ POLICY $1 : [OK] 093} 094 095##### 096# ACCEPT LES REQUETES DEMANDEES 097##### 098 099function generique() 100{ 101 # Allow anything out on the internet 102 $IP6TABLE -A OUTPUT -o $WAN_IF -j ACCEPT 103 # Allow established, related packets back in 104 $IP6TABLE -A INPUT -i $WAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT 105 106 echo " "+ GENERIQUE : [OK] 107} 108 109##### 110# on fixe les regles des adresses IPv6 111##### 112 113function generique() 114{ 115 # Allow anything out on the internet 116 $IP6TABLE -A OUTPUT -o $WAN_IF -j ACCEPT 117 # Allow established, related packets back in 118 $IP6TABLE -A INPUT -i $WAN_IF -m state --state ESTABLISHED,RELATED -j ACCEPT 119 120 echo " "+ GENERIQUE : [OK] 121} 122 123##### 124# on fixe les regles des adresses IPv6 locales 125##### 126 127function ipv6_ula() 128{ 129 echo " |"; 130 echo " + IPv6 - Addrs Unique Locale Area -----------------------"; 131 132 # Allow Link-Local addresses 133 # network range : fc00:0000:0000:0000:0000:0000:0000:0000-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 134 135 echo " |"; 136 $IP6TABLE -A INPUT -s fc00::/7 -j ACCEPT 137 $IP6TABLE -A FORWARD -s fc00::/7 -d fc00::/7 -j ACCEPT 138 $IP6TABLE -A OUTPUT -d fc00::/7 -j ACCEPT 139 echo " | +--> "fc00::/7 : ACCEPT; 140 echo " | |"; 141 echo " |" + IPv6 - Addrs Unique Locale Area : [OK] 142 143} 144 145function ipv6_multicast() 146{ 147 echo " |"; 148 echo " + IPv6 - Addrs Multicast -----------------------"; 149 150 # Allow multicast 151 # network range : ff00:0000:0000:0000:0000:0000:0000:0000-ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 152 153 echo " |"; 154 $IP6TABLE -A INPUT -d ff00::/8 -j ACCEPT 155 $IP6TABLE -A FORWARD -s ff00::/8 -d ff00::/8 -j ACCEPT 156 $IP6TABLE -A OUTPUT -d ff00::/8 -j ACCEPT 157 echo " | +--> "ff00::/8 : ACCEPT; 158 echo " | |"; 159 echo " |" + IPv6 - Addrs Multicast : [OK] 160} 161 162function ipv6_link_local() 163{ 164 echo " |"; 165 echo " + IPv6 - Addrs Link-Local Unicast -----------------------"; 166 167 # Allow Link-Local addresses 168 # network range : fe80:0000:0000:0000:0000:0000:0000:0000-febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff 169 170 echo " |"; 171 $IP6TABLE -A INPUT -s fe80::/10 -j ACCEPT 172 $IP6TABLE -A FORWARD -s fe80::/10 -d fe80::/10 -j ACCEPT 173 $IP6TABLE -A OUTPUT -d fe80::/10 -j ACCEPT 174 echo " | +--> "fe80::/10 : ACCEPT; 175 echo " | |"; 176 echo " | "+ IPv6 - Addrs Link-Local : [OK] 177 178} 179 180##### 181# on fixe les regles des adresses IPv6 locales secure (VPN/strongSwan) 182##### 183 184function ipv6_strongswan() 185{ 186 # Default ------------------ 187 echo " |"; 188 echo " + IPv6 - Addrs Site-Local Secure Area Network -------------------------"; 189 190 # Allow Secure Area Network addresses 191 # network range : fec0:0000:0000:0000:0000:0000:0000:0000-feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 192 193 echo " |"; 194 $IP6TABLE -A INPUT -s fec0::/10 -j ACCEPT 195 $IP6TABLE -A FORWARD -s fec0::/10 -d fec0::/10 -j ACCEPT 196 $IP6TABLE -A OUTPUT -d fec0::/10 -j ACCEPT 197 echo " | +--> "fec0::/10 : ACCEPT; 198 echo " | |"; 199 echo " | "+ IPv6 - Addrs Secure Area Network : [OK] 200 201 # Add ------------------ 202 203 echo " |"; 204 # Allow Forwarding SLAN (fec0::/10) <> ULA (fc00::/7) 205 # network range : fc00:0000:0000:0000:0000:0000:0000:0000-fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff 206 207 echo " + IPv6 - Forwarding Addrs SWAN 2 ULA Networks -------------------------"; 208 echo " |"; 209 $IP6TABLE -A FORWARD -s fec0::/10 -d fc00::/7 -j ACCEPT 210 $IP6TABLE -A FORWARD -d fec0::/10 -s fc00::/7 -j ACCEPT 211 echo " | +--> fec0::/10 <?> fc00::/7 : ACCEPT"; 212 echo " | |"; 213 echo " | "+ IPv6 - Forwarding Addrs SWAN 2 ULA Networks : [OK] 214 echo " |"; 215 216} 217 218##### 219# On laisse passer les requetes ICMPv6 220##### 221 222function icmpv6_generique() 223{ 224 $IP6TABLE -I INPUT -p icmpv6 -j ACCEPT 225 $IP6TABLE -I FORWARD -p icmpv6 -j ACCEPT 226 $IP6TABLE -I OUTPUT -p icmpv6 -j ACCEPT 227 228 echo " "+ ICMPV6 - ACCEPT : [OK] 229} 230 231#### 232# La regle de Stephane Bortzmeyer DROP ICMP LIMIT 1/sec par IPv6::/128 233# A envoyer apres la chaine aICMPv6 (pour qu'elle soit au dessus -I) 234#### 235 236function icmpv6_limit() 237{ 238 # Au dessus de 1 ping par seconde (ICMPv6 echo-request) on DROP l'explosion PING d'une seule source IPv6 (masque 128) 239 $IP6TABLE -I INPUT -p icmpv6 --icmpv6-type 128/0 -m hashlimit --hashlimit-name ICMP --hashlimit-above 1/second --hashlimit-burst 1 --hashlimit-mode srcip --hashlimit-srcmask 128 -j DROP 240 241 echo " "+ ICMPV6 - LIMIT 1/second DROP : [OK] 242} 243 244 245##### 246# Le script de Stephane Huc 247##### 248 249function icmpv6_huc() 250{ 251 # Allow dedicated ICMPv6 packettypes, do this in an extra chain because we need it everywhere 252 $IP6TABLE -N aICMPs 253 254 # Destination unreachable 255 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 1 -j ACCEPT # destination-unreachable; Must Not Be Dropped 256 257 # Packet too big 258 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 2/0 -j ACCEPT # packet too big; Must Not Be Dropped 259 260 # Time exceeded 261 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/0 -j ACCEPT # time exceeded 262 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 3/1 -j ACCEPT # time exceeded 263 264 # Parameter problem 265 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/0 -j ACCEPT # parameter pb: Erroneous header field encountered 266 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/1 -j ACCEPT # parameter pb: Unrecognized Next Header Type encountered 267 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 4/2 -j ACCEPT # parameter pb: Unrecognized IPv6 option encountered 268 269 # Echo Request (protect against flood) 270 # Commenter cette ligne 271# $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -m limit --limit 1/sec --limit-burst 1 -j ACCEPT # ping tool: echo request message 272 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT 273 274 # Echo Reply 275 # Commenter cette ligne 276# $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 129/0 -m limit --limit 5/sec --limit-burst 10 -j ACCEPT # ping tool: echo reply message 277 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 128/0 -j ACCEPT 278 279 echo " "+ ICMPV6 - DEFAULT : [OK] 280 281 # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1) 282 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 130/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT 283 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 131/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT 284 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 132/0 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT 285 echo " "+ ICMPV6 - LINK-LOCAL : [OK] 286 287 # address configuration and routeur selection mssg (received with hop limit = 255) 288 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 133/0 -m hl --hl-eq 255 -j ACCEPT # Router Solicitation 289 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 134/0 -s fe80::/64 -m hl --hl-eq 255 -j ACCEPT # Router Advertisement 290 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 135/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Solicitation 291 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 136/0 -m hl --hl-eq 255 -j ACCEPT # Neighbor Advertisement 292 293 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 137/0 -j DROP # Redirect Message 294 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 138/0 -j DROP # Router Renumbering (Rechargement du routeur) 295 296 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 139/0 -j DROP # ICMP Node Information Query 297 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 140/0 -j DROP # ICMP Node Information Response 298 299 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 141/0 -d ff02::1 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Solicitation Message 300 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 142/0 -m hl --hl-eq 255 -j ACCEPT # Inverse Neighbor Discovery Advertisement Message 301 echo " "+ ICMPV6 - ADD CONF '&' ROUT€ SELECTION : [OK] 302 303 # link-local multicast receive notification mssg (need link-local src address, with hop-limit: 1) 304 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 143 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT 305 306 # needed for mobylity 307 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 144/0 -j DROP 308 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 145/0 -j DROP 309 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 146/0 -j DROP 310 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 147 -j DROP 311 312 # SEND certificate path notification mssg (received with hop limit = 255) 313 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 148 -m hl --hl-eq 255 -j ACCEPT # Certification Path Solicitation Message 314 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 149 -m hl --hl-eq 255 -j ACCEPT # Certification Path Advertisement Message 315 316 # multicast routeur discovery mssg (need link-local src address and hop limit = 1) 317 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 151 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT 318 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 152 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT 319 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 153 -s fe80::/64 -m conntrack --ctstate NEW -m hl --hl-eq 1 -j ACCEPT 320 echo " "+ ICMPV6 - MULTICAST ROUT€ DISCOVERY : [OK] 321 322 # 323 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 200 -j DROP # private experimentation 324 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 201 -j DROP # private experimentation 325 $IP6TABLE -A aICMPs -p icmpv6 --icmpv6-type 255 -j DROP # expansion error messages ICMPv6 326 echo " "+ ICMPV6 - EXPERIMENTATION : [OK] 327 328 # Only the ROUT€ is allowed to ping us (read FAQ this is a requirement) 329 #$IP6TABLE -A INPUT -p icmpv6 -m limit --limit 5/s --limit-burst 4 -j aICMPs 330 #$IP6TABLE -A OUTPUT -m state ! --state INVALID -j aICMPs 331 332 $IP6TABLE -I INPUT -p icmpv6 -j aICMPs 333 $IP6TABLE -I FORWARD -p icmpv6 -j aICMPs 334 $IP6TABLE -I OUTPUT -p icmpv6 -j aICMPs 335 336 echo " "+ ICMPV6 - INLIMIT + OUTPUT : [OK] 337} 338 339##### 340# FORWARDING entre les cartes (vmbr0 <-> vmbr1) 341##### 342 343function ipv6_forwarding() 344{ 345 # Allow forwarding 346# $IP6TABLE -A FORWARD -m state --state NEW -i $VM1_IF -o $WAN_IF -s $SUBNETPREFIX -j ACCEPT 347# $IP6TABLE -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 348 349 $IP6TABLE -A FORWARD -i $VM1_IF -o $WAN_IF -j ACCEPT 350 $IP6TABLE -A FORWARD -o $VM1_IF -i $WAN_IF -j ACCEPT 351 352 echo " "+ IPv6 - FORWARDING : [OK] 353} 354 355##### 356# NAT V6 357##### 358function nat_v6() 359{ 360 # NET FOR LXC EXCEPT TO THE ULA NETWORK# NET FOR LXC EXCEPT TO THE ULA NETWORK 361 $IP6TABLE -t nat -A POSTROUTING -o $WAN_IF -s $CT_WEB ! -d fc00::/7 -j MASQUERADE 362 363 echo " "+ NAT : [OK] 364} 365 366##### 367# ouverture des acces SSH a certaines IP 368##### 369 370function ssh_ok() 371{ 372 for host in $SSH_OK 373 do 374 $IP6TABLE -A INPUT -s $host -p tcp --dport $port_ssh -j ACCEPT 375 $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_ssh -j ACCEPT 376 done 377 378 $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m state --state NEW -m recent --set --name SSH 379 $IP6TABLE -A INPUT -p tcp --dport $port_ssh -m recent --update --seconds 60 --hitcount 3 --rttl --name SSH -j DROP 380 $IP6TABLE -A INPUT -p tcp --dport $port_ssh -j ACCEPT 381 382 echo " "+ SSH : [OK] 383} 384 385##### 386# ouverture des acces RSYNC a certaines IP 387##### 388 389function rsync_ok() 390{ 391 for host in $RSYNC_OK 392 do 393 $IP6TABLE -A INPUT -s $host -p tcp --dport $port_rsync -j ACCEPT 394 $IP6TABLE -A OUTPUT -d $host -p tcp --sport $port_rsync -j ACCEPT 395 done 396 397 echo " "+ RSYNC : [OK] 398} 399 400##### 401# ouverture des ports tcp et upd 402##### 403 404function tcp_ok() 405{ 406 for port in $TCP_OK 407 do 408 $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT 409 $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT 410 done 411 412 echo " "+ TCP : [OK] 413} 414 415function udp_ok() 416{ 417 for port in $UDP_OK 418 do 419 $IP6TABLE -A INPUT -p udp --dport $port -j ACCEPT 420 $IP6TABLE -A OUTPUT -p udp --sport $port -j ACCEPT 421 done 422 423 echo " "+ UDP : [OK] 424} 425 426##### 427# ouverture des acces HTTP(S) a linterface LAN & NET 428##### 429 430function server_http() 431{ 432 # on a 1 seule IPv6::/128 GLOBAL UNICAST ADDRESS (VPS) --> on a donc fait un network ULA (Unique Local Addresses) for les containers 433# CT_WEB="fc01::10:10:0:10" 434 435 HTTP_PORTS="80 443" 436 for port in $HTTP_PORTS 437 do 438 # SOIT le service est sur LHOTE SOIT dans un VServer 439 $IP6TABLE -A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT 440# $IP6TABLE -A INPUT -p tcp --dport $port -j ACCEPT 441# $IP6TABLE -A OUTPUT -p tcp --sport $port -j ACCEPT 442 $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --sport $port -j ACCEPT 443 # le server Web est sur une autre machine, une container ou une machine locale 444# $IP6TABLE -t nat -A PREROUTING -d $WAN_IP -p tcp --dport $port -j DNAT --to-destination [$CT_WEB]:$port 445 done 446 echo " "+ APACHE : [OK] 447} 448 449##### 450# ouverture des acces DNS(S) a linterface NET 451##### 452 453function server_dns() 454{ 455 # on a 1 seule IPv6::/128 GLOBAL UNICAST ADDRESS (VPS) --> on a donc fait un network ULA (Unique Local Addresses) for les containers 456# CT_DNS="fc01::10:10:0:1" 457 458 DNS_PORTS_TCP="53" 459 for port in $DNS_PORTS_TCP 460 do 461 # SOIT le service est sur LHOTE SOIT dans un VServer 462 $IP6TABLE -A INPUT -m state --state NEW -m tcp -p tcp --dport $port -j ACCEPT 463 $IP6TABLE -A INPUT -i $WAN_IF -p tcp --dport $port -m hashlimit --hashlimit-name NAMED --hashlimit-above 20/second --hashlimit-mode srcip --hashlimit-burst 20 --hashlimit-srcmask 128 -j DROP 464 $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m tcp -p tcp --sport $port -j ACCEPT 465 $IP6TABLE -A OUTPUT -p tcp --sport $port -j LOG --log-prefix "OUTPUT-T-NAMED:" 466 # le server Bind9 est sur une autre machine, un container ou une machine locale 467# $IP6TABLE -t nat -A PREROUTING -d $WAN_IP -p tcp --dport $port -j DNAT --to-destination [$CT_DNS]:$port 468 done 469 470 DNS_PORTS_UDP="53" 471 for port in $DNS_PORTS_UDP 472 do 473 # SOIT le service est sur LHOTE SOIT dans un VServer 474 $IP6TABLE -A INPUT -i $WAN_IF -p udp --dport $port -m state --state NEW -m recent --set --name NAMED 475 $IP6TABLE -A INPUT -i $WAN_IF -p udp --dport $port -m recent --update --seconds 60 --hitcount 10 --rttl --name NAMED -j DROP 476 $IP6TABLE -A OUTPUT -m state --state ESTABLISHED,RELATED -m udp -p udp --sport $port -j ACCEPT 477 $IP6TABLE -A OUTPUT -p udp --sport $port -j LOG --log-prefix "OUTPUT-U-NAMED:" 478 # le server Bind9 est sur une autre machine, un container ou une machine locale 479# $IP6TABLE -t nat -A PREROUTING -d $WAN_IP -p udp --dport $port -j DNAT --to-destination [$CT_DNS]:$port 480 done 481 482 echo " "+ DNS : [OK] 483} 484 485 486 487#####-------------------------- START / STOP ----------------------------###### 488case "$1" in 489 490start|restart) 491$0 stop 492echo "$0 Starting" 493 kernel 494 loopback 495 496 generique 497 498 # old function 499# icmpv6_generique 500 # new function with --icmpv6-type 501 icmpv6_huc 502 icmpv6_limit 503 504 ipv6_ula 505 ipv6_multicast 506 ipv6_link_local 507 ipv6_strongswan 508 ipv6_forwarding 509 510# nat_v6 511 512 ssh_ok 513 rsync_ok 514 tcp_ok 515 udp_ok 516 517 server_http 518 server_dns 519 520 policy DROP 521;; 522 523stop) 524 echo "$0 Stop" 525 $IP6TABLE -F 526 $IP6TABLE -t nat -F 527 $IP6TABLE -Z 528 $IP6TABLE -X 529 policy ACCEPT 530 ;; 531status) 532 echo "$0 Status" 533 $IP6TABLE -L -vn 534 $IP6TABLE -L -vn -t nat 535 ;; 536 537*) 538echo "usage : $0 (status|start|stop|restart)" 539;; 540 541esac 542 543#####-------------------------- START / STOP ----------------------------######
Pour le rendre executable pour l'utilisateur : chmod u+x firewall-ipv6.sh
:
Pour executer le script : sh firewall-ipv6.sh (status|start|stop|restart)
Activer le firewall au démarage et à l'arrêt de la machine : Runlevels de l'init(ialisation) # Default-Start : 2 3 4 5 # Default-Stop : 0 1 6
.
Script avec 2 lignes
001ln -s /root/firewall-ipv6.sh /etc/init.d/firewall-ipv6 002update-rc.d firewall-ipv6 defaultsPuis aprés vous pouvez lancer le script en executant
/etc/init.d/firewall-ipv6 (status|start|stop|restart)
J'ajoute 2 commandes qui peuvent être utile :) et qui peuvent servir pour NuFW .
Script avec 1 ligne
001ip6tables-save > /etc/firewall-ipv6.conf
Script avec 1 ligne
001ip6tables-restore < /etc/firewall-ipv6.conf
Chain INPUT, FORWARD, OUTPUT, aICMPs.
Script avec 5 lignes
001ip6tables -L -vn 002ip6tables -L INPUT -vn 003ip6tables -L FORWARD -vn 004ip6tables -L OUTPUT -vn 005ip6tables -L aICMPs -vn
La table NAT (Network Translation Address) - çà existe ;) ^^ :
Script avec 1 ligne
001ip6tables -L -vn -t nat
Cordialement,
Romain