Настройка iptables, nat, dhcp
Значит, я все же осилил настройку фаера. Долго гуглил в поисках нормального работоспособного скрипта, но нашел его все же. Спасибо чуваку. Русскому, что интересно. Итак, по порядку.
Настройка iptables
Сначала создадим сам скрипт, который будет настраивать фаервол:
Там пишем говнячий мелкий скрипт на десять строчек как-то слишком уж долго дуплил. Вот образец простого файрвола с натом. Спасибо чувакам.
Вот это и есть итог моих мучений. Собсно я вставил туда только строчки с фильтрацией по мак-адресам. Фильтрация, кстати, действительно работает.
После написания скрипта длаем его исполнимым:
Потом пишем скрипт, который "обнуляет" фаервол:
Вбиваем туда:
Даем права на исполнение:
А теперь создадим init.d-скрипт для фаервола:
Вбиваем туда:
Ну и также ему даем права на исполнение:
Благодаря последнему скрипту мы можем стартовать, останавливать, рестартовать и смотреть статус соответственно командами:
Наконец, чтобы наш фаервол запускался автоматически при каждой загрузке системы:
Ну вот и все вроде. Кстати последовательность создания автостартующего скрипта взята тут.
Кстати, для более глубокого понимания работы фаера желательно помедитировать на эту картинку:
Настройка dhcp3-server
Теперь про дхцп. Сначала хорошо бы его проинсталять, если он еще не стоит:
Теперь про настройку дхцп. Тут все более-менее просто, даже пояснений особых не надо:
Тут вбит только один хост, но как бы понятно ж, что их там может быть много. Перезапуск, запуск и все остальное осуществляем как обычно:
Настройка iptables
Сначала создадим сам скрипт, который будет настраивать фаервол:
sudo gedit /etc/firewall.bash
Там пишем говнячий мелкий скрипт на десять строчек как-то слишком уж долго дуплил. Вот образец простого файрвола с натом. Спасибо чувакам.
#!/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
# set the mac-filtering
iptables -t filter -A FORWARD -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
iptables -t filter -A FORWARD -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
iptables -t filter -A FORWARD -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
#iptables -A FORWARD -i $INT_IFACE -s $INT_NET -j ACCEPT
# 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
# 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
Вот это и есть итог моих мучений. Собсно я вставил туда только строчки с фильтрацией по мак-адресам. Фильтрация, кстати, действительно работает.
После написания скрипта длаем его исполнимым:
sudo chmod +x /etc/firewall.bash
Потом пишем скрипт, который "обнуляет" фаервол:
sudo gedit /etc/flush_iptables.bash
Вбиваем туда:
#!/bin/bash
# Remove any existing rules from all chains
iptables -F
iptables -F -t nat
iptables -F -t mangle
# Set the default policy
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
# Remove any pre-existing user-defined chains
iptables -X
iptables -X -t nat
iptables -X -t mangle
# End message
echo " [End of flush]"
Даем права на исполнение:
sudo chmod +x /etc/flush_iptables.bash
А теперь создадим init.d-скрипт для фаервола:
sudo gedit /etc/init.d/firewall
Вбиваем туда:
#!/bin/bash
RETVAL=0
# To start the firewall
start() {
echo -n "Iptables rules creation: "
/etc/firewall.bash
RETVAL=0
}
# To stop the firewall
stop() {
echo -n "Removing all iptables rules: "
/etc/flush_iptables.bash
RETVAL=0
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
/sbin/iptables -L
/sbin/iptables -t nat -L
RETVAL=0
;;
*)
echo "Usage: firewall {start|stop|restart|status}"
RETVAL=1
esac
exit
Ну и также ему даем права на исполнение:
sudo chmod +x /etc/init.d/firewall
Благодаря последнему скрипту мы можем стартовать, останавливать, рестартовать и смотреть статус соответственно командами:
sudo /etc/init.d/firewall start
sudo /etc/init.d/firewall stop
sudo /etc/init.d/firewall restart
sudo /etc/init.d/firewall status
Наконец, чтобы наш фаервол запускался автоматически при каждой загрузке системы:
sudo update-rc.d firewall defaults
Ну вот и все вроде. Кстати последовательность создания автостартующего скрипта взята тут.
Кстати, для более глубокого понимания работы фаера желательно помедитировать на эту картинку:
Настройка dhcp3-server
Теперь про дхцп. Сначала хорошо бы его проинсталять, если он еще не стоит:
sudo apt-get install dhcp3-server
Теперь про настройку дхцп. Тут все более-менее просто, даже пояснений особых не надо:
subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.254;
option subnet-mask 255.255.255.0;
option broadcast-address 10.0.0.255;
option domain-name-servers XXX.XXX.XXX.XXX;
range 10.0.0.1 10.0.0.99;
default-lease-time 172800;
max-lease-time 200000;
#hosts list
host tanyalaptop {
hardware ethernet XX:XX:XX:XX:XX:XX;
fixed-address 10.0.0.2;
}
}
Тут вбит только один хост, но как бы понятно ж, что их там может быть много. Перезапуск, запуск и все остальное осуществляем как обычно:
/etc/init.d/dhcp3-server restart
/etc/init.d/dhcp3-server start
/etc/init.d/dhcp3-server stop
Комментарии