Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| home-harmening:sicherheit:firewall:iptables [2024/10/09 11:01] – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | home-harmening:sicherheit:firewall:iptables [2024/10/09 11:01] (aktuell) – ↷ Seite von sicherheit:firewall:iptables nach home-harmening:sicherheit:firewall:iptables verschoben charmening | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| + | ====== IpTables Firewall ====== | ||
| + | Hier ein Beispiel für ein Firewallskript mit IpTables | ||
| + | \\ \\ | ||
| + | ==== Installation ==== | ||
| + | - Ordner anlegen / | ||
| + | - Skripte hinein kopieren | ||
| + | - Link für manuelle Steuerung anlegen | ||
| + | - System Link hinzufügen | ||
| + | \\ | ||
| + | == Link für manuelle Steuerung anlegen == | ||
| + | < | ||
| + | \\ | ||
| + | == System Link hinzufügen == | ||
| + | < | ||
| + | ln -s / | ||
| + | systemctl daemon-reload | ||
| + | </ | ||
| + | \\ | ||
| + | ==== Bedienung ==== | ||
| + | Neue Regeln werden in den Dateien ipv4.rules, ipv6.rules geschrieben. | ||
| + | Die Steuerung erfolgt entweder mit **systemctl start|stop|status firewall** | ||
| + | oder direkt mit **firewall start|stop|status|rules**. | ||
| + | \\ | ||
| + | Alle Dateien befinden sich in dem Ordner | ||
| + | < | ||
| + | / | ||
| + | | | ||
| + | |-> | ||
| + | |-> | ||
| + | |-> | ||
| + | |-> | ||
| + | |-> | ||
| + | |-> | ||
| + | </ | ||
| + | \\ | ||
| + | === Dateien === | ||
| + | \\ | ||
| + | == firewall.start == | ||
| + | < | ||
| + | #!/bin/bash | ||
| + | # Startscript for iptables | ||
| + | |||
| + | # Variables | ||
| + | ipt4=$(which iptables) | ||
| + | ipt6=$(which ip6tables) | ||
| + | mypath=$(dirname $(realpath $0)) # Get path | ||
| + | pidfile=/ | ||
| + | |||
| + | printf " | ||
| + | |||
| + | # Enable debugging | ||
| + | if [ ! -z ${@: -1} ]&& | ||
| + | |||
| + | # Reset Firewall | ||
| + | # ipv4 | ||
| + | $ipt4 -F | ||
| + | $ipt4 -t nat -F | ||
| + | $ipt4 -t filter -F | ||
| + | $ipt4 -P INPUT DROP | ||
| + | $ipt4 -P FORWARD DROP | ||
| + | $ipt4 -P OUTPUT DROP | ||
| + | |||
| + | # ipv6 | ||
| + | $ipt6 -F | ||
| + | $ipt6 -t nat -F | ||
| + | $ipt6 -t filter -F | ||
| + | $ipt6 -P INPUT DROP | ||
| + | $ipt6 -P FORWARD DROP | ||
| + | $ipt6 -P OUTPUT DROP | ||
| + | |||
| + | # Create PID File | ||
| + | echo $$ > ${pidfile} | ||
| + | |||
| + | / | ||
| + | |||
| + | ################# | ||
| + | # Default rules # | ||
| + | ################# | ||
| + | |||
| + | # allow local traffic | ||
| + | $ipt4 -A INPUT -i lo -j ACCEPT | ||
| + | $ipt4 -A OUTPUT -o lo -j ACCEPT | ||
| + | $ipt4 -A FORWARD -i lo -j ACCEPT | ||
| + | $ipt6 -A INPUT -i lo -j ACCEPT | ||
| + | $ipt6 -A OUTPUT -o lo -j ACCEPT | ||
| + | $ipt6 -A FORWARD -i lo -j ACCEPT | ||
| + | |||
| + | # Enable established incomming/ | ||
| + | $ipt4 -A INPUT -m state --state ESTABLISHED, | ||
| + | $ipt6 -A INPUT -m state --state ESTABLISHED, | ||
| + | $ipt4 -A OUTPUT -m state --state ESTABLISHED -j ACCEPT | ||
| + | $ipt6 -A OUTPUT -m state --state ESTABLISHED -j ACCEPT | ||
| + | |||
| + | # Enabled ipv4 rules | ||
| + | source ${mypath}/ | ||
| + | # Enable ipv6 rules | ||
| + | source ${mypath}/ | ||
| + | |||
| + | ########### | ||
| + | # logging # | ||
| + | ########### | ||
| + | if [ ! -z $2 ]&& | ||
| + | case $3 in | ||
| + | on) #$ipt4 -A INPUT -j LOG | ||
| + | # | ||
| + | $ipt4 -N LOGGING | ||
| + | $ipt4 -A LOGGING -m limit --limit 2/min -j LOG --log-prefix " | ||
| + | of) $ipt4 -D INPUT -j LOG | ||
| + | $ipt6 -D INPUT -j LOG;; | ||
| + | *) | ||
| + | esac | ||
| + | fi | ||
| + | |||
| + | |||
| + | # Disable debugging | ||
| + | if [ ! -z ${@: -1} ]&& | ||
| + | |||
| + | exit 0 | ||
| + | </ | ||
| + | \\ | ||
| + | == firewall.stop == | ||
| + | < | ||
| + | #!/bin/bash | ||
| + | # Stopscript for iptables | ||
| + | |||
| + | # Variables | ||
| + | ipt4=$(which iptables) | ||
| + | ipt6=$(which ip6tables) | ||
| + | pidfile=/ | ||
| + | |||
| + | printf " | ||
| + | |||
| + | # Reset Firewall | ||
| + | # ipv4 | ||
| + | $ipt4 -F | ||
| + | $ipt4 -t nat -F | ||
| + | $ipt4 -t filter -F | ||
| + | $ipt4 -P INPUT ACCEPT | ||
| + | $ipt4 -P FORWARD ACCEPT | ||
| + | $ipt4 -P OUTPUT ACCEPT | ||
| + | |||
| + | # ipv6 | ||
| + | $ipt6 -F | ||
| + | $ipt6 -t nat -F | ||
| + | $ipt6 -t filter -F | ||
| + | $ipt6 -P INPUT ACCEPT | ||
| + | $ipt6 -P FORWARD ACCEPT | ||
| + | $ipt6 -P OUTPUT ACCEPT | ||
| + | |||
| + | # Delete PID File if exists | ||
| + | if [ -f ${pidfile} ]; then rm ${pidfile}; fi | ||
| + | |||
| + | exit 0 | ||
| + | </ | ||
| + | \\ | ||
| + | == firewall.sh == | ||
| + | < | ||
| + | #!/bin/bash | ||
| + | |||
| + | pidfile=/ | ||
| + | mypath=$(dirname $(realpath $0)) # Get path | ||
| + | ipt=$(which iptables) | ||
| + | |||
| + | help=" | ||
| + | |||
| + | This script can use to control iptables | ||
| + | |||
| + | Config | ||
| + | ------ | ||
| + | Write firewall rules in | ||
| + | / | ||
| + | / | ||
| + | |||
| + | Control | ||
| + | ------- | ||
| + | \e[1; | ||
| + | |||
| + | \e[1; | ||
| + | |||
| + | After start command you can set the logging command to enable or disable | ||
| + | logging to syslog. | ||
| + | |||
| + | \e[1; | ||
| + | |||
| + | On the last position you can write debug to debug your rules. | ||
| + | |||
| + | \e[1; | ||
| + | |||
| + | \e[1; | ||
| + | |||
| + | \e[1; | ||
| + | |||
| + | \e[1; | ||
| + | |||
| + | \e[1; | ||
| + | |||
| + | " | ||
| + | |||
| + | case $1 in | ||
| + | start) | ||
| + | stop) ${mypath}/ | ||
| + | restart) ;; | ||
| + | status) | ||
| + | | ||
| + | else | ||
| + | | ||
| + | fi ;; | ||
| + | rules) | ||
| + | help) printf " | ||
| + | *) | ||
| + | esac | ||
| + | |||
| + | exit 0 | ||
| + | </ | ||
| + | \\ | ||
| + | == firewall.servivce == | ||
| + | < | ||
| + | [Unit] | ||
| + | Description = Firewallscript for IpTables | ||
| + | [Service] | ||
| + | Type = oneshot | ||
| + | ExecStart = / | ||
| + | ExecReload = / | ||
| + | ExecStop = / | ||
| + | ExecStatus = / | ||
| + | [Install] | ||
| + | WantedBy = multi-user.target | ||
| + | </ | ||
| + | \\ | ||
| + | == ipv4.rules == | ||
| + | < | ||
| + | # Variables | ||
| + | ipt4=$(which iptables) | ||
| + | ipt6=$(which ip6tables) | ||
| + | |||
| + | ####### | ||
| + | # SSH # | ||
| + | ####### | ||
| + | |||
| + | # enable outgoing/ | ||
| + | $ipt4 -A INPUT -p tcp --sport 1024: --dport 22-m state --state NEW, | ||
| + | #$ipt6 -A INPUT -p tcp --sport 1024: --dport 22-m state --state NEW, | ||
| + | $ipt4 -A OUTPUT -p tcp --sport 1024: --dport 22 -m state --state ESTABLISHED -j ACCEPT -m comment --comment " | ||
| + | #ipt6 -A OUTPUT -p tcp --sport 1024: --dport 22 -m state --state ESTABLISHED -j ACCEPT | ||
| + | |||
| + | ######## | ||
| + | # http # | ||
| + | ######## | ||
| + | $ipt4 -A INPUT -p tcp --sport 1024: --dport 80 -m state --state NEW, | ||
| + | $ipt4 -A INPUT -p tcp --sport 1024: --dport 443 -m state --state NEW, | ||
| + | |||
| + | ########### | ||
| + | # updates # | ||
| + | ########### | ||
| + | |||
| + | # Ubuntu Repos | ||
| + | repos=" | ||
| + | for repo in ${repos}; do | ||
| + | $ipt4 -A OUTPUT -p tcp --sport 1024: --dport 80 -m state --state NEW, | ||
| + | $ipt4 -A OUTPUT -p tcp --sport 1024: --dport 443 -m state --state NEW, | ||
| + | $ipt6 -A OUTPUT -p tcp --sport 1024: --dport 80 -m state --state NEW, | ||
| + | $ipt6 -A OUTPUT -p tcp --sport 1024: --dport 443 -m state --state NEW, | ||
| + | done | ||
| + | |||
| + | ####### | ||
| + | # DNS # | ||
| + | ####### | ||
| + | |||
| + | # enable outgoing dns requests | ||
| + | dnsservers=" | ||
| + | for dnsserver in $dnsservers ; do | ||
| + | $ipt4 -A OUTPUT -p tcp --dport 53 -d $dnsserver -m state --state NEW, | ||
| + | $ipt4 -A OUTPUT -p udp --dport 53 -d $dnsserver -m state --state NEW, | ||
| + | done | ||
| + | |||
| + | ####### | ||
| + | # NTP # | ||
| + | ####### | ||
| + | # enable ntp requests to internet ptbtime1.ptb.de | ||
| + | ntpservers=" | ||
| + | for ntpserver in $ntpservers; | ||
| + | $ipt4 -A OUTPUT -p udp --dport 123 -d $ntpserver -m state --state | ||
| + | done | ||
| + | </ | ||
| + | \\ | ||
| + | == ipv6.rules == | ||
| + | < | ||
| + | </ | ||