Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2015-01-15

firewall

Безопасный способ настройки файрволла в Debian.

Изучив вот эти страницы, нижеописанное можно и не смотреть

Сначала сделаем предохранитель. Скрипт, отключающий фильтрацию трафика:
nano ~/disable_fw.sh
#!/bin/bash
RHEL=false
IPT=/sbin/iptables
IPT6=/sbin/ip6tables

main() {
    if [ "$RHEL" == "true" ];
    then
        # reset firewall using redhat script
        /etc/init.d/iptables stop
        /etc/init.d/ip6tables stop
    else
        # for all other Linux distro use following rules to reset firewall
        reset_iptables ${IPT} "/proc/net/ip_tables_names"
        reset_iptables ${IPT6} "/proc/net/ip6_tables_names"
    fi
}

reset_iptables() {
    local ipt_bin="${1}"
    local tables="${2}"

    $ipt_bin -P INPUT ACCEPT
    $ipt_bin -P OUTPUT ACCEPT
    $ipt_bin -P FORWARD ACCEPT
    $ipt_bin -F
    $ipt_bin -X
    $ipt_bin -Z

    for table in $(<$tables)
    do
        $ipt_bin -t $table -F
        $ipt_bin -t $table -X
        $ipt_bin -t $table -Z
    done
}

main

Зарядим этот скрипт в cron, чтобы вырубал нам файрволл каждые пять минут:
nano /etc/crontab
...
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/5  *  *  *  * root bash /root/disable_fw.sh

Проверим, как оно работает, создав простое правило фильтрации и отследив, исчезнет ли оно в течение пяти минут:
iptables -A INPUT -p tcp --dport ssh -j ACCEPT
watch -d "iptables -L --line-numbers -nv"

Теперь напишем правила фильтрации:
nano ~/iptables.test.rules
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --update --seconds 55 -j DROP
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --set -j ACCEPT
# -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
# -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

Загрузим их в файрволл
iptables-restore < /root/iptables.test.rules
и проверим как-нибудь.
Допустим, все работает как надо.

Раз работает, можно настроить загрузку правил при старте сети (запуске машины):
iptables-save > /etc/iptables.up.rules
nano /etc/network/if-pre-up.d/iptables
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
# EOF

chmod +x /etc/network/if-pre-up.d/iptables

Аналогично для IPv6

Правила фильтрации для IPv6:
nano ~/ip6tables.test.rules
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p ipv6-icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --update --seconds 55 -j DROP
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -m recent --set -j ACCEPT
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp6-adm-prohibited
-A FORWARD -j REJECT --reject-with icmp6-adm-prohibited
COMMIT

Загрузка для теста
ip6tables-restore < /root/ip6tables.test.rules
и как-то проверить.

Когда готово, обеспечить загрузку правил при запуске сети:
ip6tables-save > /etc/ip6tables.up.rules
nano /etc/network/if-pre-up.d/iptables
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
/sbin/ip6tables-restore < /etc/ip6tables.up.rules

Финальные проверки (перезапуск хоста, простукивание портов, etc).

И отключение предохранителя, закомментировав запуск обнулятора в cron:
nano /etc/crontab
...
#*/5  *  *  *  * root bash /root/disable_fw.sh


Наслаждайтесь.


original post http://vasnake.blogspot.com/2015/01/firewall.html

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Klaipeda (15) Manager (15) web-browser (15) Никонов (15) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) Baltic (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) seaside (1) serialization (1) shore (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)