Настройка iptables в CentOS + IP-TV

Статья последний раз была обновлена 27.07.2023

Возникла необходимость настроить заново роутер используя Linux. В качестве sandbox’a была взята достаточно мощная под эти нужды машинка: Celeron 2.3 Ghz, 512 DDR2 RAM, 110 GB HDD.

uname -a

— вывод —

Linux minxdrav.ru 2.6.18-194.17.4.el5 #1 SMP Mon Oct 25 15:51:07 EDT 2010 i686 i686 i386 GNU/Linux

Задача: необходимо раздавать интернеты. Учета нам не надо, по крайней мере сейчас. Если надо будет смотреть нагрузку — поставлю Nagios. Необходимо просто организовать сервер, который имел бы на борту dhcp, apache для работы/учебы/собственных проектов, samba и igmpproxy для смотрения IP-TV. IP-адрес мы получаем напрямую от провайдера — никаких VPN, L2TP и прочее здесь рассматриваться не будет.

Буду учитывать, что у вас уже стоит RPM подобная ОС (например CentOS или RHL), и исходя из этого, пути до некоторых скриптов могут различаться. Я выбрала CentOS, как одну из самых защищенных ОС (не ради холивара сказано). Итак. Сначала настроим dhcpd, чтобы он раздавал ip адреса всем устройствам подключенным к роутеру. Конфиг dhcpd:

cat /etc/dhcpd.conf

— вывод —

ddns-update-style interim;
not authoritative;
 
option domain-name-servers 8.8.8.8;
option subnet-mask 255.255.255.0;
option ntp-servers 195.189.239.2;
 
subnet 192.168.0.0 netmask 255.255.255.0 {
authoritative;
range 192.168.0.100 192.168.0.254;
option routers 192.168.0.15;
allow unknown-clients;
allow booting;
allow bootp;
next-server 192.168.0.15;
filename "pxelinux.0";
host workstation {
        option host-name "workstation";
        hardware ethernet 00:12:04:20:4F:DC;
        fixed-address 192.168.0.100;
    }
}

Если хотите сделать dhcp lease (выдавать всегда один и тот же IP-адрес), то создайте каждому из привязанных компьютеров отдельную директиву host. Роутер у меня в lan смотрит с IP-адресом 192.168.0.15. В wan с ipv4 адресом, который выдается провайдером и статичен.

eth0      Link encap:Ethernet  HWaddr 00:E1:4F:8A:F3:52
          inet addr:192.168.0.15  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:76412860 errors:0 dropped:0 overruns:0 frame:0
          TX packets:87997501 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:878317362 (837.6 MiB)  TX bytes:3277225758 (3.0 GiB)
          Interrupt:169 Base address:0x2000
eth1      Link encap:Ethernet  HWaddr 00:AD:F1:4F:12:11
          inet addr:172.20.21.43  Bcast:172.20.21.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:111604876 errors:1918 dropped:652 overruns:346 frame:0
          TX packets:102192491 errors:0 dropped:0 overruns:1 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3253943371 (3.0 GiB)  TX bytes:742431041 (708.0 MiB)
          Interrupt:201 Base address:0x2000
  • eth1 — внешний (wan) интерфейс
  • eth0 — внутренний (lan) интерфейс

Исходя из этого настройки для eth1 такие:

cat /etc/sysconfig/network-scripts/ifcfg-eth1

— вывод —

# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth1
BOOTPROTO=dhcp
HWADDR=00:AD:F1:4F:12:11
ONBOOT=yes

А для eth0 статичные:

cat /etc/sysconfig/network-scripts/ifcfg-eth0

— вывод —

# Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.0.15
NETMASK=255.255.255.0
HWADDR=00:E1:4F:8A:F3:52
ONBOOT=yes

Можем попробовать стартануть dhcpd:

service dhcpd start

Если все в порядке всем подключенным устройствам, которые получают IP-адреса по dhcp должны выдаться айпишники.

Потом можем включить запуск dhcpd при старте системы.

chkconfig --level 345 dhcpd on
chkconfig --list | grep dhcp

— вывод —

dhcpd           0:выкл  1:выкл  2:выкл  3:вкл   4:вкл   5:вкл   6:выкл

Настройка iptables

Итак, переходим к самому главному — настройке iptables. Весь трафик будет направляться с помощью него. Так же мы реализуем защиту от некоторых типов атак. Для того, чтобы не мудрить ничего со скриптами, я пишу все вручную сразу же в файл правил iptables, который можно найти по пути /etc/sysconfig/iptables.

cat /etc/sysconfig/iptables

— вывод —

