Linux iptables防火墙第一篇
一、名词知识:
IPS:Intrusion Prevention System 入侵防御系统
IDS:Intrusion Detection System 入侵检测系统
IDC:Internet Data Center 互联网数据中心
二、基本知识:
入侵检测系统(IDS)通常都是被动设备,他们没有被配置为针对可能怀有恶意的网络流量自动采取任何惩罚行动。
有些IDS被部署为线内模式,当系统以这种方式部署时,通常就称为网络入侵防御系统(IPS)。
在Linux系统上,iptables可以通过将IDS签名转换进iptables策略以阻止网络攻击的方式来提供基本的IPS功能。
在网络安全领域,最优秀的开源入侵检测系统是Snort。
OSI七层:
具体7层 |
数据格式 |
功能与连接方式 |
典型设备 |
协议 |
应用层 Application |
|
网络服务与使用者应用程序间的一个接口 |
|
Telnet、FTP、HTTP、SNMP、DNS等 |
表示层 Presentation |
|
数据表示、数据安全、数据压缩 |
|
|
会话层 Session |
|
建立、管理和终止会话 |
|
|
传输层 Transport |
数据组织成数据段Segment |
用一个寻址机制来标识一个特定的应用程序(端口号) |
网关 |
TCP、UDP、SPX等 |
网络层 Net Work |
分割和重新组合数据包Packet |
基于网络层地址(IP地址)进行不同网络系统间的路径选择 |
路由器 |
IP、IPX、OSPF等 |
数据链路层 Data Link |
将比特信息封装成数据帧Frame |
在物理层上建立、撤销、标识逻辑链路和链路复用,以及差错校验等功能。通过使用接收系统的硬件地址或物理地址来寻址 |
网桥、交换机、网卡 |
SDLC、HDLC、PPP、STP、帧中继等 |
物理层 Physical |
传输比特(bit)流 |
建立、维护和取消物理连接 |
光钎、同轴电缆、双绞线、中继器、集线器 |
EIA/TIARS-232、EIA/TIARS-449、V.35、RJ-45等 |
Linux iptables防火墙第二篇
Netfilter(封包过滤机制):分析进入主机的网络封包,将封包的表头数据捉出来进行分析,以决定该联机为放行或抵挡的机制。
1、表 table
表是iptables构建块,它描述了其功能的打雷,如包过滤或网络地址转换(NAT)。
iptables中共有4个表:
一、filter(过滤器):主要跟进入Linux本机的封包有关。
INPUT:主要与想要进入Linux本机的封包有关。
OUTPUT:主要与Linux本机索要送出的封包有关。
FORWARD:这个与Linux本机比较没有关系,它可以“转递封包”到后端的计算机中,与后面的nat table相关性较高。
二、nat(地址转换):Network Address Translation,这个主要在进行来源与目的IP或port的转换,与Linux本机无关,主要与Linux主机后的局域网络内的计算机有关。
PREROUTING:用于在内核进行IP路由计算之前修改数据包的头部
POSTROUTING:用于在内核进行IP路由计算之后修改数据包的头部
三、mangle(破坏者):这个表格主要是与特殊的封包的路由旗标有关。单纯的环境当中,较少使用mangle。
四、raw:独立于netfiler连接跟踪子系统起作用的规则应用于raw表
2、链 chain
每个表都有自己的一组内置链。
filter表中的链:INPUT、OUTPUT、FORWARD
INPUT:当一个数据包由内核中的路由计算确定为指向本地linux系统(即该数据包指向一个本地套接字)之后,它将经过INPUT链的检查
OUTPUT:保留给由linux系统自身生成的数据包
FORWARD:管理经过linux系统路由的数据包(即当iptables防火墙用于连接两个网络,并且两个网络之间的数据包必须流经该防火墙)
nat表中的链:PREROUTING、POSTROUTING
3、匹配 match
iptables匹配指的是数据包必须匹配的条件,只有当数据包满足所有的匹配条件时,iptables才能根据由该规则的目标所指定的动作来处理该数据包。
每个匹配都在iptables的命令行中指定。
--source(-s)——匹配源IP地址或网络
--destination(-d)——匹配目标IP地址或网络
--protocol(-p)——匹配IP值
--in-interface(-i)——流入接口(例如,eth0)
--out-interface(-o)——流出接口
--state ——匹配一组连接状态
--string ——匹配应用层数据字节序列
--comment ——在内核内存中为一个规则关联多达256个字节的注释数据
4、目标 target
用于在数据包匹配一条规则时发一个动作
ACCEPT ——允许数据包通过
DROP ——丢弃数据包,不对该数据包做进一步的处理,对接收栈而言,就好像该数据包从来没有被接收一样
LOG ——将数据包信息记录到syslog
REJECT ——丢弃数据包,同时发送适当的响应报文
RETURN ——在调用链中继续处理数据包
Linux iptables防火墙第三篇:常用命令
一、常用命令列表:
命令:-A,--apend
示例:iptables -A INPUT
说明:新增规则到某个规则链中,该规则将会成为规则链中的最后一条规则。
命令:-D,--delete
示例:iptables -D INPUT 1
说明:从某个规则链中删除一条规则,可以输入完整规则,或直接指定规则编号。
命令:-R,--replace
示例:iptables -R INPUT 1 -s 192.168.0.1 -j DROP
说明:取代现行规则,规则被取代后不会改变顺序。
命令:-I,--insert
示例:iptables -I INPUT 1 --dport 80 -j ACCEPT
说明:插入一条规则,原本该位置上的规则将会往后移动一个顺位。
命令:-L,--list
示例:iptables -L INPUT
说明:列出某规则链中的所有规则。
命令:-F,--flush
示例:iptables -F INPUT
说明:删除某规则链中的所有规则
命令:-Z,--zero
示例:iptables -Z INPUT
说明:将封包计数器归零。封包计数器是用来计算同一封包出现次数,是过滤阻断式攻击不可或缺的工具。
命令:-N,--new-chain
示例:iptables -N allowed
说明:定义新的规则链。
命令:-X,--delete-chain
示例:iptables -X allowed
说明:删除某个规则链。
命令:-P,--policy
示例:iptables -P INPUT DROP
说明:定义过滤规则。为符合过滤条件的封包,预设的处理方式。
命令:-E,--rename-chain
示例:iptables -E allowed disallowed
说明:修改某自定规则链的名称。
二、常用封包比对参数:
参数:-p,--protocol
示例:iptables -A INPUT -p tcp
说明:比对通讯协议类型是否享福,可以使用 ! 运算进行反向比对。例如:-p ! tcp,意思是指除tcp意外的其它类型,包含udp、icmp……等。如果要比对所有类型,则可以使用all关键词,例如:-p all。
参数:-s,--src,--source
示例:iptables -A INPUT -s 192.168.0.1
说明:用来比对封包的来源IP,可以比对单机或网络,比对网络时用数字来表示屏蔽,例如:-s 192.168.0.0/24,比对IP时也可以使用 ! 运算进行反向比对,例如:-s ! 192.168.0.0/24。
参数:-d,--dst,--destination
示例:iptables -A INPUT -d 192.168.0.1
说明:用来比对封包的目的地 IP,设定方式同上。
参数:-i,--in-interface
示例:iptables -A INPUT -i eth0
说明:用来比对封包是从哪片网卡进入。可以使用通配字符 + 来做大范围比对,例如: -i eth+ 表示所有的ethernet网卡,也可以使用 ! 运算进行反向比对,例如:-i ! eth0。
参数:-o,--out-interface
示例:iptables -A INPUT -i eth0
说明:用来比对封包要从哪片网卡送出,设定方式同上。
参数:--sport,--source-port
示例:iptables -A INPUT -p tcp --sport 22
说明:用来比对封包的来源埠号,可以比对单一埠,或是一个范围,例如:--sport 22:80,表示从22到80埠之间都符合条件,如果要比对不连续的多个埠,则必须使用--multiport参数,参见后文。比对埠号时,可以使用 ! 运算进行反向比对。
参数:--dport,--destination-port
示例:iptables -A INPUT -p tcp --dport 22
说明:用来比对封包的目的地埠号,设定方式同上。
参数:--tcp-flags
示例:iptables -p tcp --tcp-flags SYN,FIN,ACK SYN
说明:比对TCP封包的状态旗号,参数分为两个部分,第一个部分列举出想比对的旗号,第二部分则列举前述旗号中哪些有被设定,未被列举的旗号必须是空的。TCP状态旗号包括:SYN(同步)、ACK(应答)、FIN(结束)、RST(重设)、URG(紧急)、PSH(强迫推送)等均可使用于参数中,除此之外还可以使用关键词ALL和NONE进行比对。比对旗号时,可以使用 ! 运算进行反向比对。
参数:--syn
示例:iptables -p tcp --syn
说明:用来比对是否为要求联机之TCP封包,与iptables -p tcp --tcp-flags SYN,FIN,ACK SYN的作用完全相同。如果使用 ! 运算,可用来比对非要求联机封包。
参数:-m multiport --source-port
示例:iptables -A INPUT -p tcp -m multiport --source-port 22,53.80.110
说明:用来比对不连续的多个来源埠号,一次最多可以比对15个埠,可以使用 ! 运算进行反向比对。
参数:-m multiport --destination-port
示例:iptables -A INPUT -p tcp -m multiport --destination-port 22,53,80,110
说明:用来比对不连续的多个目的地埠号,设定方式同上。
参数:-m multiport --port
示例:iptables -A INPUT -p icmp --icmp-type 8
说明:用来比对ICMP的类型编号,可以使用代码或数字编号来进行比对。iptables -p icmp --help 查看有哪些代码可以用。
参数:-m limit --limit
示例:iptables -A INPUT -m limit --limit 3/hour
说明:用来比对某段时间内封包的平均流量,上面的例子是用来比对:每小时平均流量是否超过一次3个封包。除了每小时平均一此外,也可以每秒钟、每分钟或每天平均一次、默认值为每小时平均一次,参数后加:/second、/minute、/day。除了进行封包数量的比对外,设定这个参数也会在条件达成时,暂停封包的比对动作,以避免因黑客使用洪水攻击法,导致服务被阻断。
参数:--limit-burst
示例:iptables -A INPUT -m limit --limit-burst 5
说明:用来比对瞬间大量封包的数量,上面的例子是用来比对一次同时涌入的封包是否超过5个(这是默认值),超过此上限的封包将被直接丢弃。使用效果同上。
参数:-m mac --mac-source
示例:iptables -A INPUT -m mac --mac-source 00:00:00:00:00:01
说明:用来比对封包来源网络接口的硬件地址,这个参数不能用来OUTPUT和Postrouting规则链上,这事因为封包要送出到网卡后,才能由网卡驱动程序透过ARP通讯协议查出目的地的MAC地址,所以iptables在进行封包比对时,并不知道封包会送到哪个网络接口去。
参数:--mark
示例:iptables -t mangle -A INPUT -m mark --mark 1
说明:用来比对封包是否被表示某个号码,当封包被比对成功时,我们可以透过MARK处理动作,将该封包标示一个号码,号码最大不可以超过4294967296。
参数:-m owner --uid-owner
示例:iptables -A OUTPUT -m owner --uig-owner 500
说明:用来比对来自本机的封包,是否为某特定使用者所产生的,这样可以避免服务器使用root或其他身份将敏感数据传送出去,可以降低系统被黑的损失。可惜这个功能无法比对出来自其它主机的封包。
参数:-m owner --gid-owner
示例:iptables -A OUTPUT -m owner --gid-owner 0
说明:用来比对来自本机的封包,是否为某特定使用者群组所产生的,使用时机同上。
参数:-m owner --pid-owner
示例:iptables -A OUTPUT -m owner --pid-owner 78
说明:用来比对来自本机的封包,是否为某特定进程所产生的,使用时机同上。
参数:-m owner --sid-owner
示例:iptables -A OUTPUT -m owner --sid-owner 100
说明:用来比对来自本机的封包,是否为某特定联机(Session ID)的响应封包,使用时机同上。
参数:-m state --state
示例:iptables -A INPUT -m state --state RELATED,ESTABLISHED
说明:用来比对联机状态,联机状态共有四种:INVALID、ESTABLISHED、NEW和RELATED。
INVALID表示该封包的联机编号(Session ID)无法辨识或者编号不正确。
ESTABLISHED表示该封包属于某个已经建立的联机。
NEW表示该封包想要起始一个联机(重设联机或将联机重导向)。
RELATED表示该封包是属于某个已经建立的联机所建立的新联机。例如:FTP-DATA联机必定是源自某个FTP联机。
三、常用的处理动作:
-j 参数用来指定要进行的处理动作,常用的处理动作包括:ACCEPT、REJECT、DROP、REDIRECT、MASQUERADE、LOG、DNAT、SNAT、MIRROR、QUEUE、RETURN、MARK,分别说明如下:
ACCEPT:将封包放行,进行完此处理动作后,将不再比对其他规则,直接跳往下一个规则链(nat:postrouting)。
REJECT:拦阻该封包,并传送封包通知对方,可以传送的封包有几个选择:ICMP port-unreachable、ICMP echo-reply、tcp-reset(这个封包会要求对方关闭联机),进行完此处理动作后,将不再比对其他规则,直接中断过滤程序。
示例:iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset
DROP:丢弃封包不予处理,进行完此处理动作后,将不再比对其他规则,直接中断过滤程序。
REDIRECT:将封包重新导向到另一个端口(PNAT),进行完此处理动作后,将会继续比对其他规则。这个功能可以用来实作通透式proxy或用来保护web服务器。
示例:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
MASQUERADE:改写封包来源IP为防火墙 NIC IP,可以指定port对应的范围,进行完此处理动作后,直接跳往下一个规则链(mangle:postrouting)。这个功能与SNAT略有不同。当进行IP伪装时,不需指定要伪装成哪个IP,IP会从网卡直接读取,当使用拨连接线时,IP通常是由ISP公司的DHCP服务器指派的,这个时候MASQUERADE特别游泳。
示例:iptables -t nat -A POSTROUTING -p TCP -j MASQUERADE --to-ports 1024-31000
LOG:将封包相关讯息记录在/var/log中,详细位置请查阅/etc/syslog.conf。进行完此处理动作后,将会继续比对其他规则。
示例:iptables -A INPUT -p tcp -j LOG --log-prefix "INPUT packets"
SNAT:改写封包来源IP为某特定IP或IP范围,可以指定port对应的范围,进行完此处理动作后,将直接跳往下一个规则链(mangle:postrouting)。
示例:iptables -t nat -A POSTROUTING -p tcp-o eth0 -j SNAT --to-source 192.168.10.155-192.168.10.160:1024-32000
DNAT:改写封包目的地IP为某特定IP或IP范围,可以指定port对应的范围,进行完此处理动作后,将会直接跳往下一个规则链(filter:input或filter:forward)。
示例:iptables -t nat -A PREROUTING -p tcp -d 15.45.23.67 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100
MIRROR:镜射封包,也就是将来源IP与目的地IP对调后,将封包送回,进行完此处理动作后,将会中断过滤程序。
QUEUE:中断过滤程序,将封包放入队列,交给其他程序处理。透过自行开发的处理程序,可以进行其它应用。例如:计算机联机费用……等。
RETURN:结束在目前规则链中的过滤程序,返回主规则链继续过滤,如果把自定规则链看成是一个子程序,那么这个动作就相当于提早结束子程序并返回到主程序中。
MARK:将封包标上某个代号,以便提供作为后续过滤的条件判断依据,进行完此处理动作后,将会继续比对其它规则。
示例:iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2