CentOS / Redhat Iptables Настройка брандмауэра

Как настроить брандмауэр называется Netfilter (Iptables) в CentOS / RHEL / Fedora / RedHat Enterprise Linux?

Netfilter представляет собой брандмауэр для систем Linux операционной. Он входит в состав дистрибутива, и она включена по умолчанию. Этот брандмауэр контролирует программу IPTables. Netfilter фильтрация происходит на уровне ядра, прежде чем программа может даже обрабатывать данные из сети пакетов.

Iptables конфигурационный файл

По умолчанию конфигурационные файлы для RHEL / CentOS / Fedora Linux являются:

/etc/sysconfig/iptables — системные скрипты, которые активируют брандмауэр, читая этот файл.

Отображения правила по умолчанию

Введите следующую команду:

iptables —line-numbers -n -L

Пример результатов:

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255
3    ACCEPT     udp  --  0.0.0.0/0            224.0.0.251         udp dpt:5353
4    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:53
5    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
6    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:53
8    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited
Включить брандмауэр

Введите следующие команды, чтобы включить брандмауэр:

chkconfig iptables on
service iptables start
# restart the firewall
service iptables restart
# stop the firewall
service iptables stop
Понимание Firewall

Есть всего 4 цепочек

  1. Input — по умолчанию цепочка используется для пакетов, адресованных к системе. Используйте это, чтобы открыть или закрыть входящие порты (например, 80,25 и 110 и т.д.) и IP-адреса / подсети (например, 202.54.1.20/29).
  2. Output — по умолчанию используется цепь, когда пакеты формируются из системы. Используйте это открытие или закрытие исходящих портов и IP адресов / подсетей.
  3. FORWARD — По умолчанию цепи используется, когда пакеты отправлять через другой интерфейс. Обычно используется, когда вы настроить Linux в качестве маршрутизатора. Например, eth0 подключен к ADSL / кабельных модемов и eth1 подключен к локальной сети. Используйте FORWARD цепи отправлять и получать трафик из локальной сети к Интернету.
  4. RH-Firewall-1-INPUT — Это определяемое пользователем сети. Он используется ввод, вывод и вперед цепи.
Пакет соответствующих правил
  1. Каждый пакет начинается в первое правило в цепочке.
  2. Пакет продолжается, пока не соответствует правилу.
  3. Если совпадение найдено, то управление перейдет к указанной цели (например, REJECT, ACCEPT, DROP).
Значения целевых
  • Целевые средства позволят ACCEPT пакета.
  • Целевая REJECT значит отбросить пакет и отправить сообщение об ошибке на удаленном хосте.
  • Целевая DROP означает отбросить пакет и не посылают сообщение об ошибке удаленный хост или хост-отправитель.
/etc/sysconfig/iptables

Редактировать /etc/sysconfig/iptables, введите:

# vi /etc/sysconfig/iptables

Вы увидите правила по умолчанию следующим образом:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
Отбросьте все трафик

Найти строки:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

Обновление, как следует изменить политику по умолчанию отказаться от принять за вход и вперед встроенные цепи:

:INPUT DROP [0:0]
:FORWARD DROP [0:0]
Log и Drop Spoofing адрес источника

Добавьте следующие строки перед окончательным COMMIT строки:

-A INPUT -i eth0 -s 10.0.0.0/8 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 172.16.0.0/12 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 192.168.0.0/16 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -s 224.0.0.0/4 -j LOG --log-prefix "IP DROP MULTICAST "
-A INPUT -i eth0 -s 240.0.0.0/5 -j LOG --log-prefix "IP DROP SPOOF "
-A INPUT -i eth0 -d 127.0.0.0/8 -j LOG --log-prefix "IP DROP LOOPBACK "
-A INPUT -i eth0 -s 169.254.0.0/16  -j LOG --log-prefix "IP DROP MULTICAST "
-A INPUT -i eth0 -s 0.0.0.0/8  -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s  240.0.0.0/4  -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s  255.255.255.255/32  -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 168.254.0.0/16  -j LOG --log-prefix "IP DROP "
-A INPUT -i eth0 -s 248.0.0.0/5  -j LOG --log-prefix "IP DROP "
Log и Drop Весь трафик

