Linux运维第三阶段(十一)iptables
iptables
linux防火墙:netfilter(框架framework);iptables(生成防火墙规则并将其附加在netfilter上,真正实现数据报文过滤、NAT、mangle等规则生成的工具);真正起作用的是规则,规则放在netfilter上才能生效
网络防火墙的功能根据TCP/IP首部实现的
IP报文(见文末附图):
fragment ID(段标识)
MF(more fragment)
DF(don’t fragment,单个报文大小超过默认值会返回错误信息)
Fragment offset(片偏移,报文的先后次序)
TTL(time to live,ip报文会经多个router转发,每经一个网关设备将TTL值减1,否则会永远在网络上游荡)
Protocol(标记tcp,udp,icmp(icmp是三层半协议,不能实现报文控制,仅实现网络控制))
Header Checksum(存放首部校验码)
TCP报文(见文末附图):
Source Port number
Destination Port number
Sequence number(序列号,发送方告诉接收方发送报文的编号,依次向后加1)
Acknowledgment number(确认号,把对方的序列号加1再返回给对方)
URG(urgent紧急指针,0无效,1有效)
ACK(确认号是否有效)
PSH(push推送,不能在缓冲区,内核优先处理的报文)
RST(reset重置)
SYN(同步请求,建立联系的第一个请求)
FIN(断开连接)
注:对TCP来说,应用层协议封装的报文(http+data),都视为数据;对IP来说,传输层以上封装的报文都视为数据(tcp+http+data)
The tcp finite state machine(TCP的有限状态机,三次握手四次挥手):
client-side状态转换:closed-->SYN_SENT-->ESTABLISHED-->FIN_WAIT1-->FIN_WAIT2-->TIME_WAIT-->closed
server-side状态转换:
closed-->LISTEN-->SYN_RCVD-->ESTABLISHED-->CLOSE_WAIT-->LAST_ACK-->closed-->LISTEN
注:状态间转换仅一根线,不能随意转换,上下状态间是有次序的,只要知道某一方处在什么状态,就知道通信处在哪一阶段
例:
SYN=1,FIN=0,RST=0,ACK=0(TCP三次握手中的第一次)
SYN=1,ACK=1,FIN=0,RST=0(TCP三次握手中的第二次)
ACK=1,SYN=0,RST=0,FIN=0(TCP三次握手中的第三次ESTABLISHED)
防火墙:工作在主机边缘或网络边缘(数据报文进出的地方),对于进出的数据报文进行检查、监控、并能根据事先定义好的规则(匹配的标准),做出相应处理的组件就称作防火墙
规则:匹配标准、处理办法
硬件防火墙(背后是图形化了的iptables,或二次开发的iptables)
软件防火墙
网络管理的职责:设计规则
对于服务器来讲,拒绝所有,仅开放明确已知的报文
默认规则若是开放,我们就要堵;默认规则若是关闭,我们就要通
IP:SIP,DIP
TCP:SPORT,DPORT
UDP:SPORT,DPORT
ICMP:icmp-type(有报文类型的区别,不用端口而是报文,如ping时,有网关不可达,主机不在线,请求超时,主机名称无法解析等,报文格式均不相同)
数据报文过滤:
用户空间的命令(管理工具app)直接操作内核(内核中的工作框架)的机制
注:app只是个规则生成器,写完规则就没用了,而内核中的框架netfilter+规则就可发挥作用
早期linux无防火墙,参考FreeBSD(openBSD)移植过来的
linux2.0(ipfw/firewall)-->2.2(ipchain/firewall)-->2.4(iptables/netfilter)
规则放在内核中框架的5个位置:
prerouting,input,forward,output,postrouting(这五个位置是netfilter设计者补充在TCP/IP协议栈中的五个钩子函数hookfunction)
报文的三种流向(可理解为三个门):进入本地(input);从本地出去(output);经本地转发(forward)。报文经网卡送至TCP/IP协议栈,就根据路由表作出决策。
prerouting数据报文经网卡送至本地,在根据路由表作出决策前对其作出处理
input进入本地(请求本地某服务)
output从本地出去(响应请求或请求其它服务器)
forward经本地转发
postrouting已送至本地网卡,即将离开本机时对其处理(在路由决策作出之后)
prerouting和 postrouting:并不用来放行(ACCEPT)或拒绝(DROP或REJECT)报文,而是用来作NAT(networkaddress translation,SNAT(source NAT要在出去的时候改POSTROUTING,适用于公司仅一个公网地址,内网主机要上互联网),DNAT(destination NAT要在刚进本机时改PREROUTING,适用于公司仅一个公网地址,内网的多个服务器向互联网提供服务))
四表五链(在表的链上生成的规则)
五个规则链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
四种不同功能(四个表),优先级依次为:raw,mangle,nat,filter
raw表:确定是否对该数据包进行状态跟踪(PREROUTING,OUTPUT)
mangle表:为数据包设置标记,拆开报文,修改报文并封装(PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING)
nat表:地址转换,修改数据包中源IP、目标IP或端口(PREROUTING,POSTROUTING)
filter表:过滤,确定是否放行该数据包(INPUT,FORWARD,OUTPUT)
数据包过滤匹配流程:参考文末附图
自定义链:只能被默认链调用以后才能发挥功能(跳转执行自定义链),可精简整个链的结构,可提高整个链的效率,将那些同类的(或处理量大的)独立出来,例如只有访问WEB服务时才跳转,其它的依次顺序执行
注:可以使用自定义链,只在被调用时才发挥作用,而且如果没有与自定义链中的任何规则匹配还应该有返回机制;用户可以删除自定义链,默认链不能被删除
规则:匹配标准、处理动作(处理办法)
注:每个规则都有两个内置的计数器(被匹配到的报文个数、被匹配的报文大小之和)
匹配标准:通用匹配(自身能够检查);扩展匹配(隐含扩展、显示扩展,依赖于模块检查)
#rpm -ql iptables(/lib[64]/iptables/*.so,扩展模块)
注:隐含扩展(不用指明由哪个模块进行的扩展,使用-p {tcp|udp|icmp});显示扩展(必须指明由哪个模块进行的扩展,使用-m NAME即可)
iptables不是服务,但有服务脚本,服务脚本的主要作用在于管理(生效、清除、重新载入)保存的规则
#service iptables start|stop(iptables服务的启动和停止就是让内核装载和移除相关模块)
#lsmod | grep ip(iptable_raw,iptable_mangle,iptable_nat,iptable_filter,ip_conntrack,ip_nat)
其中:ip_nat(实现nat的补充模块),ip_conntrack(启用nat功能时,每个地址转换相应的返回的报文能实现自动管理,追踪每一个地址转换的报文)
#service iptables save(保存规则,此命令将写好的规则默认保存在/etc/sysconfig/iptables)
#service iptables restart(重启会清空表中的每一个链中的规则,并会重新加载配置文件及默认位置的规则)
#iptables-save > /etc/sysconfig/iptables.`date +%F`(将此前写好的规则保存至指定位置)
#iptables-restore < /etc/sysconfig/iptables.*(导入或恢复指定位置保存的规则)
若自己服务器中了***,***有反弹的特性,它会在你的服务器上会自动找出一个开放的端口(漏洞)来连接远端的服务器,接受远端控制,以WEB服务为例,80port有别人请求进来才响应出去,所以设置防火墙时要仅放行响应出去的,而反弹式***是主动出去连接别人的(不放行此连接),这种功能叫连接追踪ip_conntrack(connection track)
ip_conntrack是个内核模块,它能实时记录着当前主机服务器同客户端彼此正在建立的连接关系,并且能追踪查询到某一连接与其它连接处于什么状态,之间拥有什么关系
#cat /proc/net/ip_conntrack(内存空间的这个文件保存有当前系统上每一个client同当前主机所建立的连接关系,仅保留tcp有关的连接信息,一个条目记录每一个连接来回的两个会话通道,并且保留当前建立的会话状态)
#iptstate -t(A top-like display of IP Tables state table entries,-t(Showtotals (total states, total TCP states, etc),默认ESTABLISHED的连接保持120小时)
#cat /proc/sys/net/ipv4/ip_conntrack_max(默认32768,定义最多可追踪多少个连接)
#sysctl -w net.ipv4.ip_conntrack_max=65536(永久生效要写入配置文件/etc/sysctl.conf)
#cat /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established(已建立的连接默认保持432000秒(120小时))
#echo 216000 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
#iptables -t nat -L -n(此命令会激活ip_conntrack)
注:该模块一装载就开始追踪,对于繁忙的服务器来说,若连接达到默认的32768后,后续的用户请求都无法正常建立连接,这是非常致命的,所以对于非常繁忙的服务器不要触发启用这个模块,而对于连接量不是很大的服务器可以开启但尽量将该值ip_conntrack_max调大
#cat /proc/sys/net/ipv4/netfilter/ip_conntrack_icmp_timeout(默认30秒)
#man iptables
#iptables [-t TABLE] COMMAND CHAIN [NUM] 匹配标准 -j TARGET
-t raw|mangle|nat|filter(若不指定表名,则默认操作的是filter表)
COMMAND(管理规则):
-A CHAIN(--append,附加一条规则,添加在链的尾部)
-I CHAIN NUM(--insert,插入一条规则到对应链的第NUM条,不指NUM则是插入到第一条规则)
-D CHAIN NUM(--delete,删除指定链中第NUM条规则)
-R CHAIN NUM(--replace,替换指定链第NUM条规则)
COMMAND(管理链)
-F [CHAIN](--flush,清空指定规则链,若省略CHAIN则是清空对应表中的所有链)
-P CHAIN TARGET(--policy,设定指定链的默认策略,TARGET(ACCEPT,DROP))
-N CHAIN_NAME(--new-chain,自定义一个新的空链)
-X [CHAIN_NAME](--delete-chain,删除一自定义空链,非空用-F清空再删除)
-Z [CHAIN](--zero,置0指定链中所有规则的计数器)
-E OLDCHAIN_NAME NEWCHAIN_NAME(--rename-chain,重命名一自定义链)
COMMAND(查看)
-L -n --line-numbers -v[v](--list --numeric --verbose)
-L -n -vv -x(--exact显示计数器的精确值)
匹配标准(通用匹配):
-s [!] IP|NET(--src指定源地址,!可条件取反)
-d IP|NET(--dst指定目标地址)
-p tcp|dup|icmp(指定协议)
-i INTERFACE(--in-interface,指定数据报文流入的接口,一般用在PREROUTING,INPUT,FORWARD)
-o INTERFACE(--out-interface,指定数据报文流出的接口,可用于标准定义的链FORWARD,OUPTOU,POSTROUTING)
匹配标准(扩展匹配(隐含扩展)):
-p tcp --sport PORT[:PORT](支持连续的一堆端口,不能用离散的)
-p tcp --dport PORT[:PORT]
-p tcp --tcp-flags MASK COMP(只检查MASK指定的标志位,MASK是逗号分隔的标志位列表;COMP表示此列表中的位必须为1,而MASK中出现的,COMP中没出现的则必须为0)
举例:-p tcp --tcp-flags SYN,ACK,FIN,RST SYN(表示为TCP三次握手的第一次,也可表示为-p tcp --syn)
-p icmp --icmp-type 0|8|3|5|9(0表示echo-reply(ping应答,回显应答),8表示echo-request(ping请求,回显请求);例如我ping别人,ping出去的8,别人回应进来的0;例如别人ping我,出去的0,进来的8)
-p udp --sport PORT[:PORT]
-p udp --dport PORT[:PORT]
匹配标准(扩展匹配(显式扩展:使用额外的匹配机制)):
-m state --state NEW|ESTABLISHED|INVALID|RELATED(/lib[64]/iptables/libipt_state.so,结合ip_conntrack追踪会话的状态,NEW表示新连接请求,ESTABLISHED表示已建立的连接,INVALID表示非法连接请求(如:SYN=1,FIN=1),RELATED表示相关联的(专为ftp服务))
-m multiport --source-ports PORT,PORT,……[:PORT](实现离散的多端口匹配,多个离散的用逗号隔开,范围内的用冒号,最多可指定15个)
-m multiport --destination-ports PORT,PORT,……[:PORT]
-m multiport --ports PORT,PORT,……[:PORT]
-m iprange [!] --src-range IP-IP(仅匹配IPv4地址)
-m iprange --dst-range IP-IP
-m connlimit [!] --connlimit-above NUM(连接数限定,表示达到NUM上限则DROP或REJECT;若使用!则表示未达到上限要用ACCEPT)
-m limit --limit RATE(例如tc(traffic control流量控制,流量×××,流量重塑reshape,采用令牌桶token bucket,仅获取到令牌的才允许访问连接);limit不能限定总体上限,仅控制单位时间的流量上限;RATE表示单位时间的流量控制,如3/second,3/minute,3/hours,3/day)
-m limit --limit-burst NUM(表示控制每一次最多蜂拥而来NUM个)
-m string --algo bm|kmp --string “PATTERN”(匹配字符串,若在拒绝网页中某字串显示,注意是在OUTPUT链上写规则)
-j TARGET(处理办法):
-j ACCEPT
-j DROP(悄悄丢弃,不告知对方,一般用此项)
-j REJECT(明确告知拒绝,若拒绝一般用DROP,以防引起对方反感会主动***)
-j DNAT --to-destination IP[-IP][:PORT-PORT](目标地址转换)
-j SNAT --to-source IP[-IP](源地址转换)
-j REDIRECT(端口重定向)
-j MASQUERADE(地址伪装,用于SNAT(POSTROUTING))
-j LOG(仅记录日志,不负责报文的去向)
-j MARK(打标记)
例:-j LOG --log-prefix “STRING”
举例:(修改默认策略为DROP,分别放行ssh服务和httpd服务及本地接口)
#iptables -t filter -A INPUT -s 192.168.101.0/24 -d 192.168.101.154 -p tcp --dport 22 -j ACCEPT(先放行ssh服务,防止修改了默认策略把自己挡在门外)
#iptables -t filter -A OUTPUT -s 192.168.101.154 -d 192.168.101.0/24 -p tcp --sport 22 -j ACCEPT
#iptables -P INPUT DROP(修改默认策略)
#iptables -P OUTPUT DROP
#iptables -t filter -I INPUT -d 192.168.101.154 -p tcp --dport 80 -j ACCEPT
#iptables -t filter -I OUTPUT -s 192.168.101.154 -p tcp --sport 80 -j ACCEPT
#iptables -t filter -I INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
#iptables -t filter -I OUTOUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT
举例:(我能ping别人,别人ping不了我)
#iptables -t filter -A INPUT -d 192.168.101.154 -p icmp --icmp-type 0 -j ACCEPT
#iptables -t filter -A OUTPUT -s 192.168.101.154 -p icmp --icmp-type 8 -j ACCEPT
#iptables -L -n -vv(分别在win主机和本机ping对方,查看有无匹配到的包)
举例:(状态追踪)
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -F
#iptables -A INPUT -d 192.168.101.154 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -s 192.168.101.154 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -A INPUT -d 192.168.101.154 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -s 192.168.101.154 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
#iptables -A INPUT -d 192.168.101.154 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -A OUTPUT -s 192.168.101.154 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
#iptables -L -n
#iptables -I OUTPUT -s 192.168.101.154 -m state --state ESTABLISHED -j ACCEPT(将OUTPUT链上的规则合并,一条规则放行所有条目,之后只用写INPUT链上的规则,OUTPUT链上(出去的规则)的规则就不用写了)
#iptables -D OUTPUT 2
举例:(iptables中配置ftp服务,注意ftp服务有被动模式,端口随机,配置时INPUT和OUTPUT都要有ESTABLISHED和RELATED)
#lsmod | grep ip_nat_ftp(查看是否有此模块,配置ftp需要装载两个模块ip_nat_ftp和ip_conntrack_ftp)
#modprobe ip_nat_ftp(装载此模块会自动装载ip_conntrack_ftp,确保这两个模块用lsmod可查看到)
#vim /etc/sysconfig/iptables-config(以上是手动装载,为方便每次重启服务或主机能自动装载此模块,添加如下信息,多个模块间用空格隔开)
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp ip_conntrack_netbios_ns"
#iptables -A INPUT -d 192.168.101.154 -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
#iptables -I OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -I INPUT -d 192.168.101.154 -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -I INPUT 2 -d 192.168.101.154 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW,ESTABLISHED -j ACCEPT(将INPUT链整合)
#iptables -D INPUT 3
#service iptables save
举例:(-m iprange)
#iptables -A INPUT -m iprange --src-range 192.168.101.130-192.168.101.150 -d 192.168.101.154 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT(仅设置了INPUT链,因为OUTPUT链已被设置为ESTABLISHED,RELATED)
举例:(-m connlimit)
#iptables -I INPUT 2 -d 192.168.101.154 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j DROP(设置上限值,单个IP最多仅允许连进2个,若大于两个提示Connectionrefused;若用!取反则表示2个以下最后要用ACCEPT,如-m connlimit ! --connlimit-above 2 -j ACCEPT)
#iptables -L -n -vv(查看有无匹配到的包)
举例:(-m limit)
#iptables -A INPUT -d 192.168.101.154 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 3 -j ACCEPT(在WIN下使用>ping -t IP查看效果)
#iptables -L -n -vv
举例:(-m sring)
#iptables -I OUTPUT -s 192.168.101.154 -p tcp --sport 80 -m string --alog bm --string “magedu” -j REJECT(注意此例web服务是在OUTPUT链上)
举例:( -j LOG)
#iptables -R INPUT 3 -d 192.168.101.170 -p icmp --icmp-type 8 -j LOG --log-prefix “—firewall log prefix”
举例:(自定义链——清洗链)
#iptables -N clean_in
#iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
#iptables -A clean_in -d 192.168.255.255 -p icmp -j DROP
#iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP
#iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP
#iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP
#iptables -A clean_in -d 192.168.101.154 -j RETURN
#iptables -I INPUT -j clean_in
举例:(利用recent模块抵御DOS***(denial of service拒绝服务))
#iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP(单IP最多连进3个,若内网用SNAT上互联网可调大该值)
#iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH(--set记录数据包的来源IP,若已存在则是更新已存在条目;--name指定列表名为SSH,/proc/net/ipt_recent/SSH)
#iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP(利用recent和state模块限制单IP在300s内只能与本机建立3个新连接,被限制五分钟后即可恢复访问,--seconds和--hitcount要与—update一起用)
举例:(SNAT)
#iptables -t nat -A POSTROUTING -s 172.16.100.0/16 -j SNAT --to-source 192.168.101.154
#iptables -t nat -A POSTROUTING -s 172.16.100.0/16 -j SNAT MASQUERADE(MASQUERADE用于外网地址是动态获取时使用,它等同于--to-source 192.168.101.154)
#iptables -F
#iptables -P FORWARD DROP
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables -A FORWARD -s 172.16.100.0/16 -p tcp --dport 80 -m state --state NEW -j ACCEPT
#iptables -A FORWARD -s 172.16.100.0/16 -p tcp --dport 21 -m state --state NEW -j ACCEPT
举例:(DNAT)
#iptables -t nat PREROUTING -d 172.16.100.2 -p tcp --dport 80 -j DNAT --to-destination 192.168.101.154[:80](注意其它限制要在FORWARD链上写规则)
注:对LINUX,地址是属于主机的并不是网卡,一个主机在两网卡上配两个地址,开启ip_forward后,所有报文都转发,若只想转发部分报文在FORWARD链上过滤
layer7(使iptables具有应用层过滤功能,软件包:l7-protocols-2009-05-28.tar.gz,netfilter-layer7-v2.21.tar.gz,iptables-1.4.4.tar.bz2,linux-2.6.28.10.tar.gz)
#uname -r(现系统版本redhat5.8 2.6.18-308.el5-->2.6.28.10(将内核打补丁并升级,2.6.28是此软件开发人员测试过的内核稳定的版本,其它内核高版本未测试)
#tar xf linux-2.6.28.10.tar.gz -C /usr/src/
#tar xf netfilter-layer7-v2.21.tar.gz -C /usr/src
#cd /usr/src
#ln -sv linux-2.6.28.10/ linux
#cd linux
# patch -p1 < ../netfilter-layer7-v2.21/kernel-2.6.25-2.6.28-layer7-2.21.patch(-p1表示补丁包在上一级目录)
#cp /boot/config-2.6.18-308.el5 ./.config
#make menuconfig
General setup --->
Localversion - append to kernel release(添加-l7)
Networking support--> Networking options-->Network packet filtering framework (Netfilter)--> Core NetfilterConfiguration(确保开启如下选项)
<M> Netfilter connection trackingsupport
<M> FTP protocol support
<M> "connlimit" match support"
<M> "conntrack" connection tracking match support
<M> "iprange" address range match support
<M> "mac" address match support
<M> "multiport" Multiple port match support
<M> "state" match support
<M> "layer7" match support
[*] Layer 7 debugging output
<M> "string" match support
<M> "time" match support
Networking support--> Networking options-->Network packet filtering framework (Netfilter)--> IP: NetfilterConfiguration
<M> IPv4 connection tracking support(required for NAT)
<M> Full NAT
<M> MASQUERADE target support
<M> NETMAP target support
<M> REDIRECT target support
Networking support-->(将不需要的编译项划掉,以节省编译时间)
[ ] Wireless --->
< > Bluetooth subsystem support --->
[ ] Virtualization --->
Device Drivers --->
< > Sound card support --->
< > InfiniBand support --->
[*]Network device support --->
[ ] Ethernet (1000 Mbit) --->
[ ] Ethernet (10000 Mbit) --->
[ ] Token Ring driver support --->
[ ] PCMCIA network device support --->
[ ] ATM drivers --->
[ ] FDDI driver support
File systems --->
< > GFS2 file system support
#screen(为防止终端意外终止,使用能可恢复)
#make
ctrl+a,d表示暂时离开当前屏幕会话Detachscreen from this terminal
#screen -ls
#screen -r 12819(恢复编译的屏幕会话状态)
#make modules_install
#make install
#vim /boot/grub/grub.conf(将default=1改为0,使用新编译的内核)
default=0
……
title Red Hat Enterprise Linux Server(2.6.28.10-l7)
……
title Red Hat Enterprise Linux Server(2.6.18-308.el5)
……
#shutdown -r now
#cd
#cp /etc/init.d/iptables ./
#cp /etc/sysconfig/iptables-config ./
#rpm -e --nodeps iptables iptables-ipv6 iptstate
#tar xf iptables-1.4.4.tar.bz2 -C /usr/src
#cd /usr/src/ iptables-1.4.4
#cp ../netfilter-layer7-v2.21/iptables-1.4.1.1-for-kernel-2.6.20forward/libxt_layer7.* ./extensions/
#./configure --prefix=/usr --with-ksource=/usr/src/linux
#make && make install
#which iptables
/usr/sbin/iptables
#cp /root/iptables /etc/rc.d/init.d/
#vim /etc/init.d/iptables(将21,22行的/sbin/$IPTABLES改为/usr/sbin/$IPTABLES)
#cp /root/iptables-config /etc/sysconfig/
#service iptables start
#tar xf l7-protocols-2009-05-28.tar.gz
#cd l7-protocols-2009-05-28
#make install
#ls /etc/l7-protocols/protocols(此目录包含众多可控制的应用,如qq,xunlei,pplive,pop3,ftp等)
-m layer7 --l7proto PROTOCOL_NAME -j ACCEPT|DROP
-m time --datestart YYYY[-MM [-DD]] --datestop YYYY[-MM[-DD]]
-m time --timestart hh:mm[:ss] --timestop hh:mm[:ss]
举例:
#iptables -t nat -A POSTROUTING -s 192.168.101.0/24 -j SNAT --to-source 172.16.100.1
#iptables -A FORWARD -s 192.168.101.10/24 -m layer7 --l7proto qq -j DROP
#iptables -A FORWARD -s 192.168.101.0/24 -m time --timestart 08:00:00 --timestop 12:00:00 -j REJECT
#iptables -A FORWARD -s 192.168.101.0/24 -m time --timestart 14:30:00 --timestop 18:00:00 -j REJECT
iptables脚本:
#!/bin/bash
#
ipt=/usr/sbin/iptables
iinterface=eth0
einterface=eth1
iip=192.168.101.154
eip=172.16.100.1
$ipt -t nat -F
$ipt -t filter -F
$ipt -t mangle -F
$ipt……
以上是学习《马哥运维课程》做的笔记。