url_filter_load_rule()
{

	config_get url $1 dest_str
	if [ -z "$url" ];then
		return
	fi
	
	cmd="iptables -t filter -I URL_FILTER -m string --algo bm --string "
	cmd=$cmd$url

	config_get mac $1 src_mac
	if [ -n "$mac" ];then
		cmdmac=" -m mac --mac-source $mac "
		cmd=$cmd$cmdmac
	fi

	config_get starttime $1 start_time
	config_get stoptime $1 stop_time
	if [ -n "$starttime" ];then
		cmdtime=" -m time --timestart $starttime --timestop $stoptime "
		cmd=$cmd$cmdtime

		config_get weekdays $1 weekdays
		if [ -n "$weekdays" ];then
			days=""
			for day in $weekdays
			do
				days="$day,$days"
			done
			cmd="$cmd --weekdays $days"
		fi
	fi

	config_get target $1 target
	if [ "$taget" == "RETURN" ]; then
		$cmd -j $target 2>/dev/null	
	else
		$cmd -j DROP 2>/dev/null
	fi
        
}



使用到的工具命令:nslookup 用于查询DNS的记录,查询域名解析是否正常,在网络故障时用来诊断网络问题。

使用url有两种方法:

方法一:

1、首先利用nslookup查看下url的IP地址;例如禁止www.baidu.com

2、使用nslookup将域名转换为IP地址后,使用IPtables命令将源IP禁止即可

使用iptables查看配置信息:

方法二:

使用字符匹配过滤方法,这也是常用的URL过滤:

-m state :-m 表示添加一个模块,states是IPtables的状态模块

-m string :字符串限定 –algo :字符串匹配算法,可使用的有kmp,bm。

 

url_filter_flush()
{
    iptables -t filter -D FORWARD -j URL_FILTER 2>/dev/null
    iptables -t filter -D FORWARD -i br-lan -j URL_FILTER 2>/dev/null

    iptables -t filter -F URL_FILTER 2>/dev/null
    iptables -t filter -X URL_FILTER 2>/dev/null
}

-X:删除使用者自订table项目,一般使用iptables -N xxx 新增自订 chain 后,可以使用 iptables -X xxx 删除之

-D:删除某一条规则

-F :清除所有的已订定的规则

(-F 是清空指定某个chains内所有的rule设定。比方iptables -F -t filter,就是将filter table内所有的INPUT/OUTPUT/FORWAD chain 设定的规则都清空。)

-i :匹配从这块网卡流入的数据

-o :匹配从这块网卡流出的数据

–dport :匹配目标端口号

–sport :匹配来源端口号

-j:选项指定规则目标

目标可以是用户自定义链:内建目标;或扩展

“iptables –[A|I 链] [-i|o 网络接口] [-p 协议] [-s 来源ip/网域] [-d 目标ip/网域] –j[ACCEPT|DROP]”

IPtables 开放网口与IP来源:

例:所有的来自lo这个网口的封包,都予以接受

iptables -A INPUT -i lo -j ACCEPT

例:目标来自192.168.1.200这个IP的封包都予以接受

iptables -t filter -I INPUT -i eth0 -s 192.168.1.200 -j ACCEPT

例:192.168.1.0/24可接受,但是192.168.1.10丢弃

iptables 规则记录

例:iptables -A INPUT -s 192.168.1.200 -j LOG

相关信息就会被写入到/var/log/messages中

iptables 开放tcp 、udp端口

例如:开放Samba端口(udp137、138;tcp139,445)

iptables -A INPUT -i eth0 -p udp –dport 137:138 -j ACCEPT

iptables -A INPUT-i eth0 -p tcp –dport 139 -j ACCEPT

iptables -A INPUT-i eth0 -p tcp –dport 445 -j ACCEPT

iptables匹配ICMP端口和ICMP类型

iptables –A INPUT –p icmp –icmp-type 类型 –j ACCEPT

参数:–icmp-type :后面必须要接 ICMP 的封包类型,也可以使用代号,

例如 8 代表 echo request 的意思。(可自查询ICMP-type对应表)

Iptables –syn的处理方式

指定TCP匹配扩展

使用 –tcp-flags 选项可以根据tcp包的标志位进行过滤。

#iptables -A INPUT -p tcp –tcp-flags SYN,FIN,ACK SYN

#iptables -A FROWARD -p tcp –tcp-flags ALL SYN,ACK

上实例中第一个表示SYN、ACK、FIN的标志都检查,但是只有SYN匹配。第二个表示ALL(SYN,ACK,FIN,RST,URG,PSH)的标志都检查,但是只有设置了SYN和ACK的匹配。

#iptables -A FORWARD -p tcp –syn

选项—syn相当于”–tcp-flags SYN,RST,ACK SYN”的简写。

IPtables 状态模块

-m :一些iptables的模块,主要常见的有:

state:状态模块

mac:网络网卡硬件地址(hardware address)

–state : 一些封包的状态,主要有:

INVALID:无效的封包,例如数据破损的封包状态

ESTABLISHED:已经联机成功的联机状态

NEW : 想要建立新的联机封包状态

RELATED:这个常用的,封包是与我们主机发送出去的封包有关

例:只要已建立或相关封包就予以通过,只要不合法封包就丢弃

iptables –A INPUT –m state –state RELATED ESTABLISHED –j ACCEPT

iptables –A INPUT –m state –state INVALID –j DORP

例:对局域网内mac地址为00:0C:29:56:A6:A2主机开放其联机

 iptables -A INPUT -m mac –mac-source 00:0C:29:56:A6:A2 -j ACCEPT

Iptables保存于恢复

iptables-save > /etc/sysconfig/iptables.20180606

iptables-restore < /etc/sysconfig/iptables.20180606

 

url_filter_init()
{
    iptables -t filter -N URL_FILTER 2>/dev/null
    iptables -t filter -I FORWARD  -j URL_FILTER 2>/dev/null
    iptables -t filter -I INPUT -i br-lan -j URL_FILTER 2>/dev/null
}

-N :新建一个表

url_filter_set_default_drop()
{
    iptables -t filter -I URL_FILTER -p tcp -m string –algo bm –string GET -j REJECT –reject-with tcp-rst 2>/dev/null
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 


版权声明:本文为lixiaofeng0原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/lixiaofeng0/article/details/112696140