Найдите следующие строки:

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

Обновление его следующим образом:

-A RH-Firewall-1-INPUT -j LOG
-A RH-Firewall-1-INPUT -j DROP
COMMIT
Открытие порта

Чтобы открыть порт 80 (HTTP-сервер), добавьте следующие линии до COMMIT

-A RH-Firewall-1-INPUT -m tcp -p tcp —dport 80 -j ACCEPT

Чтобы открыть порт 53 (DNS Server) добавьте следующие линии до COMMIT

-A RH-Firewall-1-INPUT -m tcp -p tcp —dport 53 -j ACCEPT

-A RH-Firewall-1-INPUT -m udp -p tcp —dport 53 -j ACCEPT

Чтобы открыть порт 443 (HTTPS сервер) добавьте следующие линии до COMMIT:

-A RH-Firewall-1-INPUT -m tcp -p tcp —dport 443 -j ACCEPT

Чтобы открыть порт 25 (SMTP-сервер) добавьте следующие линии до COMMIT:

-A RH-Firewall-1-INPUT -m tcp -p tcp —dport 25 -j ACCEPT

Только позвольте SSH трафик от 192.168.1.0/24

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state —state NEW -p tcp —dport 22 -j ACCEPT

Включить доступ для печати 192.168.1.0/24

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -p udp -m udp —dport 631 -j ACCEPT

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -p tcp -m tcp —dport 631 -j ACCEPT

Разрешить законные клиенты NTP для доступа к серверу

-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state —state NEW -p udp —dport 123 -j ACCEPT

Открытый FTP-порт 21 (FTP)

-A RH-Firewall-1-INPUT -m state —state NEW -p tcp —dport 21 -j ACCEPT

Сохраните и закройте файл. Редактировать /etc/sysconfig/iptables-config, введите:

# vi /etc/sysconfig/iptables-config

Убедитесь, что FTP-модуль загружается с пробелами список модулей:

IPTABLES_MODULES=»ip_conntrack_ftp»

Чтобы перезапустить брандмауэр, введите следующие команды:

# service iptables restart

# iptables -vnL —line-numbers

Редактировать /etc/sysctl.conf для DoS и SYN защиты

Редактировать /etc/sysctl.conf для защиты от определенных видов атак и добавить / обновить следующим образом:

net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
#net.ipv4.icmp_ignore_bogus_error_messages = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
Альтернативный вариант конфигурации

Вы можете пропустить /etc/sysconfig/iptables файл и создать скрипт с нуля следующим образом:

#!/bin/bash
# A sample firewall shell script 
IPT="/sbin/iptables"
SPAMLIST="blockedip"
SPAMDROPMSG="BLOCKED IP DROP"
SYSCTL="/sbin/sysctl"
BLOCKEDIPS="/root/scripts/blocked.ips.txt"

# Stop certain attacks
echo "Setting sysctl IPv4 settings..."
$SYSCTL net.ipv4.ip_forward=0
$SYSCTL net.ipv4.conf.all.send_redirects=0
$SYSCTL net.ipv4.conf.default.send_redirects=0
$SYSCTL net.ipv4.conf.all.accept_source_route=0
$SYSCTL net.ipv4.conf.all.accept_redirects=0
$SYSCTL net.ipv4.conf.all.secure_redirects=0
$SYSCTL net.ipv4.conf.all.log_martians=1
$SYSCTL net.ipv4.conf.default.accept_source_route=0
$SYSCTL net.ipv4.conf.default.accept_redirects=0
$SYSCTL net.ipv4.conf.default.secure_redirects=0
$SYSCTL net.ipv4.icmp_echo_ignore_broadcasts=1
#$SYSCTL net.ipv4.icmp_ignore_bogus_error_messages=1
$SYSCTL net.ipv4.tcp_syncookies=1
$SYSCTL net.ipv4.conf.all.rp_filter=1
$SYSCTL net.ipv4.conf.default.rp_filter=1
$SYSCTL kernel.exec-shield=1
$SYSCTL kernel.randomize_va_space=1

