ã¯ããã«
æè¿ãhabrã«ã¯ã«ãŒãã«ã¢ãžã¥ãŒã«ã®éçºã«é¢ããæ
å ±ãå°ãããããšã«æ°ä»ããŸããã ç§ãèŠã€ãããã¹ãŠïŒ
Cã«ã€ããŠå€å°ãªããšãç¥èã®ãã人ãæããŠããã60ïŒ
ã®ã¢ã»ã³ãã©ãŒã§æ§æãããŠãããã®ããã«ã«ãŒãã«ã³ãŒããèªã¿åããªãããšã¯åžžã«é©ãã¹ãããšã§ããïŒå®éã«ã¯ããã»ã©è€éã§ããããŸããïŒã å®éãæ¢åã®netfilterããã³iptablesã¢ãžã¥ãŒã«ã®éçºãŸãã¯æ¹è¯ã«é¢ããäžé£ã®èšäºãæžãäºå®ã§ãã
åå¿è
ã®ã«ãŒãã«éçºè
ããã©ã€ããŒäœæè
ããŸãã¯æ°ããéçºåéã§èªåèªèº«ãè©ŠããŠã¿ãããšæã£ãŠãã人ã
ã«ãšã£ãŠèå³æ·±ããã®ã«ãªãããšãé¡ã£ãŠããŸãã
ç§ãã¡ã¯äœãããŸãã
èšäºã®ã¿ã€ãã«ã«ããããã«ãxt_stringã«åºã¥ããç°¡åãªiptablesã¢ãžã¥ãŒã«ãäœæããŸãã Xt_stringã¯ããã±ããå
ã®ãã€ãã·ãŒã±ã³ã¹ãæ€çŽ¢ã§ããnetfilterã¢ãžã¥ãŒã«ã§ãã ããããç§ã®æèŠã§ã¯ã圌ã¯ç¹å®ã®é åºã§ãã€ãã®ããã€ãã®ã·ãŒã±ã³ã¹ãæ€çŽ¢ããèœåã«æ¬ ããŠããŸãã ããŠãGPL以æ¥ãäœããã®æ©äŒãäžããã®ã劚ããŠããŸããïŒ
å®éããã®èšäºã§ã¯ãã®ãããªã¢ãžã¥ãŒã«ãæžãçããxt_wildstringãšåŒã³ãŸããããã¯ã次ã®ããã«
ã·ãã¯PRã«äœ¿çšã§ããŸãã
iptables -I FORWARD -p tcp --dport 80 --tcp-flags ACK,PSH ACK,PSH -m wildstring --wildstring "reductor*price*carbonsoft.ru" -j DROP.
éçºã®éå§ãšåæã«èšäºãæžãå§ããŸãã
ããã«æ³šæããå¿
èŠããããŸã-ãã®ã¢ãžã¥ãŒã«ã¯å®çšŒåçšã«äœæããããã®ã§ã¯ãªããã«ãŒãã«ã¢ãžã¥ãŒã«ã®éçºãšãã¹ããè¿
éã«èª¿æŽããnetfilterãå°ã詳ããç¥ãããã®ç°¡åãªäŸãšããŠã®ã¿æžãããŠããŸãã
netfilterãšiptablesã«ã€ããŠç°¡åã«
éåžžãiptablesã¢ãžã¥ãŒã«ã¯ãã«ãŒãã«ã¹ããŒã¹ãšãŠãŒã¶ãŒã¹ããŒã¹ã®2ã€ã®éšåã§æ§æãããŸãã ã«ãŒãã«ã¹ããŒã¹ã«ã¯ãåçã«ããŒãããŠäœ¿çšã§ããLinuxã«ãŒãã«ã¢ãžã¥ãŒã«ãå«ãŸããŠããŸãã ãŸããiptablesã«ã«ãŒã«ãè¿œå ãããšãã«ããã±ãŒãžã§ãæ©èœããŸãã ãŠãŒã¶ãŒã¹ããŒã¹ã«ã¯ãã§ã«iptablesã¢ãžã¥ãŒã«ãå«ãŸããŠããŸããããã«ãããã«ãŒã«ãäœæããããããLinuxã«ãŒãã«ã«æž¡ãããšãã§ããŸãã
Netfilterã¢ãžã¥ãŒã«ã¯ã次ã®3ã€ã®ã«ããŽãªã«åé¡ã§ããŸãã
- ããã¯ã¯åºæ¬çã«ãã«ãŒãã«ãä»ããããã±ãŒãžãã¹ã§çœ®æãããããã©ã«ãã®ãã§ãŒã³ãšããŒãã«ã§ã
- äžèŽ-trueãŸãã¯falseãè¿ãã¢ãžã¥ãŒã«ãæ¡ä»¶ã䜿çšã§ããŸããããšãã°ããã±ãããå±ãããããã³ã«ã決å®ããŸãã
- ã¿ãŒã²ããã¯ããã±ãŒãžã§äœããã®ã¢ã¯ã·ã§ã³ãå®è¡ããã¢ãžã¥ãŒã«ã§ãæãæåãªãã®ã¯ACCEPT / DROPã§ãããå®éã«ã¯ãã£ãšå€ãã®ãã®ããããŸã
ãœãŒã¹å
ã®ãããã®ã¢ãžã¥ãŒã«ã¯æ¬¡ã®ãšããã§ãã
Netfilterã¯Linuxã«ãŒãã«ãœãŒã¹ã®äžéšã§ãããããŒãžã§ã³2.6.32ã®ããã€ãã®ãã£ã¬ã¯ããªã«ãããŸãã
/ usr / src / linux / net / netfilter /-ã»ãšãã©ã®äžèŽã¢ãžã¥ãŒã«ã
/ usr / src / linux / net / ipv4 / netfilter /ã¯ãã¿ãŒã²ããã¢ãžã¥ãŒã«ã®äžéšã§ãã
/ usr / src / linux / include / linux / netfilter /-ãããäž¡æ¹ã®ã¢ãžã¥ãŒã«ã®ããããŒã
Iptablesã¢ãžã¥ãŒã«ã¯ãã£ã¬ã¯ããªã«ãããŸã
/ usr / src / iptables /æ¡åŒµæ©èœ/
ã«ãŒãã«ã¹ããŒã¹ãšãŠãŒã¶ãŒã¹ããŒã¹ã®ã¢ãžã¥ãŒã«ã®ããããŒã¯åãã§ããå¿
èŠããããããåäžã®ãã¡ã€ã«ã®æ¹ãé©åã§ãã
ããã§ã¯ãçè«ããå®è·µã«ç§»ããŸããã
GPLãçºæããããšããçç±ã§ã¯ãªããæã
ã¯è»èŒªãåçºæããŸããã çŸæç¹ã§æãå®å®ããŠãããã®ã®1ã€ãšããŠãææ°ã®CentOS 6ã«ãŒãã«ã®xt_stringã¢ãžã¥ãŒã«ã䜿çšããŠãã ããã
ã¢ãžã¥ãŒã«ãšã¹ã¿ã³ãã¢ã»ã³ããªã·ã¹ãã ã®ã»ããã¢ããã«ã€ããŠå€ãã®æ
å ±ãåºãŠããã®ã§ãã¹ãã€ã©ãŒã®äžã«é ããŸããã ã©ãã§äœãåéãããèµ·åããããã¹ãããããã«ã€ããŠèª€è§£ãŸãã¯é¢å¿ãããå Žåã¯ããã®äžãèŠãã®ãçã«ããªã£ãŠããŸãã
ãã«ãã·ã¹ãã ãšãã¹ããã³ãã®èšå®ããã«ãããã³ãããã°ã·ã¹ãã ã®æºå
ã¯ããLinux Kernelãéçºããããã®äŸ¿å©ãªIDEã®å€ãã®å€¢ã ããããæ®å¿µãªãããç§ã¯äŸ¡å€ã®ãããã®ãèŠã€ããããŸããã§ããã ãã®çç±ã®1ã€ã¯æ¯èŒçåçŽã§ã-ã«ãŒãã«ã®ã»ã°ã¡ã³ããŒã·ã§ã³éåã®å Žåãã«ãŒãã«ãããã¯ãçºçããäœæ¥ãã·ã³ã§ãããã¯ãçºçããå Žåã«åèµ·åã«å€ãã®æéãè²»ãããŸãã ãããã£ãŠãç¹å®ã®ããŒããŠã§ã¢åãã«ã³ãŒããèšè¿°ãããŠããå Žåã¯ãååãšããŠãéçºã¯ä»®æ³ãã·ã³ãŸãã¯å¥ã®ã¹ã¿ã³ãã§å®è¡ãããŸãã ãã ããã¢ãžã¥ãŒã«ã¯ãŠãããŒãµã«ãªã®ã§ãä»®æ³ãã·ã³ãã€ã³ã¹ããŒã«ããŸãã
CentOSã2ã€ã®ä»®æ³ãã·ã³ã«é
眮ããŸã
å®éãé害ãçºçããå Žåã«ã«ãŒãã«ãããã¯äžã«è³ãã¢ã€ãã«ç¶æ
ã«ãªããªãããã«ããŸãããããä¿èšŒãããŠããããã«ã次ã®ããã«é²ããŸãã ã€ã³ã¿ãŒããããšçžäºã«ã¢ã¯ã»ã¹ã§ãã2ã€ã®ä»®æ³ãã·ã³ãã€ã³ã¹ããŒã«ããŸãã 1ã€ã¯ã¢ãžã¥ãŒã«ãã«ããŒã2ã€ç®ã¯ãã¹ãã¹ã¿ã³ãã§ãã
ã³ã¬ã¯ã¿ãŒã§ãlinuxããã³iptablesã®ãœãŒã¹ãååŸããŸã
ã¡ãªã¿ã«ãã³ã¬ã¯ã¿ãŒã«ã¯ãããã€ãã®äŸ¿å©ãªããã°ã©ã ãå¿
èŠã§ãã
yum install git ncurses-devel make gcc rpm-build indent
次ã«ãCentOSçšã«éçºããŠãã人ã«ãšã£ãŠæã䟿å©ãªãªããžããªã®1ã€ãããã¯ããŒã¯ã«è¿œå ããŸãã
http://vault.centos.org/6.4/os/Source/SPackages/ãããããsrc.rpm Linuxã«ãŒãã«ãšiptablesãååŸããŸãã
rpm -i http://vault.centos.org/6.4/os/Source/SPackages/kernel-2.6.32-358.el6.src.rpm rpm -i http://vault.centos.org/6.4/os/Source/SPackages/iptables-1.4.7-9.el6.src.rpm
次ã«ã/ root / rpmbuild / SPECS /ã«ç§»åããCentOSããã®ããããããã§ãœãŒã¹ãã¡ã€ã«ãå±éããŸãã
rpmbuild -bp iptables.spec rpmbuild -bp kernel.spec
/ root / rpmbuild / BUILD /ã«ãLinuxã«ãŒãã«ãœãŒã¹ãšiptablesã®ãããã©ã«ããŒã衚瀺ãããŸãã
ã¢ãžã¥ãŒã«ã«å€æŽãå ãããšãã«net / netfilter /ãã©ã«ããŒã®ã¿ãåæ§ç¯ã§ããããã«ããã«ã¯ãã«ãŒãã«å
šäœãå°ãªããšã1åã¢ã»ã³ãã«ããå¿
èŠããããŸãã å©äŸ¿æ§ãšæ
£ãã®ããã«ãã·ã³ããªãã¯ãªã³ã¯ãäœæããŸãã
ln -s /root/rpmbuild/BUILD/kernel-2.6.32-358.el6/linux-2.6.32-358.el6.x86_64/ /usr/src/linux ln -s /root/rpmbuild/BUILD/iptables-1.4.7/ /usr/src/iptables/
/ usr / src / linuxã«ç§»åããŸãã ãŸããæ§æãçæããŸãã
make menuconfig
ä¿åããŠã³ã¢å
šäœãåéããŸãã ã¡ãªã¿ã«ãããããrpmbuildã§äœæããããgpgã§ãã³ã°ããŸãïŒkeyring `./pubring.gpg 'createdã ãããåé¿ããããã«ãç§ãã¡ãšã®ã©ã³ãã ã¯urandomã ãšããŸãããã
rm -f /dev/random ln -s /dev/urandom /dev/random
ãããŠå®éã®ã¢ã»ã³ããªïŒ
make prepare make -j 3 make modules_install
äžè¬ã«ãã¢ãžã¥ãŒã«ã®ãœãŒã¹ã³ãŒããGITãªããžããªã«ä¿åãããšããã§ããããç§ã«ãšã£ãŠã¯ãã/ GIT / wildstring /ã«ãããŸãã
ã«ãŒãã«ãããã¯ã§ã¹ã¿ã³ããåèµ·åãã
ç§ã®æèŠã§ã¯ã2ã€ã®æ¹æ³ã§ãããè¡ãããšãã§ããŸããæãæ£ããæ¹æ³ã¯/ proc / sys / kernel / panicãã©ã¡ãŒã¿ãŒã2ã«èšå®ããããšã§ãããããããããã¯ã®åºåã¯éèŠã§ããå¿
èŠã«å¿ããŠã次ã®ç²Ÿç¥ã§ãã¹ãã·ã¹ãã ã§ã¹ã¯ãªããã䜿çšã§ããŸãïŒ
name=centos_test ip=<ip_> while true; do if ! ping -qc 1 $ip; then virt-viewer $name sleep 2 scrot virsh destroy $name virsh start $name sleep 60 fi done
ã¢ãžã¥ãŒã«ã®æ£åžžæ§ã®ç¢ºèª
次ã®ããã«äœ¿çšã§ããŸãïŒ
1åéãã®èµ·åïŒ
./test_wildstring.sh
ç¡éã«ãŒãïŒ
./test_wildstring.sh while
Linuxããã³iptablesããæååãã³ããŒããŸã
å¿
èŠãªã¢ãžã¥ãŒã«ãèŠã€ããŠããªããžããªã«ã³ããŒããŸãã
cp -v /usr/src/linux/net/netfilter/xt_string.c ~/GIT/wildstring/xt_wildstring.c mkdir -p ~/GIT/wildstring/include/linux/netfilter/ cp -v /usr/src/linux/include/linux/netfilter/xt_string.h ~/GIT/wildstring/include/linux/netfilter/xt_wildstring.h
Makefileãæžã
ã«ãŒãã«ã¢ãžã¥ãŒã«ã®ã¢ã»ã³ããªãiptablesã¢ãžã¥ãŒã«ãããã³ã³ãŒãã®é
眮ãäœæ¥ãã©ã«ããŒã®ã¯ãªãŒãã³ã°ãããã³ãã®ä»ã®ããã€ãã®ç®æšã«ã€ããŠèª¬æããŸãã
obj-m += xt_wildstring.o all: module lib module: cp include/linux/netfilter/xt_wildstring.h /usr/src/linux/include/linux/netfilter/xt_wildstring.h make -C /lib/modules/2.6.32/build M=$(PWD) modules lib: cp libxt_wildstring.c /usr/src//iptables/extensions cp include/linux/netfilter/xt_wildstring.h /usr/src/iptables/include/linux/netfilter/xt_wildstring.h make -C /usr/src/iptables/extensions cp /usr/src/iptables/extensions/libxt_wildstring.so libxt_wildstring.so userspace: gcc userspace_wildstring.c -o userspace ./userspace rm -f userspace install: scp xt_wildstring.ko root@10.90.140.160: scp libxt_wildstring.so root@10.90.140.160:/lib64/xtables-1.4.7/ clean: rm -f *~ *.ko *.so *.mod.c *.ko.unsigned *.o modules.order Module.symvers indent: Lindent *.c include/linux/netfilter/xt_wildstring.h
Makefileãžã®ã³ã¡ã³ãïŒ
- 2.6.32-uname -r = 2.6.32-358.0.1.el6.x86_64ãªã®ã§ããŒãã³ãŒãã§ããããããã®ãœãŒã¹ã¯æå
ã«ãªãã®ã§ãã·ã³ããªãã¯ãªã³ã¯/lib/modules/2.6.32-358.0.1ã el6.x86_64 / buildã¯æ©èœããŸããã
- ç§ã¯ã¡ã€ã¯ãã¡ã€ã«ã®é人ã§ã¯ãªããxt_wildstring.koã®ããã«libxt_wildstring.soãçŸããæ£ç¢ºã«ã³ã³ãã€ã«ããæ¹æ³ãèãåºããŠããªãã®ã§ãåçŽãªbashã³ãã³ãã§ãã®ã¿ãŒã²ãããããããäœæããªãããšã«ããŸããã
- ã€ã³ã¹ããŒã«ã¿ãŒã²ããã®scpããã¹ã¯ãŒããªãã§æ©èœãããã«ã¯ããã«ãã·ã¹ãã ã§SSHããŒãçæãããã¹ããã³ãã«ããããããå¿
èŠããããŸãã
- Lindentã³ãã³ãã¯ã/ usr / src / linux / scripts / Lindentãã/ usr / local / binã«ã³ããŒãããŸããããã¯ãã䜿çšãããŸãã Linuxã«ãŒãã«ã§ã³ãŒããæžããšãã¯ããã£ãŒã¿ãŒã§èª°ãã®ä¿®éé¢ã«è¡ããªãã®ã§ãåžžã«äœ¿çšããããšããå§ãããŸãã åã³ãããã®åã§ãã£ãŠãè¯ãã
.gitignoreã®äœåãªéšåãåé€ããŸã
gitã¹ããŒã¿ã¹ã®è¿œè·¡ãããŠããªããã¡ã€ã«ã¯ããé¢åãªã®ã§ãã/ GIT / wildstring / .gitignoreãäœæããŸãã
* .o
* .so
ã*
* .ko
* .ko.unsigned
modules.order
Module.symvers
* .mod.c
ïŒ.gitignore
ã¯ã€ã«ãã¹ããªã³ã°ã«ååãå€æŽ
ã¢ãžã¥ãŒã«ãå
ã®ã¢ãžã¥ãŒã«ãšç«¶åããªãããã«ãã¢ãžã¥ãŒã«ãšãã®ãã¹ãŠã®é¢æ°ã®ååãstringããwildstringã«å€æŽããããšã¯çã«ããªã£ãŠããŸãã éèŠãªãã€ã³ã-ããããŒããŠãŒã¶ãŒã¹ããŒã¹ã¢ãžã¥ãŒã«ãã«ãŒãã«ã¹ããŒã¹ã¢ãžã¥ãŒã«ã®ãã¹ãŠãç·šéããå¿
èŠããããŸãã ãã®å Žåãgrepã¯ãã·ã¢ã®æ°äž»äž»çŸ©ã®ç¶ãæããŸãïŒ
grep -ri string xt_wildstring.c | grep -vi wildstring
äžèŽæ
å ±æ§é ã®æ¡åŒµ
ç¹°ãè¿ãã«ãªããŸãããããããã®match-moduleã«ã¯ç¬èªã®match-infoæ§é ãããããŠãŒã¶ãŒç©ºéããæž¡ããããã©ã¡ãŒã¿ãŒã«åºã¥ããŠåœ¢æãããŸãã ããã¯ããããŒãã¡ã€ã«ïŒ
xt_wildstring.h ïŒã«èšè¿°ãããŠããŸãã
æšæºã®xt_string.hã¯æ¬¡ã®ãšããã§ã #ifndef _XT_STRING_H #define _XT_STRING_H #include <linux/types.h> #define XT_STRING_MAX_PATTERN_SIZE 128 #define XT_STRING_MAX_ALGO_NAME_SIZE 16 enum { XT_STRING_FLAG_INVERT = 0x01, XT_STRING_FLAG_IGNORECASE = 0x02 }; struct xt_string_info { __u16 from_offset; // â . __u16 to_offset; // â . char algo[XT_STRING_MAX_ALGO_NAME_SIZE]; // . char pattern[XT_STRING_MAX_PATTERN_SIZE]; //, , . __u8 patlen; // , . union { struct { __u8 invert; // ! -m string âstring âsomethingâ } v0; struct { __u8 flags; // . } v1; } u; /* Used internally by the kernel * . * , * java-? * , xml. */ struct ts_config __attribute__((aligned(8))) *config; }; #endif /*_XT_STRING_H*/
xt_wildstring.hã®xt_wildstring_infoæ§é äœã®ããã€ãã®ãã£ãŒã«ããä¹ç®ããŸã
æåã«ããµãã¹ããªã³ã°ãžã®ãã€ã³ã¿ãŒãè¿œå ããŸãã 2çªç®ãš3çªç®ã®ãã€ã³ã¿ãŒã¯ç©ºã«ãªãå¯èœæ§ããããããã€ãŸããã¢ã¹ã¿ãªã¹ã¯ã®ãªããã³ãã¬ãŒããã¢ãžã¥ãŒã«ã«æž¡ããããããå
ã®ããã«æåã®é
åã§ã¯ãªããã€ã³ã¿ãŒã§ãã åæ§ã«ãåãã³ãã¬ãŒãã®ããã±ãŒãžå
ã®ããã¹ãæ€çŽ¢ãã©ã¡ãŒã¿ãŒã®æ§é ã«åŸã£ãŠããµãã¹ããªã³ã°ã®é·ããæ ŒçŽããå€æ°ãè¿œå ããŸãã ãã®çµæãæ§é ã¯æ¬¡ã®ããã«ãªãå§ããŸããã
#ifndef _XT_WILDSTRING_H #define _XT_WILDSTRING_H #include <linux/types.h> #define XT_WILDSTRING_MAX_PATTERN_SIZE 128 #define XT_WILDSTRING_MAX_ALGO_NAME_SIZE 16 enum { XT_WILDSTRING_FLAG_INVERT = 0x01, XT_WILDSTRING_FLAG_IGNORECASE = 0x02 }; struct xt_wildstring_info { __u16 from_offset; __u16 to_offset; char algo[XT_WILDSTRING_MAX_ALGO_NAME_SIZE]; char pattern[XT_WILDSTRING_MAX_PATTERN_SIZE]; /* */ char *pattern_part1; char *pattern_part2; char *pattern_part3; __u8 patlen; /* */ __u8 patlen_part1; __u8 patlen_part2; __u8 patlen_part3; union { struct { __u8 invert; } v0; struct { __u8 flags; } v1; } u; /* Used internally by the kernel */ /* */ struct ts_config __attribute__((aligned(8))) *config; struct ts_config __attribute__((aligned(8))) *config_part1; struct ts_config __attribute__((aligned(8))) *config_part2; struct ts_config __attribute__((aligned(8))) *config_part3; }; #endif
æ°ããããããŒãã£ãŒã«ãã®äœ¿çšãéå§
xt_wildstring.cã«ç§»åã
ãŸã ã
ããããŒã«è¿œå ããã®ã¯ãããã䜿çšãããšãã§ãã ãŸããæ€çŽ¢èšå®ã®æºåãšç Žæ£ã«åãæãããŸãããã
ããã§ããã¡ãã£ãšããçè«-ååãšããŠãäžèŽã¢ãžã¥ãŒã«ã®æ§é ã«ã¯æ¬¡ã®é¢æ°ãšæ§é ãå«ãŸããŸãã
- init-ã¢ãžã¥ãŒã«ãããŒãããããšãã®ã¢ãžã¥ãŒã«ã®åæåã
- exit-ããŒãããããšãã®ã¢ãžã¥ãŒã«ã®ç Žå£ã
- mt-ããã±ãŒãžããã§ãã¯ããæ©èœã
- mt_check-ã«ãŒã«ãè¿œå ãããšãã«ã¢ãžã¥ãŒã«åŒã³åºãã®æ£ç¢ºæ§ããã§ãã¯ããé¢æ°ã
- mt_destroy-ã«ãŒã«ãåé€ããããšãã«ãªãœãŒã¹ãã¯ãªãŒãã³ã°ããé¢æ°ã
- mt_reg-é¢æ°mt_checkãmtãmt_destroyãžã®ãã€ã³ã¿ã®æ§é +ã¢ãžã¥ãŒã«ã«é¢ããè¿œå æ
å ±ã
å
ã®xt_stringã§ã¯ãã«ãŒã«ã®è¿œå ãšåé€ã¯æ¬¡ã®ãšããã§ãã
string_mt_checkïŒè¿œå ïŒã§ã¯ãæååãšæ€çŽ¢ã¢ã«ãŽãªãºã ã«åºã¥ããŠts_configïŒts-ããã¹ãæ€çŽ¢ïŒæ§é ãçæãããŸãã ããã±ãŒãžããŒã¿ã®æ€çŽ¢é¢æ°ïŒskb_find_textïŒã¯ãããããã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããŸãã ãã®æ§é ïŒstring_mt_destroyé¢æ°ïŒã«ãã£ãŠå æãããŠããã¡ã¢ãªã¯ãtextsearch_destroyé¢æ°ã«ãã£ãŠã¯ãªã¢ãããŸãããã®é¢æ°ã¯ãã«ãŒã«ããã§ãŒã³ããåé€ããããšãã«åŒã³åºãããŸãã
textsearch_prepareã®ãã¢ãxt_wildstring_checkã«è¿œå ããŸã
äœããå€æŽããåã«ãå
ã®wildstring_mté¢æ°ã«ã€ããŠã³ã¡ã³ãããŸããããã¯ãã«ãŒã«ãééãããšãã«ããã±ãŒãžãå®éã«ãã§ãã¯ããŸããå°ãå€æŽããã ãã®äŸ¡å€ãããããã§ããããã®é¢æ°ã¯ãããã«å€§ããäŸåããŸãããåæã«éèŠã§ã¯ãããŸããã
static bool wildstring_mt(const struct sk_buff *skb, const struct xt_match_param *par) { return false; #if 0 ... #endif }
æåã«ãã«ãŒã«ãiptablesã«è¿œå ããããšãã«åŒã³åºãããxt_wildstring_checké¢æ°ã§ts_confãæºåããŸãã è¡ã®å
é ãžã®ãã€ã³ã¿ãŒãäžæå€æ°ã«ã³ããŒããstrsepé¢æ°ã䜿çšããŠãŠã©ãŒã¯ã¹ã«ãŒããŸãããã®é¢æ°ã¯ãæå®ãããæåã»ããã«åŸã£ãŠè¡ãåå²ããŸãã ããŒã¯ã³ãèŠã€ãã£ãå Žåããã®é·ããèšç®ããããã䜿çšããŠããã¹ãæ€çŽ¢ãã©ã¡ãŒã¿ãŒãæºåããŸãã
s = (char *) conf->pattern; conf->pattern_part1 = strsep(&s, delim); if (!conf->pattern_part1) return false;
次ã®2ã€ã®ts_confãé¡æšããŠèšå
¥ããŸããå¯äžã®éãã¯ããã¿ãŒã³ãžã®ãã€ã³ã¿ãŒã空ã«ãªã£ãå Žåãããã¯ãã¯ããšã©ãŒã§ã¯ãªããtrueãè¿ãããšã§ããã€ãŸããããå°ãªããã¿ãŒã³ã§äœæ¥ããŸãã
ãããŠãwildstring_mt_destroyã§ããããç Žå£ããŸã
ãã®é¢æ°ã¯ãã«ãŒã«ãiptablesããåé€ããããšãã«åŒã³åºãããŸãã ã«ãŒã«ãåé€ãããšãã«ãã©ã¡ãŒã¿ãŒãç Žæ£ããã«ã¯ãdestroyãä¹ç®ããŸãã
static void wildstring_mt_destroy(const struct xt_mtdtor_param *par) { struct xt_wildstring_info *conf = WILDSTRING_TEXT_PRIV(par->matchinfo); if (conf->pattern_part1) textsearch_destroy(conf->config_part1); if (conf->pattern_part2) textsearch_destroy(conf->config_part2); if (conf->pattern_part3) textsearch_destroy(conf->config_part3); }
è©Šåãæãæµ®ãã¹ãŠãã ãã
ãã®ãããã¢ãžã¥ãŒã«ã¯æ£åžžã«ããŒã/ã¢ã³ããŒããéå§ããã«ãŒã«ã¯è¿œå /åé€ãããã«ãŒãã«ãããã¯ã¯çºçããŸããã§ããã ããã§ã以åã«ã³ã¡ã³ãããwildstring_mté¢æ°ã«æ»ããé¢æ°ã«æž¡ããããã¹ãŠã®ãã³ãã¬ãŒãã®æ€çŽ¢ãè¿œå ããŸãã
ãŸããç®çã®éšåæååãèŠã€ããããšãã§ããã·ããã®é·ããä¿æããå€æ°ãå¿
èŠã§ãã
unsigned int skb_find = 0;
äžè¬çã«ãããã¯æè¯ã®ååã§ã¯ãããŸãããtmp_from_offsetãwildstring_from_offsetã®ãããªæ確ãªååã«ãªããŸããããã¹ãŠããã§ã«githubã®ã³ãããã«å«ãŸããŠãããããæ®å¿µãªããé
ããŠããŸãã ããã§ãæåã®æ€çŽ¢ã®çµæãè¿ã代ããã«ããããæ°ããå€æ°ã«å²ãåœãŠãŠåæããèŠã€ãããªãå Žåã¯falseãè¿ããªã©ãæå®ããããã¹ãŠã®ãã¿ãŒã³ãåŠçããŸãã
memset(&state, 0, sizeof(struct ts_state)); skb_find = skb_find_text((struct sk_buff *)skb, conf->from_offset, conf->to_offset, conf->config_part1, &state); if (skb_find == UINT_MAX) return false;
ãã®ãããconfig_part2ãšconfig_part3ã«ã€ããŠç¹°ãè¿ããŸãããpattern_part2ãšpattern_part3ã®ååšã確èªããå¿
èŠããããããã§ãªãå Žåã¯trueãè¿ãç¹ãç°ãªããŸãã
çµäºããŠç¢ºèª
ããã«ããã¹ãŠã®ã³ã³ãã€ã«ãšã©ãŒãåŠçããŸãã äžè¬ã«ãå¯èœãªéãé »ç¹ã«ã³ã³ãã€ã«ããåè«ççãªçµããã§ã次ã®éšåãè¿œå ãããããã«ãŒãã«ãããã¯ãçºçããããšã«æ°ä»ããŸã§ãç¡éã«ãŒãã§ã¢ãžã¥ãŒã«ã®åäœã確èªããããšããå§ãããŸãã ãšã©ãŒã®äŸ¡æ Œã¯éåžžã«é«ããã»ãšãã©ã®ãŠãŒã¶ãŒã¹ããŒã¹ãŠãŒãã£ãªãã£ãäœæããå Žåããããã³ãŒããèšè¿°ããŠããå®å
šã«åäœããããšã確èªãããŸã§ã®æéãéåžžã«é·ããããå®è¡ãã䟡å€ããããŸãã ãã®ãããèšäºã®åé ã§ãã¹ã¿ã³ãäžã®ã¢ã»ã³ããªãšãããã°ã·ã¹ãã ã®å©äŸ¿æ§ã«éåžžã«æ³šæãæã£ãŠããŸãããªããªãã誰ããç¥ã£ãŠããããã«ãäžèº«ãã©ãã»ã©åªããŠããŠãã䜿çšããã®ãäžäŸ¿ã§ããå Žåãããã¯äœ¿çšãããªãããã§ãã
wgetãŸãã¯curlã䜿çšããŠãããã€ãã®ãã¹ãã±ãŒã¹ã§ãã¹ãããŸãã ã«ãŒã«ãäœæãããšããHTTPããã±ãŒãžã§ã¯GETãHOSTã®åã«ããããã³ãã¬ãŒãã¯å°ãåŸãã«æžããªããã°ãªããªãããšã«æ³šæããããšãéèŠã§ãã
- ãäœã* html * example.comã
- ãPron * avi * yoursiteã
- ãReductor *ã¹ããŒã * carbonsoft.ruã
ã€ãŸããã«ãŒã«ãè¿œå ããŸãã
iptables -I OUTPUT -p tcp âdport 80 -m wildstring âreductor*scheme*carbonsoftâ -j DROP
ããŒãžãããŠã³ããŒãããŠã¿ãŠãã ããïŒ
wget -t 1 -T 1
http://www.carbonsoft.ru/products/reductor/carbon-reductor/#schemeãã³ãŽ-äžæããiptables -nvL OUTPUTã¯å¢å ãããã±ããã«ãŠã³ã¿ãŒã瀺ããŸãã
ãªã¹ããäœæããŠã¿ãŸãããïŒ
æ°é
ãã®ããçµéšè±å¯ãª
èªè
ã¯ãããããå«ã³å£°ãäžããŸã-ãªã¹ãã䜿çšããŠããã¿ãŒã³ãpatlenãããã³configã§æ§æãããæ§é ãè¿œå /åé€ãããã®ãªã¹ãfor_each_entryã ããã-ãã®èšäºã®ç®çã¯ãnetfilterã¢ãžã¥ãŒã«ã®ããã€ã¹ã衚瀺ããããšã§ãããLinuxã«ãŒãã«ã§ãªã¹ããæäœãããšãç解ããå¿
èŠãããã¢ãžã¥ãŒã«ã«å¥ã®æ¬è³ªãè¿œå ãããŸãã ããŠããããŠãããªãã¯ç¬ç«ããæŒç¿ã®ããã«èªè
ã«äœããæ®ããªããã°ãªããŸããã
å®äº
å®éãnetfilterçšã®ã«ãŒãã«ã¢ãžã¥ãŒã«ã®äœææ¹æ³ãåŠã³ãŸããããããã¯çŽ æŽãããããšã§ã¯ãããŸãããïŒ
äžè¬ã«ãã¢ãžã¥ãŒã«ã¯HTTPã ãã§ãªããä»ã®å€ãã®ãããã³ã«ãäŸã«ã䜿çšã§ããŸãããããããåŸã§ã³ã¡ã³ãã«è¿œå ããŸãã
ãœãŒã¹ã¯
ãåœç€Ÿã®Webãµã€ãã®ãªãŒãã³ãœãŒã¹ã»ã¯ã·ã§ã³ã«ãããŸã ã