Я использую CentOS 6.4 внутри контейнера OpenVZ. Я пытаюсь настроить APF 9.7-2, чтобы разрешить входящий трафик SSH и HTTP (только) и исходящий трафик HTTP и HTTPS (не важно, работает ли другой исходящий трафик). В моем файле conf.apf заданы значения по умолчанию, со следующими исключениями:
IFACE_IN="venet0"
IFACE_OUT="venet0"
SET_MONOKERN="1"
SYSCTL_CONNTRACK="131072"
IG_TCP_CPORTS="22,80"
LOG_DROP="1"
(Обратите внимание, что я не включил исходящую фильтрацию; EGF по-прежнему равен 0.)
Когда я запускаю APF, я обнаруживаю, что все исходящие соединения заблокированы.
[root@beta ~]# wget http://www.google.com
--2013-11-19 17:21:02-- http://www.google.com/
Resolving www.google.com... 173.194.115.20, 173.194.115.16, 173.194.115.19, ...
Connecting to www.google.com|173.194.115.20|:80...
Это не завершено. Я вижу, что трафик блокируется правилом для входящего трафика: (я заменил свой IP-адрес сервера на 1.2.3.4)
[root@beta ~]# grep "173.194" /var/log/messages | tail
Nov 19 17:21:02 beta kernel: ** IN_TCP DROP ** IN=venet0 OUT= MAC= SRC=173.194.115.20 DST=1.2.3.4 LEN=48 TOS=0x08 PREC=0x00 TTL=57 ID=18487 PROTO=TCP SPT=80 DPT=57092 WINDOW=42900 RES=0x00 ACK SYN URGP=0
Nov 19 17:21:02 beta kernel: ** IN_TCP DROP ** IN=venet0 OUT= MAC= SRC=173.194.115.20 DST=1.2.3.4 LEN=48 TOS=0x08 PREC=0x00 TTL=57 ID=18488 PROTO=TCP SPT=80 DPT=57092 WINDOW=42900 RES=0x00 ACK SYN URGP=0
Nov 19 17:21:03 beta kernel: ** IN_TCP DROP ** IN=venet0 OUT= MAC= SRC=173.194.115.20 DST=1.2.3.4 LEN=48 TOS=0x08 PREC=0x00 TTL=57 ID=18489 PROTO=TCP SPT=80 DPT=57092 WINDOW=42900 RES=0x00 ACK SYN URGP=0
Nov 19 17:21:04 beta kernel: ** IN_TCP DROP ** IN=venet0 OUT= MAC= SRC=173.194.115.20 DST=1.2.3.4 LEN=48 TOS=0x08 PREC=0x00 TTL=57 ID=18490 PROTO=TCP SPT=80 DPT=57092 WINDOW=42900 RES=0x00 ACK SYN URGP=0
Nov 19 17:21:05 beta kernel: ** IN_TCP DROP ** IN=venet0 OUT= MAC= SRC=173.194.115.20 DST=1.2.3.4 LEN=48 TOS=0x08 PREC=0x00 TTL=57 ID=18491 PROTO=TCP SPT=80 DPT=57092 WINDOW=42900 RES=0x00 ACK SYN URGP=0
Nov 19 17:21:07 beta kernel: ** IN_TCP DROP ** IN=venet0 OUT= MAC= SRC=173.194.115.20 DST=1.2.3.4 LEN=48 TOS=0x08 PREC=0x00 TTL=57 ID=18492 PROTO=TCP SPT=80 DPT=57092 WINDOW=42900 RES=0x00 ACK SYN URGP=0
Nov 19 17:21:11 beta kernel: ** IN_TCP DROP ** IN=venet0 OUT= MAC= SRC=173.194.115.20 DST=1.2.3.4 LEN=48 TOS=0x08 PREC=0x00 TTL=57 ID=18493 PROTO=TCP SPT=80 DPT=57092 WINDOW=42900 RES=0x00 ACK SYN URGP=0
Значение DPT меняется при каждом запросе.
Я подтвердил, что исходящие HTTP и HTTPS работают, когда APF выключен. Что мне нужно сделать, чтобы он работал с APF?
Я нашел проблему. В конфигурации контейнера на аппаратном узле должны быть включены правильные модули iptables. По умолчанию для контейнеров на моем сервере было:
IPTABLES="ipt_REJECT ipt_tos ipt_limit ipt_multiport iptable_filter iptable_mangle ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_length"
Я переопределил это в конфигурации моего контейнера (/etc/vz/conf/CONTAINERNUMBER.conf на оборудовании)
IPTABLES="iptable_filter iptable_mangle ipt_limit ipt_multiport ipt_tos ipt_TOS ipt_REJECT ipt_TCPMSS ipt_tcpmss ipt_ttl ipt_LOG ipt_length ip_conntrack ip_conntrack_ftp ip_conntrack_irc ipt_conntrack ipt_state ipt_helper iptable_nat ip_nat_ftp ip_nat_irc ipt_REDIRECT"
Я не уверен, какие именно из них мне нужны, но с этой конфигурацией и входящие, и исходящие фильтры работают должным образом.
Я видел этот совет в другом месте в Интернете, но он, похоже, подразумевал, что вам нужно установить IPTABLES, чтобы iptables вообще работал, тогда как в моем случае iptables работал (хотя и с ошибками) без моей установки.