echo "Starting IPv4 Firewall..."
$IPT -F
$IPT -X
$IPT -t nat -F
$IPT -t nat -X
$IPT -t mangle -F
$IPT -t mangle -X

# load modules
modprobe ip_conntrack

[ -f "$BLOCKEDIPS" ] && BADIPS=$(egrep -v -E "^#|^$" "${BLOCKEDIPS}")

# interface connected to the Internet 
PUB_IF="eth0"

#Unlimited traffic for loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT

# DROP all incomming traffic
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP

if [ -f "${BLOCKEDIPS}" ];
then
# create a new iptables list
$IPT -N $SPAMLIST

for ipblock in $BADIPS
do
   $IPT -A $SPAMLIST -s $ipblock -j LOG --log-prefix "$SPAMDROPMSG "
   $IPT -A $SPAMLIST -s $ipblock -j DROP
done

$IPT -I INPUT -j $SPAMLIST
$IPT -I OUTPUT -j $SPAMLIST
$IPT -I FORWARD -j $SPAMLIST
fi

# Block sync
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW  -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Drop Sync"
$IPT -A INPUT -i ${PUB_IF} -p tcp ! --syn -m state --state NEW -j DROP

# Block Fragments
$IPT -A INPUT -i ${PUB_IF} -f  -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fragments Packets"
$IPT -A INPUT -i ${PUB_IF} -f -j DROP

# Block bad stuff
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL FIN,URG,PSH -j DROP
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL ALL -j DROP

$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "NULL Packets"
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL NONE -j DROP # NULL packets

$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "XMAS Packets"
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP #XMAS

$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -m limit --limit 5/m --limit-burst 7 -j LOG --log-level 4 --log-prefix "Fin Packets Scan"
$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags FIN,ACK FIN -j DROP # FIN packet scans

$IPT  -A INPUT -i ${PUB_IF} -p tcp --tcp-flags ALL SYN,RST,ACK,FIN,URG -j DROP

# Allow full outgoing connection but no incomming stuff
$IPT -A INPUT -i ${PUB_IF} -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -o ${PUB_IF} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

# Allow ssh
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 22 -j ACCEPT

# Allow http / https (open port 80 / 443)
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 80 -j ACCEPT
#$IPT -A INPUT -o ${PUB_IF} -p tcp --destination-port 443 -j ACCEPT

# allow incomming ICMP ping pong stuff
$IPT -A INPUT -i ${PUB_IF} -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -A OUTPUT -o ${PUB_IF} -p icmp --icmp-type 0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow port 53 tcp/udp (DNS Server)
$IPT -A INPUT -i ${PUB_IF} -p udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#$IPT -A OUTPUT -o ${PUB_IF} -p udp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 53 -m state --state NEW,ESTABLISHED,RELATED  -j ACCEPT
#$IPT -A OUTPUT -o ${PUB_IF} -p tcp --sport 53 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Open port 110 (pop3) / 143
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 110 -j ACCEPT
$IPT -A INPUT -i ${PUB_IF} -p tcp --destination-port 143 -j ACCEPT

##### Add your rules below ######
#
# 
##### END your rules ############

# Do not log smb/windows sharing packets - too much logging
$IPT -A INPUT -p tcp -i ${PUB_IF} --dport 137:139 -j REJECT
$IPT -A INPUT -p udp -i ${PUB_IF} --dport 137:139 -j REJECT

# log everything else and drop
$IPT -A INPUT -j LOG
$IPT -A FORWARD -j LOG
$IPT -A INPUT -j DROP

exit 0

Оригинал ddos.am/ddos-atack/anti-ddos-programs/iptables/33-centos-redhat-iptables-firewall-configuration-tutorial.html

Запись опубликована в рубрике *CentOS. Добавьте в закладки постоянную ссылку.

Один комментарий на «CentOS / Redhat Iptables Настройка брандмауэра»

  1. Я говорит:

    sf-alpha.bjgang.org/wordpress/2012/09/openvpn-custom-ports-and-execute-brctl-with-selinux-enabled/
    alkom.by/alkomnet/archives/48

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91