iptables

Скрипт и правила IPTABLES

Created Пятница 13 Март 2015

=========================================================================

#!/bin/sh

echo "0" > /proc/sys/net/ipv4/ip_forward

echo "1" > /proc/sys/net/ipv4/tcp_syncookies

echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses

#необходим для корректной работы FTP-сервера

/sbin/modprobe ip_conntrack_ftp

#Сбрасываем старые данные и правила

/sbin/iptables -F

/sbin/iptables -F -t nat

/sbin/iptables -F -t mangle

/sbin/iptables -X

/sbin/iptables -X -t nat

/sbin/iptables -X -t mangle

echo Old Rules Flushed

#Устанавливаем правила на DROP по-умолчанию. (Set Default-Drop Policy)

/sbin/iptables -P INPUT DROP

/sbin/iptables -P OUTPUT DROP

#Create New Chain Called BAD_PACKETS

/sbin/iptables -N BAD_PACKETS

#Разрешаем работу локального интерфейса, того самого 127.0.0.1 (Allow The Loopback)

/sbin/iptables -A INPUT -i lo -j ACCEPT

#Jump To BAD_PACKETS

/sbin/iptables -A INPUT -j BAD_PACKETS

#Разрешаем поддерживать открытыми уже установленные соединения (Allow Established Connections)

/sbin/iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Разрешаем получать данные от DHCP-сервера. (Allow DHCP)

/sbin/iptables -A INPUT -p UDP --dport 68 --sport 67 -j ACCEPT

#Разрешаем присоединяться к SSH, при условии, что используется стандартный 22 порт (Allow SSH)

/sbin/iptables -A INPUT -p TCP -i eth0 --dport 22 -j ACCEPT

/sbin/iptables -A INPUT -p TCP -i eth0 --dport 22 -j ACCEPT

#Разрешаем сетевую печать на этом компьютере. (Allow net print)

/sbin/iptables -A INPUT -p UDP -i eth0 --dport 631 -j ACCEPT

#Разрешаем webmin на стандартном 10000 порту (Allow webmin)

/sbin/iptables -A INPUT -p TCP -i eth0 --dport 10000 -j ACCEPT

#Allow avahi-daemon

/sbin/iptables -A INPUT -p TCP -i eth0 --dport 5353 -j ACCEPT

#Allow input torrents-client

/sbin/iptables -A INPUT -p TCP -i eth0 --dport 51413 -j ACCEPT

/sbin/iptables -A INPUT -p UDP -i eth0 --dport 51413 -j ACCEPT

/sbin/iptables -A INPUT -p TCP -i eth0 --dport 6881 -j ACCEPT

/sbin/iptables -A INPUT -p UDP -i eth0 --dport 6881 -j ACCEPT

#Allow Samba From Specified Hosts

/sbin/iptables -A INPUT -p TCP -i eth0 --dport 137:139 -j ACCEPT

/sbin/iptables -A INPUT -p UDP -i eth0 --dport 137:139 -j ACCEPT

/sbin/iptables -A INPUT -p TCP -i eth0 --sport 137:139 -j ACCEPT

/sbin/iptables -A INPUT -p UDP -i eth0 --sport 137:139 -j ACCEPT

#Allow CMP Replies From Specified Hosts (Ping)

/sbin/iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j ACCEPT

/sbin/iptables -A INPUT -p ICMP -i eth0 --icmp-type 8 -j ACCEPT

#Разрешаем подключаться к SMTP на 587 порт

/sbin/iptables -A INPUT -p tcp --dport 587 -j ACCEPT

#Log

/sbin/iptables -A INPUT -j LOG --log-prefix "INPUT DROP: "

#Accept Loopback On OUTPUT

/sbin/iptables -A OUTPUT -o lo -j ACCEPT

#Разрешаем поддерживать открытыми уже установленные соединения. (Allow Established Connections)

/sbin/iptables -A OUTPUT -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

#Разрешить получать IP по DHCP (Allow DHCP)

