FastNetMon

Showing posts with label iptables. Show all posts
Showing posts with label iptables. Show all posts

Monday, 21 December 2009

Активация модулей ipt_state и ip_conntrack для OpenVZ VE

Открываем конфиг IPTABLES:
vi /etc/sysconfig/iptables-config


Ищем там строку:
IPTABLES_MODULES="ip_conntrack_netbios_ns"


Добавляем в нее наши модули через пробел:
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack ipt_state"


Перезапускаем iptables:
/etc/init.d/iptables restart


Открываем конфиг VE:
vi /etc/vz/conf/$VEID.conf


Ищем существующую строку либо добавляем сами строку (если строка уже была, то необходимо добавить последних три модуля в список, причем iptable_filter является обязательным, но указывается только в конфиге VE, но не глобальном):
IPTABLES="ip_tables ip_conntrack ipt_state iptable_filter"


Перезапускаем контейнер:
vzctl restart $VEID


Все, теперь -m state --state RELATED будет работать внутри контейнера :)

Мануал от Parallels по iptables http://kb.parallels.com/en/746

В каких отношениях состоят ip_conntrack и ipt_state?

Вот сейчас клиент попросил поставить для VE модуль ipt_state, поэтому задумался, он ли один нужен или еще ip_conntrack необходимо включить. Ну судя по логике, conntrack используется для режима state который "RELATED". Так что связаны :)

Sunday, 20 December 2009

Срезать mac чужих серверов на уровне IPTABLES

Многие хостеры (да и провайдеры, думаю) вылавливают в сети не свои DHCP и забивают их lease целиком. Но можно средствами фаерволла перекрыть доступ к DHCP всем, кроме своих серверов:

iptables -A INPUT -p tcp --dport 67:68 -m mac --mac-source 00:50:56:2F:97:69 -j ACCEPT
iptables -A INPUT -p tcp --dport 67:68 -j DROP


источник: http://shirwablog.com/?p=26

iptables: забанить диапазон

/sbin/iptables -A INPUT -m iprange --src-range 193.169.0.0-193.169.255.255 -j DROP

Saturday, 19 December 2009

Подключение ip_conntrack_ftp на CentOS 5 / OpenVZ

На хост-машине делаем следующее:

vi /etc/sysconfig/iptables-config


Там видим нечто типа:
IPTABLES_MODULES="ip_conntrack_netbios_ns"


Добавляем через пробел еще один модуль:
IPTABLES_MODULES="ip_conntrack_netbios_ns ip_conntrack_ftp"


Перезапускаем фаерволл:
/etc/init.d/iptables restart


Убеждаемся, что модуль загрузился:
cat /proc/modules | grep ftp
ip_conntrack_ftp 42192 0 - Live 0xffffffff8869b000 (U)
ip_conntrack 101396 6 ip_conntrack_ftp,ip_conntrack_netbios_ns,iptable_nat,xt_state,ip_nat, Live 0xffffffff8853f000 (U)


Теперь открываем конфиг контейнера:
vi /etc/vz/conf/1420.conf


Видим там следующую строку:
IPTABLES="ip_tables iptable_filter iptable_mangle ipt_limit ipt_REJECT ipt_length ip_conntrack iptable_nat ipt_REDIRECT "


добавляем туда через пробел ip_conntrack_ftp:
IPTABLES="ip_tables iptable_filter iptable_mangle ipt_limit ipt_REJECT ipt_length ip_conntrack iptable_nat ipt_REDIRECT ip_conntrack_ftp"



Перезапускаем контейнер (это обязательно, увы):

vzctl restart 1420

Ну вот и все, теперь модуль доступен в контейнере :) Кстати, как я понял - модуль не имеет настроек как таковых, он просто хачит поведение опции RELATED, чтобы она и ftp коннекты оными считала.

источник: http://forum.openvz.org/index.php?t=msg&goto=13133&

Wednesday, 16 December 2009

