Debian Jessie: Базовая настройка фаервола (iptables)
Это статья из цикла стетей моего небольшого HowTo по Debian Jessie.
Итак, на данном этапе мы уже порядочно продвинулись с настройками нашего сервера. Мы уже настроили ftp, dhcp, ntp, ssh и вплотную подошли к настройке web-сервера. Но перед этим я бы хотел написать коротенькую заметку про iptables. Это первая настройка фаервола, поэтому тут все будет очень лаконично, чуть позже, после настройки web-сервера мы вернемся к этому вопросу и немного углубимся в тему iptables и безопастности.
Очень рекомендую глянуть пример простейшей настройки iptables на официальном wiki Debian
Ну поехали …
Для начала создаем файл с правилами:
и вставляем туда вот что:
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You could modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP connections from anywhere
-A INPUT -p tcp --dport 80 -j ACCEPT
# Allow DNS connections from anywhere
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT
# Allows SSH connections
# The --dport number is the same as in /etc/ssh/sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
# Allows FTP connections
-A INPUT -p tcp -m state --state NEW --dport 21 -j ACCEPT
-A INPUT -p tcp -m multiport --dports 57000:58000 -j ACCEPT
# Allow NTP for local network
-A INPUT -i eth0 -p udp --dport 123 -j ACCEPT
# Now you should read up on iptables rules and consider whether ssh access
# for everyone is really desired. Most likely you will only allow access from certain IPs.
# Allow ping
# note that blocking other types of icmp packets is considered a bad idea by some
# remove -m icmp --icmp-type 8 from this line to allow all kinds of icmp:
# https://security.stackexchange.com/questions/22711
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls (access via 'dmesg' command)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy:
-A INPUT -j REJECT
# Forward Rules
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
# For Internal SSH on host nas.my.local
-A FORWARD -i eth1 -o eth0 -p tcp -d 192.168.1.100 --dport 22 -j ACCEPT
# Reject all other inbound - default deny unless explicitly allowed policy:
-A FORWARD -j REJECT
COMMIT
# NAT Table Rules
*nat
# Torrent Forwarding to NAS UDP/TCP
-A PREROUTING -i eth1 -p udp -m udp --dport 32001 -j DNAT --to-destination 192.168.1.100
-A PREROUTING -i eth1 -p tcp -m tcp --dport 32001 -j DNAT --to-destination 192.168.1.100
# SSH Forwarding to NAS
-A PREROUTING -i eth1 -p tcp -m tcp --dport 10022 -j DNAT --to-destination 192.168.1.100:22
# SNAT For Local Network
-A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 91.100.100.91
COMMIT
Сохраняем и выходим. Напомню что DNAT «пробросы» внутрь локальной сети которые тут описаны касаются сервера nas.my.local где настроен web-torrent клиент. Также напоминаю что внутренний интерфейс у меня eth0, а внешний eth1. Внутренняя сеть 192.168.1.0/24 — SNAT настроен для того чтобы «отнатить» локальную сеть на внешний адрес 91.100.100.91 выданный провайдером .
Теперь нужно настроить автоматическое поднятие фаервола и добавление правил при перезапуске сервера. Для этого создаем shell-скрипт iptables в директории /etc/network/if-pre-up.d:
с таким содержимым:
/sbin/iptables-restore < /etc/iptables.rules
сохраняем, выходим. Поскольку это скрипт, нужно дать ему права на выполнение:
Это сработает когда сервер перезагрузится, для применения правил в данный момент без перезагрузки сделайте вот так:
Для просмотра текущих правил фаервола выполните команду:
Выхлоп должен получиться примерно такой:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
454K 789M ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 REJECT all -- !lo * 0.0.0.0/0 127.0.0.0/8 reject-with icmp-port-unreachable
76M 109G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
61968 4118K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
54 2888 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
144 7456 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
32 1644 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:21
183 10350 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 multiport dports 57000:58000
3 228 ACCEPT udp -- eth0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:123
829 37015 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 icmptype 8
20137 2313K LOG all -- * * 0.0.0.0/0 0.0.0.0/0 limit: avg 5/min burst 5 LOG flags 0 level 7 prefix "iptables denied: "
115K 13M REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
41M 41G ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
667K 45M ACCEPT all -- eth0 eth1 0.0.0.0/0 0.0.0.0/0
2 92 ACCEPT tcp -- eth1 eth0 0.0.0.0/0 192.168.1.100 tcp dpt:22
48157 2504K REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
38M 4079M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
gw:~$
Ну вот, базово мы познакомились с iptables. Вернемся к этому вопросу еще раз чуть позже, а на данный момент все …
Хай щастить!
Обновите эту устаревшую инфу. Весь интернет и так завален говном мамонта. Эти методы сохранения настроек устарели уже как несколько лет.!
@Александр
Может и есть «более прогрессивные методы сохранения настроек», но официальный wiki Debian пишет также как и я 🙂
https://wiki.debian.org/iptables