Като съм започнал с 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
- Компилираме и инсталираме модула
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