iptables: разрешить SSH на сервере

iptables -P INPUT DROP # блокируем все соединения, кроме явно разрешенных
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT # разрешаем соединение с ssh портом
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # разрешаем все установленные и связанные соединения


Итого:

iptables -vL
Chain INPUT (policy DROP 94 packets, 7040 bytes)
pkts bytes target prot opt in out source destination
5 320 ACCEPT tcp -- any any anywhere anywhere tcp dpt:ssh state NEW
88 10745 ACCEPT all -- any any anywhere anywhere state RELATED,ESTABLISHED

Chain FORWARD (policy DROP 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 143 packets, 16395 bytes)
pkts bytes target prot opt in out source destination

Ограничить число одновременных соединений посредством iptables


iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 -j REJECT


Сохраняем:
iptables-save


А можно это все протестировать мини DoS атакой с другого узла:

ab -c 100 -n 1000 ip.ad.dr.es/


И видим:

iptables -vL
Chain INPUT (policy ACCEPT 11352 packets, 3260K bytes)
pkts bytes target prot opt in out source destination
11437 3265K ISPMGR all -- any any anywhere anywhere
85 5100 REJECT tcp -- any any anywhere anywhere tcp dpt:http flags:FIN,SYN,RST,ACK/SYN #conn/32 > 15 reject-with icmp-port-unreachable

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 11953 packets, 8313K bytes)
pkts bytes target prot opt in out source destination
11953 8313K ISPMGR all -- any any anywhere anywhere

Chain ISPMGR (2 references)
pkts bytes target prot opt in out source destination


Что ровно 15 пакетов были пропущены, а 85 отбиты, как нам и требовалось :)

Tuesday, 15 December 2009

Что делать если фаерволл блокирует весь трафик?

Есть ряд команд, которые в этом случае будут полезны:

iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -F


Все их выполнять разом не нужно, достаточно последовательного запуска.

iptables default policy

Кроме как политики явного отбоя всего трафика через DROP в iptables есть очень интересный механизм, который позволяет задавать для цепочек стандартное правило.

Выглядит это так:

iptables -L
Chain INPUT (policy DROP)
target prot opt source destination

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


Как можн о увидеть, стандартная политика для INPUT и FORWARD - DROP. Что приводит к отбою всего трафика. Как же в таком случае разрешить входящий трафик?

Легко:

iptables -P INPUT ACCEPT


После этого цепочка INPUT примет вид:
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination

Chain FORWARD (policy DROP)
target prot opt source destination

Chain OUTPUT (policy ACCEPT)
target prot opt source destination


И сеть заработает :)

Мануал по iptables

http://www.linuxhomenetworking.com/wiki/index.php/Quick_HOWTO_:_Ch14_:_Linux_Firewalls_Using_iptables

Как узнать, какие модули поддерживает iptables?

Не нашел стандартной команды для этого, поэтому юзаем хаки.

Для CentOS 5.4 это:

ls /lib/iptables/ # 32bit
/lib64/iptables/ # 64 bit


Для Debian 5 это:

ls /lib/xtables/


А вот стандартные списки модулей для Деби

