Как да използваме iptables - примери и улесняващи скриптове

NullByte

Active Member
Понеже видях в друга тема, че има интерес към бързото и лесно 'банване' на IP адрес, пускам тази тема с цел да се улесните при употребата на firewall-а.
Темата е писана ексклузивно за Предприемач и моя блог и изрично забранявам нейното копиране, както и на части от нея, без моето разрешение.

Iptables са таблици (очевидно) за правила във firewall-а на ядрото на линукс системите, наречен Netfilter.

Правилата се делят на три вида "вериги" - INPUT (вход, тоест връзки към сървъра), OUTPUT (връзки от сървъра навън) и FORWARD (връзки, които са пренасочени).
Ще коментирам първата верига, тъй като тя е за забрана на даден адрес да се свързва към сървъра ви.
има три вида 'опции' за даден пакет - да бъде приет, да бъде отхвърлен или да бъде игнориран. Съответно опциите са ACCEPT, REJECT, DROP.

Таблиците не се конфигурират във файл, те са в паметта и имат опцията да се запазят като таблица във файл и след това да се въвеждат от този файл.
Тоест правилата се добавят, редактират или махат на живо с команди и при рестарт на системата те изчезват, затова е нужно да запазваме всяка промяна във файл и при рестарт да ги restore от този файл (както и ако омажем нещо).

Командата за добавяне на правило, което 'банва' дадено ип е следната:
Код:
/sbin/iptables -A INPUT -s 22.33.14.51 -j DROP

където 22.33.14.51 е IP адреса, който желаете да блокирате. изтриването става като вместо -A (което идва от add) укажем -D (delete), тоест /sbin/iptables -D INPUT -s 22.33.14.51 -j DROP
Не забравяйте, че това правило е само в паметта и е временно, след рестарт ще се загуби.
Запазването на правилата става с iptables-save - това ще изведе на екрана правилата, трябва да пренасочите потока към файл така:
Код:
iptables-save > /etc/iptables.rules

След това може да 'вкарвате' правилата от файла с командата
Код:
iptables-restore < /etc/iptables.rules

За мое (а вече и ваше) улеснение, написах следните скриптове, ето и как да ги 'инсталирате' (nano е конзолен текстов редактор като pico)

nano /sbin/banip

Поставете кода:

Код:
#!/bin/bash
echo "IP $1 e veche ban-nato"
/sbin/iptables -A INPUT -s $1 -j DROP

Запазете файла и дайте права за изпълнение:
chmod u+x /sbin/banip

Може и запазването/ресторването да си ги направим като команди:

nano /sbin/rules-save

Код:
#!/bin/bash

iptables-save > /etc/iptables.rules

chmod u+x /sbin/rules-save

nano /sbin/rules-restore

Код:
#!/bin/bash

iptables-restore < /etc/iptables.rules

chmod u+x /sbin/rules-restore

И от сега нататък може да 'банвате' само като напишете:

banip 22.44.55.15

Където 22.44.55.15 е ip адреса. И след това да запазите таблицата с командата:

rules-save

И при рестарт да я ресторнете:

rules-restore

Също ако искате да 'спрете' firewall-а или по-точно да изчистите таблицата, без да променяте файла на предишната, ето как:

nano /sbin/rules-clear

Код:
#!/bin/sh
echo "Spiram firewalla i razreshavam vsichki vruzki..."
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

chmod u+x /sbin/rules-clear


Как да настроим firewall-a да блокира целия UDP трафик, с изключение на DNS (порт 53)?

Използвайте следните команди:

Код:
iptables -A INPUT -p udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT

iptables -A INPUT -p udp -j DROP
iptables -A OUTPUT -p udp -j DROP


Надявам се да съм бил полезен, ако имате въпроси - питайте :)

P.S.
Адресите могат да се задават и във формат CIDR.

Например в error.log виждате, как кякакви ботове търсят php admin и се опитват да го пробият:
[Wed Jun 19 03:01:49 2013] [error] [client 125.19.46.195] File does not exist: /var/www/phpmyadmin
Вместо да баннете само IP 125.19.46.195, искате цялата мрежа (от клас C), тоест от 125.19.46.0 до 125.19.46.255, съответно пишете
banip 125.19.46.1/24
или пък, ако ип-то е корейско (а знаете, че посетителите са ви само от България) поглеждате каква е мрежата на корейския доставчик и я банвате цялата, например от 125.19.1.1 до 125.19.255.255
banip 125.19.0.0/16
Внимавайте с този формат, ако не знаете какво е CIDR, първо прочетете из гугъл.
 
Последно редактирано:

Горе