Linux运维第三阶段(十一)iptables

 

iptables

 

linux防火墙:netfilter(框架framework);iptables(生成防火墙规则并将其附加在netfilter上,真正实现数据报文过滤、NATmangle等规则生成的工具);真正起作用的是规则,规则放在netfilter上才能生效

 

网络防火墙的功能根据TCP/IP首部实现的

IP报文(见文末附图):

fragment ID(段标识)

MFmore fragment

DFdon’t fragment,单个报文大小超过默认值会返回错误信息)

Fragment offset(片偏移,报文的先后次序)

TTLtime to liveip报文会经多个router转发,每经一个网关设备将TTL值减1,否则会永远在网络上游荡)

Protocol(标记tcp,udp,icmp(icmp是三层半协议,不能实现报文控制,仅实现网络控制)

Header Checksum(存放首部校验码)

TCP报文(见文末附图):

Source Port number

Destination Port number

Sequence number(序列号,发送方告诉接收方发送报文的编号,依次向后加1

Acknowledgment number(确认号,把对方的序列号加1再返回给对方)

URGurgent紧急指针,0无效,1有效)

ACK(确认号是否有效)

PSHpush推送,不能在缓冲区,内核优先处理的报文)

RSTreset重置)

SYN(同步请求,建立联系的第一个请求)

FIN(断开连接)

注:对TCP来说,应用层协议封装的报文(http+data),都视为数据;对IP来说,传输层以上封装的报文都视为数据(tcp+http+data

 

The tcp finite state machineTCP的有限状态机,三次握手四次挥手):

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=0TCP三次握手中的第一次)

SYN=1,ACK=1,FIN=0,RST=0TCP三次握手中的第二次)

ACK=1,SYN=0,RST=0,FIN=0TCP三次握手中的第三次ESTABLISHED

 

防火墙:工作在主机边缘或网络边缘(数据报文进出的地方),对于进出的数据报文进行检查、监控、并能根据事先定义好的规则(匹配的标准),做出相应处理的组件就称作防火墙

规则:匹配标准、处理办法

硬件防火墙(背后是图形化了的iptables,或二次开发的iptables

软件防火墙

网络管理的职责:设计规则

对于服务器来讲,拒绝所有,仅开放明确已知的报文

默认规则若是开放,我们就要堵;默认规则若是关闭,我们就要通

IPSIPDIP

TCPSPORTDPORT

UDPSPORTDPORT

ICMPicmp-type(有报文类型的区别,不用端口而是报文,如ping时,有网关不可达,主机不在线,请求超时,主机名称无法解析等,报文格式均不相同)

 

数据报文过滤:

用户空间的命令(管理工具app)直接操作内核(内核中的工作框架)的机制

注:app只是个规则生成器,写完规则就没用了,而内核中的框架netfilter+规则就可发挥作用

早期linux无防火墙,参考FreeBSD(openBSD)移植过来的

linux2.0ipfw/firewall-->2.2ipchain/firewall-->2.4iptables/netfilter

 

规则放在内核中框架的5个位置:

prerouting,input,forward,output,postrouting(这五个位置是netfilter设计者补充在TCP/IP协议栈中的五个钩子函数hookfunction

 

报文的三种流向(可理解为三个门):进入本地(input);从本地出去(output);经本地转发(forward)。报文经网卡送至TCP/IP协议栈,就根据路由表作出决策。

 

prerouting数据报文经网卡送至本地,在根据路由表作出决策前对其作出处理

input进入本地(请求本地某服务)

output从本地出去(响应请求或请求其它服务器)

forward经本地转发

postrouting已送至本地网卡,即将离开本机时对其处理(在路由决策作出之后)

 

prerouting postrouting:并不用来放行(ACCEPT)或拒绝(DROPREJECT)报文,而是用来作NATnetworkaddress translationSNAT(source NAT要在出去的时候改POSTROUTING,适用于公司仅一个公网地址,内网主机要上互联网)DNAT(destination NAT要在刚进本机时改PREROUTING,适用于公司仅一个公网地址,内网的多个服务器向互联网提供服务)

 

四表五链(在表的链上生成的规则)

五个规则链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

四种不同功能(四个表),优先级依次为:raw,mangle,nat,filter

raw表:确定是否对该数据包进行状态跟踪(PREROUTINGOUTPUT

mangle表:为数据包设置标记,拆开报文,修改报文并封装(PREROUTINGINPUTFORWARDOUTPUTPOSTROUTING

nat表:地址转换,修改数据包中源IP、目标IP或端口(PREROUTINGPOSTROUTING

filter表:过滤,确定是否放行该数据包(INPUTFORWARDOUTPUT

数据包过滤匹配流程:参考文末附图

 

自定义链:只能被默认链调用以后才能发挥功能(跳转执行自定义链),可精简整个链的结构,可提高整个链的效率,将那些同类的(或处理量大的)独立出来,例如只有访问WEB服务时才跳转,其它的依次顺序执行

注:可以使用自定义链,只在被调用时才发挥作用,而且如果没有与自定义链中的任何规则匹配还应该有返回机制;用户可以删除自定义链,默认链不能被删除

 

规则:匹配标准、处理动作(处理办法)

注:每个规则都有两个内置的计数器(被匹配到的报文个数、被匹配的报文大小之和)

匹配标准:通用匹配(自身能够检查);扩展匹配(隐含扩展、显示扩展,依赖于模块检查)

#rpm -ql  iptables/lib[64]/iptables/*.so,扩展模块)

注:隐含扩展(不用指明由哪个模块进行的扩展,使用-p  {tcp|udp|icmp});显示扩展(必须指明由哪个模块进行的扩展,使用-m  NAME即可)

 

iptables不是服务,但有服务脚本,服务脚本的主要作用在于管理(生效、清除、重新载入)保存的规则

#service iptables  start|stopiptables服务的启动和停止就是让内核装载和移除相关模块)

#lsmod |  grep  ipiptable_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 -tA 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,设定指定链的默认策略,TARGETACCEPTDROP))

-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|90表示echo-replyping应答,回显应答),8表示echo-requestping请求,回显请求);例如我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上限则DROPREJECT;若使用!则表示未达到上限要用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(地址伪装,用于SNATPOSTROUTING))

-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服务有被动模式,端口随机,配置时INPUTOUTPUT都要有ESTABLISHEDRELATED

#lsmod |  grep  ip_nat_ftp(查看是否有此模块,配置ftp需要装载两个模块ip_nat_ftpip_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(利用recentstate模块限制单IP300s内只能与本机建立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  MASQUERADEMASQUERADE用于外网地址是动态获取时使用,它等同于--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.gznetfilter-layer7-v2.21.tar.gziptables-1.4.4.tar.bz2linux-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……

 

 

 

 

 

 

以上是学习《马哥运维课程》做的笔记。