Нам понадобится: Raspberry Pi (у меня Raspberry Pi 1 модель B), вторая сетевая карта с интерфейсом USB (например, DLink DUB-E100) и
SD карта с записанным образом Raspbian.Сразу скажу, что в Raspbian Wheezy ядро собрано без опций
CONFIG_NETFILTER_XT_TARGET_TCPMSS=y
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
и будут проблемы с некоторыми сайтами. Придется позже пересобрать ядро с этими опциями.
Итак, установим пакеты:
sudo apt-get install ntp # Нам нужно точное время
sudo update-rc.d ntp enable
sudo service ntp start
sudo apt-get install dnsmasq # Рутер будет резолвером DNS для локальной сети
sudo update-rc.d dnsmasq enable
sudo apt-get dnsmasq start
Настроим локальную сеть, для этого отредактируем файл /etc/network/interfaces:
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 192.168.4.1
netmask 255.255.255.0
У нас eth0 - локальная сеть, eth1 (DLink) будет для Internet.
Теперь установим пакеты для pppoe:
sudo apt-get install pppoe pppoeconf
Настроим интернет соединение pppoe с помощью мастера pppoeconf:
sudo pppoeconf
Теперь осталось настроить firewall. Во-первых включим маршрутизацию: отредактируем файл /etc/sysctl.conf и установим в нем
net.ipv4.ip_forward=1
и выполним
sudo sysctl net.ipv4.ip_forward=1
Возьмем за основу firewall файл /etc/firewall:
# Generated by iptables-save v1.4.14 on Thu Sep 15 16:51:15 2016
*nat
:PREROUTING ACCEPT [1:32]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [2:307]
:POSTROUTING ACCEPT [1:240]
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Thu Sep 15 16:51:15 2016
# Generated by iptables-save v1.4.14 on Thu Sep 15 16:51:15 2016
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:TINYWALL-FORWARD - [0:0]
:TINYWALL-INPUT - [0:0]
:TINYWALL-OUTPUT - [0:0]
-A INPUT -m state --state INVALID -j LOG --log-prefix "CHAIN=TINYWALL-INVALID-INPUT
-A INPUT -m state --state INVALID -j DROP
-A INPUT -m state --state NEW -j LOG --log-prefix "CHAIN=TINYWALL-NEW-INPUT " #Это необязательная строка
-A INPUT -p icmp -j ACCEPT
-A INPUT -s 192.168.4.0/24 -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
-A INPUT -s 127.0.0.1/32 -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
-A INPUT -s 192.168.4.0/24 -p tcp -m tcp --dport 22 -m state --state NEW -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j TINYWALL-INPUT
-A INPUT -j LOG --log-prefix "CHAIN=TINYWALL-INPUT-REJECT "
-A INPUT -j REJECT --reject-with icmp-admin-prohibited
-A FORWARD -m state --state INVALID -j LOG --log-prefix "CHAIN=TINYWALL-INVALID-FORW "
-A FORWARD -m state --state INVALID -j DROP
-A FORWARD -m state --state NEW -j LOG --log-prefix "CHAIN=TINYWALL-NEW-FORW "
-A FORWARD -p icmp -j ACCEPT
-A FORWARD -m state --state NEW -j LOG --log-prefix "CHAIN=TINYWALL-NEW-FORW " #Это необязательная строка
-A FORWARD -s 192.168.4.0/24 -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
-A FORWARD -s 192.168.4.0/24 -m state --state NEW -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -j TINYWALL-FORWARD
-A FORWARD -j LOG --log-prefix "CHAIN=TINYWALL-FORW-REJECT "
-A FORWARD -j REJECT --reject-with icmp-admin-prohibited
-A OUTPUT -m state --state INVALID -j DROP
-A OUTPUT -m state --state NEW -j LOG --log-prefix "CHAIN=TINYWALL-NEW-OUTPUT "
-A OUTPUT -p icmp -j ACCEPT
-A OUTPUT -m state --state NEW -j LOG --log-prefix "CHAIN=TINYWALL-NEW-OUTPUT " #Это необязательная строка
-A OUTPUT -p udp -m udp --dport 53 -m state --state NEW -j ACCEPT
-A OUTPUT -p udp -m udp --sport 53 -m state --state NEW -j ACCEPT
-A OUTPUT -p udp -m udp --dport 123 -m state --state NEW -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -j TINYWALL-OUTPUT
-A OUTPUT -j LOG --log-prefix "CHAIN=TINYWALL-OUTPUT-REJECT "
-A OUTPUT -j REJECT --reject-with icmp-admin-prohibited
-A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --set-mss 1492
COMMIT
# Completed on Thu Sep 15 16:51:15 2016
# Generated by iptables-save v1.4.14 on Thu Sep 15 16:51:15 2016
*mangle
:PREROUTING ACCEPT [2857:1106716]
:INPUT ACCEPT [2787:1101011]
:FORWARD ACCEPT [70:5705]
:OUTPUT ACCEPT [2005:212971]
:POSTROUTING ACCEPT [2163:232874]
COMMIT
# Completed on Thu Sep 15 16:51:15 2016
Запишем в /etc/rc.local строчку
iptables-restore < /etc/firewall
Рутер готов, можно использовать 192.168.4.1 как шлюз и DNS сервер.
Напоследок текст скрипта log-analyzer:
#!/bin/bash
while read string
do
echo ""
export $string 2>/dev/null
HSRC=`host $SRC 2>/dev/null | grep "domain name pointer" | awk '{ print $5 }'`
HDST=`host $DST 2>/dev/null | grep "domain name pointer" | awk '{ print $5 }'`
echo $PROTO | grep "^[[:digit:]]*$" > /dev/null && unset DPT
PROTO=`grep "[[:space:]]$PROTO[[:space:]]" /etc/protocols | awk '{ print $1 }'`
HPROTO=`grep -i "[[:space:]]$DPT/$PROTO" /etc/services | sed 's/\\t/\\ /g' | sed 's/\\ \\ /\\ /g'`
HSPROTO=`grep -i "[[:space:]]$SPT/$PROTO" /etc/services | sed 's/\\t/\\ /g'| sed 's/\\ \\ /\\ /g'`
HSRC=${HSRC:-$SRC}
HDST=${HDST:-$DST}
HPROTO=${HPROTO:-"$DPT/$PROTO"}
HSPROTO=${HSPROTO:-"$SPT/$PROTO"}
set $string
echo "$CHAIN $HDST ($HPROTO) <=== $HSRC ($HSPROTO) /$1 $2 $3/"
done
Его можно запустить командой:
sudo tail -n 50 -f /var/log/syslog | grep "TINYWALL" | /<path>/log-analyzer
URL:
Обсуждается: http://www.opennet.ru/tips/info/2995.shtml