/sbin/iptables -A OUTPUT -p UDP --dport 67 --sport 68 -j ACCEPT

#Allow HTTP, FTP, DNS, SSH, SMTP & Port 443 Outbound

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 443 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 80 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 53 -j ACCEPT

/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 53 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 25 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 22 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 21 -j ACCEPT

#Allow POP, IMAP

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 110 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 143 -j ACCEPT

#Allow IMAPS

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 993 -j ACCEPT

#Allow output ICQ

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 5190 -j ACCEPT

#Разрешить выход на IRC. Allow output IRC

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 6667 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 6668 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 6669 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 8001 -j ACCEPT

#Allow output CUPS (for printers in net)

/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 631 -j ACCEPT

#Allow output avahi-daemon

/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 5353 -j ACCEPT

#Allow output NTP (for ntpdate)

/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 123 -j ACCEPT

#Allow output Urban Terror (ну это просто необходимость)

/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 27960 -j ACCEPT

#Allow specify ports

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 2046 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 2050 -j ACCEPT

#Allow Samba From Specified Hosts

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 137:139 -j ACCEPT

/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 137:139 -j ACCEPT

/sbin/iptables -A OUTPUT -p TCP -o eth0 --dport 445 -j ACCEPT

/sbin/iptables -A OUTPUT -p UDP -o eth0 --dport 445 -j ACCEPT

#Allow ICMP

/sbin/iptables -A OUTPUT -p ICMP -o eth0 --icmp-type 8 -j ACCEPT

#Drop

/sbin/iptables -A OUTPUT -j LOG --log-prefix "OUTPUT DROP: "

/sbin/iptables -A BAD_PACKETS -p TCP ! --syn -m state --state NEW -j DROP

/sbin/iptables -A BAD_PACKETS -p TCP --tcp-flags ALL ALL -j DROP

/sbin/iptables -A BAD_PACKETS -p TCP --tcp-flags ALL NONE -j DROP

/sbin/iptables -A BAD_PACKETS -p TCP --tcp-flags ALL SYN \-m state --state ESTABLISHED -j DROP

/sbin/iptables -A BAD_PACKETS -p ICMP --fragment -j DROP

/sbin/iptables -A BAD_PACKETS -m state --state INVALID -j DROP

/sbin/iptables -A BAD_PACKETS -d 255.255.255.255 -j DROP

/sbin/iptables -A BAD_PACKETS -j RETURN

echo "Rules written."

=============================================================

# iptables -t filter -L

Вывести список всец цепочек правил

# iptables -t nat -L

Вывести все цепочки из NAT таблицы

# iptables -t nat -F

Очистить все цепочки правил в таблице NAT

# iptables -t filter -X

Очистить все пользовательские цепочки правил в таблице filter

# iptables -t filter -F

Очистить все цепочки правил в таблице filter

# iptables -t filter -A INPUT -p tcp --dport telnet -j ACCEPT

Разрешить входящие соединения с telnet

# iptables -t filter -A OUTPUT -p tcp --dport http -j DROP

Запретить исходящие HTTP соединения

# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

включить NAT (Network Address Translate) исходящих пакетов на интерфейс eth0. Допустимо при использовании с динамически выделяемыми ip-адресами.

# iptables -t nat -A PREROUTING -d 192.168.0.1 -p tcp -m tcp --dport 22 -j DNAT --to-destination 10.0.0.2:22

Пересылка пакетов, адресованных одному хосту, на другой хост

# iptables -t filter -A INPUT -j LOG --log-prefix

Включить логгирование пакетов, проходящих через цепочку INPUT, и добавлением к сообщению префикса "DROP INPUT"

# iptables -t filter -A FORWARD -p tcp --dport pop3 -j ACCEPT

Разрешить форвардинг POP3 соединений

===============================================

Как удалить в Iptables правило

----------------------------------------------------------------

iptables -L INPUT --line-numbers

iptables -D INPUT номер

iptables -t nat -L POSTROUTING --line-numbers

iptables -t nat -D POSTROUTING номер

-------------------------------------