# Generated by iptables-save v1.3.5 on Sat Feb 12 22:33:45 2011
*mangle
:PREROUTING ACCEPT [16227109:13393411926]
:INPUT ACCEPT [2831999:1288367909]
:FORWARD ACCEPT [13381890:12101945321]
:OUTPUT ACCEPT [4421349:5811697252]
:POSTROUTING ACCEPT [17809930:17913843359]
-A PREROUTING -d 224.0.0.0/240.0.0.0 -p udp -j TTL --ttl-inc 1
COMMIT
# Completed on Sat Feb 12 22:33:45 2011
# Generated by iptables-save v1.3.5 on Sat Feb 12 22:33:45 2011
*filter
:INPUT ACCEPT [2675290:1156848403]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4421234:5811684759]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -i eth1 -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -d 172.20.21.43 -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -d 172.20.21.43 -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -d 172.20.21.43 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -d 172.20.21.43 -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -d 172.20.21.43 -p gre -j ACCEPT
-A INPUT -d 224.0.0.0/240.0.0.0 -i eth1 -j ACCEPT
-A INPUT -s 224.0.0.0/240.0.0.0 -i eth1 -j ACCEPT
-A INPUT -i eth1 -p gre -j ACCEPT
-A INPUT -i eth1 -p tcp -m tcp --dport 1723 -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -m limit --limit 1/sec -j ACCEPT
-A FORWARD -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK RST -m limit --limit 1/sec -j ACCEPT
-A FORWARD -p icmp -m icmp --icmp-type 8 -m limit --limit 1/sec -j ACCEPT
-A FORWARD -d 224.0.0.0/240.0.0.0 -j ACCEPT
-A FORWARD -s 224.0.0.0/240.0.0.0 -j ACCEPT
-A FORWARD -j ACCEPT
-A OUTPUT -o eth0 -p gre -j ACCEPT
-A OUTPUT -o eth0 -p tcp -m tcp --dport 1723 -j ACCEPT
COMMIT
# Completed on Sat Feb 12 22:33:45 2011
# Generated by iptables-save v1.3.5 on Sat Feb 12 22:33:45 2011
*nat
:PREROUTING ACCEPT [102290:13380449]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [4360:349447]
-A PREROUTING -d 172.20.21.43 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.0.100
-A PREROUTING -d 172.20.21.43 -p tcp -m tcp --dport 30001 -j DNAT --to-destination 192.168.0.100
-A PREROUTING -d 172.20.21.43 -p udp -m udp --dport 30002 -j DNAT --to-destination 192.168.0.100
-A PREROUTING -d 172.20.21.43 -p udp -m udp --dport 5070 -j DNAT --to-destination 192.168.0.100
-A PREROUTING -d 172.20.21.43 -p tcp -m tcp --dport 8000 -j DNAT --to-destination 192.168.0.100
-A PREROUTING -d 172.20.21.43 -p tcp -m tcp --dport 31337 -j DNAT --to-destination 192.168.0.100
-A PREROUTING -d 172.20.21.43 -p udp -m udp --dport 31337 -j DNAT --to-destination 192.168.0.100
-A PREROUTING -d 172.20.21.43 -p tcp -m tcp --dport 8333 -j DNAT --to-destination 192.168.0.100
-A POSTROUTING -j MASQUERADE
COMMIT
# Completed on Sat Feb 12 22:33:45 2011

В данной настройки с помощью PREROUTING я сделала «проброс портов» на свою рабочую станцию. Все порты, которые перечисленны мной используются для различных программ и прочего. Так же здесь реализован пропуск протокола GRE, который необходим если с LAN машин вы собрались работать через VPN (бывает необходимость залезть в офисную сеть). Также не забываем, в этом случае открыть порт 1723, который используется VPN.

Еще я сделала для себя правило для multicast, который у нас используется для вещания IP-TV. У меня на рабочей станции есть телефония, которая работает через SIP протокол. По умолчанию работать не хотело, но после подключения модулей nf_conntrack_sip и nf_nat_sip все заработало. Подключаются модули следующим образом:

modprobe nf_conntrack_sip
modprobe nf_nat_sip

Правило -A PREROUTING -d 224.0.0.0/240.0.0.0 -p udp -j TTL —ttl-inc 1 выставляет правильные TTL для пакетов мультикаста. По умолчанию IP-TV работать не хотело, даже когда я настроила igmpproxy. После установки этого правила все заработало.

Настройка igmpproxy

Итак, переходим к последнему пункту — настройке igmpproxy.

Тут все пошагово. Подключим необходимые репозитории для i386 архитектуры:

1. Устанавливаем EPEL репозиторий.

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm

2. Устанавливаем CentALT репозиторий.

rpm -ihv http://centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

Теперь для x86_64 архитектуры:

1. Устанавливаем EPEL репозиторий.

rpm -ihv http://download.fedora.redhat.com/pub/epel/5/x86_64/epel-release-5-4.noarch.rpm

2. Устанавливаем CentALT репозиторий.

rpm -ihv http://centos.alt.ru/repository/centos/5/x86_64/centalt-release-5-3.noarch.rpm

Установим igmpproxy:

yum install igmpproxy

Конфиг igmpproxy:

cat /etc/igmpproxy.conf

— вывод —

phyint eth0 downstream ratelimit 0 threshold 1
        altnet 192.168.0.0/24
phyint eth1 upstream ratelimit 0 threshold 1
        altnet 239.1.0.0/16
        altnet 10.245.0.0/16
        altnet 239.255.255.0/24

Запускаем imgpproxy и смотрим IP-TV.

Все, на данном настройка сервера закончена!

Губарь Маргарита Александровна

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

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