iptables restrict access based on time

Като съм започнал с howto like статиите, нека да напиша подобна и за едно от другите неща, които ми се наложи да правя експресно напоследък. А именно ограничаване на достъпа до дадена услуга базирано на времето (час, ден, седмица, месец…). Начини да се направи това има доста, но аз се спрях на този с iptables.
Time модула, обаче не се поддържа по подразбиране и е необходимо пачване на iptables и ядрото с patch-o-matic. Това всъщност не е точно така, посредством xtables в по-новите версии на ядрото и iptables поддръжката на time модула (а и не само) е налична. Но CentOS 5 ползва ядро 2.6.18 и iptables 1.3.5, така че са необходими някои промени. И така ето и основните стъпки, по които трябва да преминем ако имаме желание да филтрираме достъп на базата на времето.

  • Инсталираме някои нужни пакети ако не са налични:
yum install kernel-devel kernel-headers iptables-devel ncurses ncurses-devel rpm-build redhat-rpm-config
  • Сваляме и инсталираме src rpm пакетите на ядрото и iptables:
cd /usr/local/src/
wget http://ftp.iasi.roedu.net/mirrors/centos.org/5.3/updates/SRPMS/kernel-2.6.18-128.7.1.el5.src.rpm
wget http://centos.nano-box.net/5.3/os/SRPMS/iptables-1.3.5-4.el5.src.rpm
rpm -ivh kernel-2.6.18-128.7.1.el5.src.rpm
rpm -ivh iptables-1.3.5-4.el5.src.rpm
  • Билдваме модифицирания код на ядрото.
cd /usr/src/redhat/SPECS
rpmbuild -bp --target=$(arch) kernel-2.6.spec
rpmbuild -bp iptables.spec
  • Коригираме Makefile.
cd /usr/src/redhatBUILD/kernel-2.6.18/linux-2.6.18.x86_64/
vim Makefile

където променяме

EXTRAVERSION = -prep
EXTRAVERSION = -128.7.1.el5
  • Сваляме и разархивираме patch-o-matic
cd /usr/local/src/
wget http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20090909.tar.bz2
tar -jxvf patch-o-matic-ng-20090909.tar.bz2
  • Стартираме patch-o-matic и пачваме ядрото
export KERNEL_DIR=/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/
export IPTABLES_DIR=/usr/src/redhat/BUILD/iptables-1.3.5/
./runme --download
./runme time
  • Прекомпилираме ядрото като използваме стария .config
cd /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64/
cp /boot/config-2.6.18-128.7.1.el5 .config
make menuconfig
Избираме Networking –> Networking Options –> Network packet filtering (replaces ipchains) –>  IP: Netfilter configuration, и маркираме Time match support, след което запазваме конфигурацията.
  • Компилираме и инсталираме модула
make modules_prepare
 make M=net/ipv4/netfilter
 strip --strip-debug net/ipv4/netfilter/ipt_time.ko
 cp net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.18-128.7.1.el5/kernel/net/ipv4/netfilter/
 chmod a+x /lib/modules/2.6.18-128.7.1.el5/kernel/net/ipv4/netfilter/ipt_time.ko
 depmod 2.6.18-128.7.1.el5
  • Компилираме и инсталираме iptables
cd /usr/src/redhat/BUILD/iptables-1.3.5/
make install  KERNEL_DIR=/usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.x86_64 BINDIR=/sbin LIBDIR=/lib64 MANDIR=/usr/share/man install
  • Зареждаме модула
modprobe ipt_time
  • Прилагаме правила по следния синтаксис:
iptables RULE -m time --timestart TIME --timestop TIME --days DAYS -j ACTION

където:

--timestart TIME : Time start value . Format is 00:00-23:59 (24 hours format)

--timestop TIME :  Time stop value.

--days DAYS :    Match only if today is one of the given days. (format: Mon,Tue,Wed,Thu,Fri,Sat,Sun ; default everyday)

Допълнителна информация:

http://linux.lcpe.uni-sofia.bg/manuals/openintegra/xfs/RHEL_xfs_RPM.html
http://wiki.centos.org/HowTos/BuildingKernelModules
http://www.cyberciti.biz/tips/iptables-for-restricting-access-by-time-of-day.html
http://www.iptables.org/documentation/HOWTO/netfilter-extensions-HOWTO-2.html

Leave a Reply





Stop ACTA