Срипт фаерволла
Вставил фильтрацию в отдельной цепочке. Оно так более правильно по идее:
Теперь полный скрипт выглядит так:
Далее в планах организовать все же подсчет трафа, причем не лоховским дедовским методом типа сохранения всего трафа в текстовый лог-файл с последующим периодическим запуском скрипта, который будет этот файл парсить и таскать все данные в СУБД, а по-людски, со счетчиками, у которых будут периодически сниматься показания, что будет гораздо быстрее, чем парсить файлы. Вот так вот. А сейчас спать.
iptables -t filter -N MAC_FILTER
# mac-addr user0
iptables -t filter -A MAC_FILTER -m mac --mac-source XX:XX:XX:XX:XX:XX -j RETURN
# mac-addr user1
iptables -t filter -A MAC_FILTER -m mac --mac-source XX:XX:XX:XX:XX:XX -j RETURN
# mac-addr user2
iptables -t filter -A MAC_FILTER -m mac --mac-source XX:XX:XX:XX:XX:XX -j RETURN
# all others mac-addresses not permitted
iptables -t filter -A MAC_FILTER -j DROP
#
# paste MAC_FILTER chain before FORWARD chain
iptables -t filter -I FORWARD -o eth0 -j MAC_FILTER
#
iptables -t filter -A FORWARD -j ACCEPT
Теперь полный скрипт выглядит так:
#!/bin/bash
# config section
# !!! insert your own parameters for int/ext interfaces
LO_IFACE="lo"
LO_NET="127.0.0.0/8"
INT_NET="10.0.0.0/24" # put your internal netaddr here
INT_IFACE="eth1"
EXT_IP="192.168.1.200" # put your external interface ip here
EXT_IFACE="eth0"
# Remove any existing rules from all chains
iptables -F
iptables -F -t nat
iptables -F -t mangle
# Set the default policy
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Remove any pre-existing user-defined chains
iptables -X
iptables -X -t nat
iptables -X -t mangle
# Enable IP Forwarding
echo 1 >/proc/sys/net/ipv4/ip_forward
# Enable broadcast echo Protection
echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
# Disable Source Routed Packets
for f in /proc/sys/net/ipv4/conf/*/accept_source_route; do
echo 0 > $f
done
# Enable TCP SYN Cookie Protection
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
# Disable ICMP Redirect Acceptance
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 > $f
done
# Don't send Redirect Messages
for f in /proc/sys/net/ipv4/conf/*/send_redirects; do
echo 0 > $f
done
# Disable ICMP Redirect Acceptance (не пингается модем если закоментировать)
for f in /proc/sys/net/ipv4/conf/*/accept_redirects; do
echo 0 > $f
done
# Drop Spoofed Packets
for f in /proc/sys/net/ipv4/conf/*/rp_filter; do
echo 1 > $f
done
# Log packets with impossible addresses.
#for f in /proc/sys/net/ipv4/conf/*/log_martians; do
#echo 1 > $f
#done
#
############
## MAC_FILTER
###########
iptables -t filter -N MAC_FILTER
# mac-addr
iptables -t filter -A MAC_FILTER -m mac --mac-source XX:XX:XX:XX:XX:XX -j RETURN
# mac-addr
iptables -t filter -A MAC_FILTER -m mac --mac-source XX:XX:XX:XX:XX:XX -j RETURN
# mac-addr
iptables -t filter -A MAC_FILTER -m mac --mac-source XX:XX:XX:XX:XX:XX -j RETURN
# all others mac-addresses not permitted
iptables -t filter -A MAC_FILTER -j DROP
#
# paste MAC_FILTER chain before FORWARD chain
iptables -t filter -I FORWARD -o eth0 -j MAC_FILTER
#
iptables -t filter -A FORWARD -j ACCEPT
##############
iptables -t filter -A FORWARD -d $INT_NET -j ACCEPT
# Masquerade internal traffic
iptables -t nat -A POSTROUTING -s $INT_NET -o $EXT_IFACE -j SNAT --to $EXT_IP
# Forward traffic from internal hosts
#iptables -A FORWARD -i $INT_IFACE -s $INT_NET -j ACCEPT
# All internal machines have access to the firewall machine
iptables -A INPUT -i $INT_IFACE -s $INT_NET -j ACCEPT
iptables -A OUTPUT -o $INT_IFACE -d $INT_NET -j ACCEPT
# iptables -t filter -A FORWARD -m mac --mac-source $line -j ACCEPT ;
#done
Далее в планах организовать все же подсчет трафа, причем не лоховским дедовским методом типа сохранения всего трафа в текстовый лог-файл с последующим периодическим запуском скрипта, который будет этот файл парсить и таскать все данные в СУБД, а по-людски, со счетчиками, у которых будут периодически сниматься показания, что будет гораздо быстрее, чем парсить файлы. Вот так вот. А сейчас спать.
Комментарии