$ host www.wikiberd.de
$ host -A www.wikiberd.de
$ host 188.246.6.99
$ nslookup www.wikiberd.de
$ nslookup 188.246.6.99
$ ping www.wikiberd.de
$ ping -I l2tp-vpn1 www.wikiberd.de
Flood Ping erfordert Root-Rechte. Für jedes gesendete Packet wird ein Punkt und für jede Antwort wird ein Backspace ausgegeben. Die Anzahl der Punkt zeigt daher die verlorenen Pakete.
$ sudo ping -I l2tp-vpn1 -f www.wikiberd.de
PING www.wikiberd.de (188.246.6.99) 56(84) bytes of data.
....^C
--- www.wikiberd.de ping statistics ---
13850 packets transmitted, 13846 received, 1% packet loss, time 1958ms
rtt min/avg/max/mdev = 0.123/0.129/0.285/0.013 ms, ipg/ewma 0.141/0.131 ms
-4, -6 | Regel nur für IPv4 oder IPv6 |
-t table | Auswahl einer Tabelle (Default: filter): filter, nat, mangle, raw, rsecurity |
-N chain | Anlage einer neuen Kette in der Tabelle |
-P chain policy | Standardverhalten einer Kette: ACCEPT, REJECT, DROP |
-A chain rule | Anhängen einer neuen Regel ans Ende der Kette |
-D chain rule | Löschen einer Regel in der Kette |
-I chain [nr] rule | Einfügen einer neuen Regel in der Mitte |
-R chain nr rule | Ersetzen einer Regel |
-L [chain] | Auflisten aller Regeln |
-F [chain] | Alle Regeln verwerfen (Flush) |
-X | Alle Benutzerdefinierte Ketten löschen |
-Z | Alle Zähler zurücksetzen |
! | Verneinung der folgenden Option |
-i, -o | INPUT und OUTPUT-Interface |
-p protocol | Protokoll: tcp, udp, imcp, icmpv6, all, ... |
-s ip, -sport nr | Quelladresse, Quellport |
-d ip, -dport nr | Zieladresse, Zielport |
-m module --parameter | Auswahl eines Moduls mit Modulparametern |
-m state --state state | Verbindungsstatus: NEW, ESTABLISHED, RELATED, ... |
-p tcp --tcp-flags X,X,X Y,Y,Y | Prüfe TCP-Flags X,X,X, wenn Y,Y,Y gesetzt sind (Maske) SYN, ACK, FIN, RST, URG, PSH, ALL, NONE |
-j chain | Absprung zu Kette ACCEPT, REJECT, RETURN, ... |
Firewall zurücksetzen:
$ iptables -P INPUT ACCEPT
$ iptables -F INPUT
$ iptables -P OUTPUT ACCEPT
$ iptables -F OUTPUT
$ iptables -P FORWARD DROP
$ iptables -F FORWARD
$ iptables -t nat -F
Einzelne Ports öffnen, ohne NAT:
$ iptables -F INPUT
$ iptables -P INPUT ACCEPT
$ iptables -A INPUT -i lo -j ACCEPT
$ iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$ iptables -A INPUT -4 -p icmp -m limit --limit 10/second --limit-burst 2 -j ACCEPT
$ iptables -A INPUT -6 -p icmpv6 -m limit --limit 10/second --limit-burst 2 -j ACCEPT
$ iptables -A INPUT -i eth0 -p tcp --dport tinc -m state --state NEW -j ACCEPT
$ iptables -A INPUT -i eth0 -p udp --dport tinc -m state --state NEW -j ACCEPT
$ iptables -A INPUT -i eth0 -p tcp -m multiport --dports http,https -m state --state NEW -j ACCEPT
$ iptables -A INPUT -j LOG --log-prefix "iptables reject (input): " --log-level 4
$ iptables -A INPUT -j REJECT
Regeln auflisten:
$ iptables -t nat -n -L -v
Destination NAT: Portweiterleitung, Anfragen werden an interne Hosts weitergeleitet
Source NAT: Austausch der Quelladresse für ausgehende Anfragen
IP-Masquerade: Versteckt ein internes Netzwerk hinter einer öffentlichen IP-Adresse
Aktivieren der Weiterleitung:
$ sysctl -w net.ipv4.ip_forward=1
Auf ppp0 ins Internet gehende Verbindungen maskieren:
$ iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
$ iptables -A FORWARD -i eth0 -o ppp0 -j ACCEPT
$ iptables -A FORWARD -i ppp0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Portweiterleitung an einen internen Webserver. Durch die zweite Regel können auch interne Hosts die externe IP aufrufen:
$ iptables -t nat -A PREROUTING -p tcp -d 188.246.6.99 --dport 80 -j DNAT --to 192.168.1.99:80
$ iptables -t nat -A POSTROUTING -p tcp -d 188.246.6.99 --dport 80 -s 192.168.1.0/24 -j SNAT --to 192.168.1.99:80
Wenn die externe IP dynamisch ist, müssen die Firewall-Regeln bei jedem IP-Wechsel neugeladen werden!
Auflisten der Routing-Tabelle:
$ netstat -r
$ route
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default router-extern.l 0.0.0.0 UG 0 0 0 eth1
188.246.0.50 router-extern.l 255.255.255.255 UGH 0 0 0 eth1
188.246.4.1 * 255.255.255.255 UH 0 0 0 l2tp-vpn1
192.168.0.0 * 255.255.255.0 U 0 0 0 eth1
192.168.0.0 * 255.255.0.0 U 0 0 0 vpn0
192.168.1.0 * 255.255.255.0 U 0 0 0 br-lan
$ ip route list
default via 192.168.0.1 dev eth1 proto static
188.246.0.50 via 192.168.0.1 dev eth1 proto static
188.246.4.1 dev l2tp-vpn1 proto kernel scope link src 188.246.6.99
192.168.0.0/24 dev eth1 proto kernel scope link src 192.168.0.11
192.168.0.0/16 dev vpn0 proto kernel scope link src 192.168.1.1
192.168.1.0/24 dev br-lan proto kernel scope link src 192.168.1.1
Auflisten einer anderen als der Standard Routing-Tabelle:
$ ip route list table VPN1
Anzeige des Routing Caches:
$ ip route show cache
8.8.4.4 from 192.168.1.227 via 192.168.0.1 dev eth1 src 192.168.1.1
cache <src-direct> iif br-lan
local 192.168.1.1 from 192.168.1.13 dev lo src 192.168.1.1
cache <local,src-direct> iif br-lan
192.168.1.100 from 148.251.90.84 dev br-lan src 192.168.0.11
cache ipid 0xbd81 iif eth1
...
Zurücksetzen des Caches, damit veränderte Regeln aktiv werden:
$ ip route flush cache
Konventionalles Routing basiert auf dem Longest Prefix Match-Algorithmus und orientiert sich dabei nur an der Zieladresse eines Pakets. Policy Routing ermöglicht es, viel flexiblere Routingentscheidungen anhand beliebiger Merkmale zu treffen. Im einfachsten Fall erfolgt die Auswahl der Route anhand einem der folgenden Merkmale: Quell-IP, empfangendes Interface, ToS-Flags, Firewall-Mark. Dabei handelt es sich beim FW-Mark um eine interne Markierung, die einem Paket innerhalb der Netfilter-Firewall gegeben wird. Gerade diese Kombination mit Netfilter erlaubt es, beliebig komplexe Routingentscheidungen zu treffen. Es muss jedoch beachtet werden, dass das IP-Routing unter Linux immer zustandslos ist und daher eingehende und ausgehende Pakete gleichermaßen konfiguriert werden müssen, um z.B. Antwortpakete richtig zu routen!
Vorgehen des Kernels zur Auswahl einer Route (Suchmerkmale s. Tabelle, kursive Merkmale sind optional):
route cache | RPDB | route table |
---|---|---|
destination | source | destination |
source | destination | ToS |
ToS | ToS | scope |
fwmark | fwmark | oif |
iif | iif |
xxx
Polilcy Routing Database ausgeben:
$ ip rule show
0: from all lookup local
32765: from all fwmark 0x1 lookup VPN1
32766: from all lookup main
32767: from all lookup default
xxx
Unterschied zum Routing: Es werden mehrere Ethernet-Segmente zusammengeschlossen. Daher existiert nur eine IP-Adresse und auch Broadcast- oder ARP-Nachrichten können die Bridge passieren. Auch LAN und WLAN lassen sich bridgen, sofern es der WiFi-Treiber unterstützt. Die meisten Access Points lehnen aber Frames von unbekannten MAC-Adressen ab. HIerfür müsste dann mit eptables ein "NAT auf Ethernet-Ebene" eingerichtet werden.
$ brctl addbr br0
$ brctl delbr br0
$ brctl show
bridge name bridge id STP enabled interfaces
br-lan 8000.2eb05d93b617 no eth0.1
wlan0
$ brtctl adddif br0 eth0 eth1 eth2
$ brctl delif br0 eth2
$ brctl show br0
xxx
Auflistung aller Socketverbindungen (intern und extern):
$ netstat -a
$ netstat -an
Auflistung aller eingehenden Verbindungen:
$ netstat -al
Eingrezung auf TCP oder UDP:
$ netstat -alt
$ netstat -alu
$ netstat -atu
$ netstat -altu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
tcp 0 0 localhost.local:privoxy 0.0.0.0:* LISTEN
tcp 0 0 localhost.localdoma:ipp 0.0.0.0:* LISTEN
tcp 0 0 metropolis.lan:33103 snt-re4-8c.sjc.dro:http ESTABLISHED
tcp 1 0 metropolis.lan:44927 6-55-236-85.rev.cu:http CLOSE_WAIT
tcp 0 0 metropolis.lan:39384 router-intern.lan:ssh ESTABLISHED
tcp 32 0 metropolis.lan:37439 6-55-236-85.rev.c:https CLOSE_WAIT
tcp6 0 0 [::]:ssh [::]:* LISTEN
tcp6 0 0 localhost6.localdom:ipp [::]:* LISTEN
Netzwerkverbindungen mit lsof auflisten:
$ lsof -i TCP
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dropbox 2278 dennis 18u IPv4 95849 0t0 TCP metropolis.lan:33103->snt-re4-8c.sjc.dropbox.com:http (ESTABLISHED)
ssh 7204 dennis 3u IPv4 63858 0t0 TCP metropolis.lan:39384->router-intern.lan:ssh (ESTABLISHED)
Informationen über ein Netzwerkinterface:
$ ifconfig l2tp-vpn1
l2tp-vpn1 Link encap:Point-to-Point Protocol
inet addr:188.246.6.99 P-t-P:188.246.4.1 Mask:255.255.255.255
inet6 addr: fe80::449b:1a7b:df7c:8cb7/10 Scope:Link
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:24697 errors:0 dropped:0 overruns:0 frame:0
TX packets:7 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:1557600 (1.4 MiB) TX bytes:234 (234.0 B)
$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 2e:b0:5d:93:b6:17 brd ff:ff:ff:ff:ff:ff
inet6 fe80::2cb0:5dff:fe93:b617/64 scope link
valid_lft forever preferred_lft forever
Auflistung des ARP-Caches:
$ arp -an
? (192.168.1.1) at 2e:b0:5d:93:b6:17 [ether] on p2p1
? (192.168.1.14) at ca:fe:ba:be:00:03 [ether] on p2p1
? (192.168.1.12) at ca:fe:ba:be:00:01 [ether] on p2p1
$ tcpdump -i l2tp-vpn1
$ tcpdump -Xvv -i l2tp-vpn1
$ ipcalc -n 10.24.1.5/20
NETWORK=10.24.0.0