ls /lib/xtables/
libip6t_ah.so libipt_addrtype.so libipt_REDIRECT.so libxt_connmark.so libxt_mark.so libxt_standard.so
libip6t_dst.so libipt_ah.so libipt_REJECT.so libxt_CONNMARK.so libxt_MARK.so libxt_state.so
libip6t_eui64.so libipt_CLUSTERIP.so libipt_SAME.so libxt_CONNSECMARK.so libxt_multiport.so libxt_statistic.so
libip6t_frag.so libipt_DNAT.so libipt_set.so libxt_conntrack.so libxt_NFLOG.so libxt_string.so
libip6t_hbh.so libipt_ecn.so libipt_SET.so libxt_dccp.so libxt_NFQUEUE.so libxt_tcpmss.so
libip6t_hl.so libipt_ECN.so libipt_SNAT.so libxt_dscp.so libxt_NOTRACK.so libxt_TCPMSS.so
libip6t_HL.so libipt_icmp.so libipt_ttl.so libxt_DSCP.so libxt_owner.so libxt_TCPOPTSTRIP.so
libip6t_icmp6.so libipt_LOG.so libipt_TTL.so libxt_esp.so libxt_physdev.so libxt_tcp.so
libip6t_ipv6header.so libipt_MASQUERADE.so libipt_ULOG.so libxt_hashlimit.so libxt_pkttype.so libxt_time.so
libip6t_LOG.so libipt_MIRROR.so libipt_unclean.so libxt_helper.so libxt_quota.so libxt_tos.so
libip6t_mh.so libipt_NETMAP.so libxt_CLASSIFY.so libxt_iprange.so libxt_rateest.so libxt_TOS.so
libip6t_policy.so libipt_policy.so libxt_comment.so libxt_length.so libxt_RATEEST.so libxt_TRACE.so
libip6t_REJECT.so libipt_realm.so libxt_connbytes.so libxt_limit.so libxt_sctp.so libxt_u32.so
libip6t_rt.so libipt_recent.so libxt_connlimit.so libxt_mac.so libxt_SECMARK.so libxt_udp.so



И для Центоса:

ls /lib/iptables/
libip6t_ah.so libip6t_mac.so libipt_addrtype.so libipt_esp.so libipt_NFQUEUE.so libipt_state.so
libip6t_connmark.so libip6t_mark.so libipt_ah.so libipt_hashlimit.so libipt_NOTRACK.so libipt_string.so
libip6t_CONNMARK.so libip6t_MARK.so libipt_CLASSIFY.so libipt_helper.so libipt_owner.so libipt_TARPIT.so
libip6t_DSCP.so libip6t_multiport.so libipt_CLUSTERIP.so libipt_icmp.so libipt_physdev.so libipt_tcpmss.so
libip6t_dst.so libip6t_NFQUEUE.so libipt_comment.so libipt_iprange.so libipt_pkttype.so libipt_TCPMSS.so
libip6t_eui64.so libip6t_owner.so libipt_connlimit.so libipt_length.so libipt_policy.so libipt_tcp.so
libip6t_frag.so libip6t_physdev.so libipt_connmark.so libipt_limit.so libipt_realm.so libipt_tos.so
libip6t_hbh.so libip6t_policy.so libipt_CONNMARK.so libipt_LOG.so libipt_recent.so libipt_TOS.so
libip6t_hl.so libip6t_REJECT.so libipt_conntrack.so libipt_mac.so libipt_REDIRECT.so libipt_TRACE.so
libip6t_HL.so libip6t_rt.so libipt_dccp.so libipt_mark.so libipt_REJECT.so libipt_ttl.so
libip6t_icmpv6.so libip6t_standard.so libipt_DNAT.so libipt_MARK.so libipt_rpc.so libipt_TTL.so
libip6t_ipv6header.so libip6t_state.so libipt_dscp.so libipt_MASQUERADE.so libipt_SAME.so libipt_udp.so
libip6t_length.so libip6t_tcp.so libipt_DSCP.so libipt_MIRROR.so libipt_sctp.so libipt_ULOG.so
libip6t_limit.so libip6t_TRACE.so libipt_ecn.so libipt_multiport.so libipt_SNAT.so libipt_unclean.so
libip6t_LOG.so libip6t_udp.so libipt_ECN.so libipt_NETMAP.so libipt_standard.so


Кстати, указанные способы работают не всегда (как я понял - в выдачу не включены "стандартные" модули iptables), поэтому вот еще вариант:

find /lib* | grep netfilter



Честно говоря, для меня стало откровением, что модули connlimit, string, стандартно и там и там поддерживается. А ipset есть только в Debian, а tarpit только в CentOS.

Tuesday, 27 October 2009