Debian Jessie: Базовая настройка фаервола (iptables)

Это статья из цикла стетей моего небольшого HowTo по Debian Jessie.
Итак, на данном этапе мы уже порядочно продвинулись с настройками нашего сервера. Мы уже настроили ftp, dhcp, ntp, ssh и вплотную подошли к настройке web-сервера. Но перед этим я бы хотел написать коротенькую заметку про iptables. Это первая настройка фаервола, поэтому тут все будет очень лаконично, чуть позже, после настройки web-сервера мы вернемся к этому вопросу и немного углубимся в тему iptables и безопастности.
Очень рекомендую глянуть пример простейшей настройки iptables на официальном wiki Debian
Ну поехали …

Для начала создаем файл с правилами:

gw:~$ sudo vim /etc/iptables.rules

и вставляем туда вот что:

*filter

# 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:

gw:~$ sudo vim /etc/network/if-pre-up.d/iptables

с таким содержимым:

#!/bin/sh
 /sbin/iptables-restore < /etc/iptables.rules

сохраняем, выходим. Поскольку это скрипт, нужно дать ему права на выполнение:

gw:~$ sudo chmod +x /etc/network/if-pre-up.d/iptables

Это сработает когда сервер перезагрузится, для применения правил в данный момент без перезагрузки сделайте вот так:

gw:~$ sudo iptables-restore /etc/iptables.rules

Для просмотра текущих правил фаервола выполните команду:

gw:~$ sudo iptables -L -v -n

Выхлоп должен получиться примерно такой:

gw:~$ sudo iptables -L -v -n
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. Вернемся к этому вопросу еще раз чуть позже, а на данный момент все …

Хай щастить!

  • Трэкбэки отключены
  • Комментов (0)
  1. Комментов пока нет

Why ask?