防火墙及netfilter基础iptables基本用法

iptables

firewall:

主机防火墙

网络防火墙

工作于主机或网络的边缘,对于进出的报文根据事先定义的规则作检查,将那些能够被规则所匹配到的报文作出相应处理的组件。

网络防火墙:

专业的硬件防火墙:

checkpoint,netscreen

主机:

iptables: 程序

iptables:规则编写工具

netfilter: 网络过滤器, 内核中工作在TCP/IP网络协议栈上的框架;

IDS:IntrusionDetecting System

NIDS

HIDS

IPS:Intrusion Protec System

HoneyPot: 蜜罐

kali,(backtrack)

OpenBSD:

ipfw

ipchains

iptables/netfilter

kernel,framework

hooksfunction:

prerouting: 进入本机后路由功能发生之前

input:到达本机内部

output: 由本机发出

forward: 由本机转发

postrouting:路由功能发生之后,即将离开本机之前

路由发生的时刻:

报文进入本机后:

判断目标地址

报文离开本机之前:

判断经由哪个接口发出;

报文流向经由的位置:

到本内部:prerouting, input

由本机发出:output, postrouting

由本机转发:prerouting, forward, postrouing

规则的功能:

过滤:firewall,

地址转换:NAT Server

NetworkAddress Translation

mangle:修改报文首部中的某些信息

raw:关闭nat表上启用的连接追踪功能

filter:input,forward, output

nat:prerouting,output, postrouting

mangle:prerouting,input, forward, output, postrouting

raw:prerouting,output

iptables:每个钩子函数上可放置n条规则;对应于每个钩子上的多条规则就称为一个链(CHAIN)

每个功能有多个链,所以,就称作表;

链:链上的规则次序即为检查次序,因此有一定的法则

(1) 同类规则,匹配范围小的放上面;

(2) 不同类规则,匹配报文几率较大的放上面;

(3) 应该设置默认策略;

iptables/netfilter

netfilter:framework in kernel

tcp/ip协议栈

iptables有四表五链

filter:input, forward, output

添加规则时的考量点:

(1) 要实现的功能:判断添加在哪个表上;

(2) 报文流向及经由路径:判断添加在哪个链上;

功能的优先级:

由高而低:

raw--> mangle --> nat --> filter

规则的组成部分:

报文的匹配条件, 匹配之后如何处理

匹配条件:基本匹配条件、扩展匹配条件

如何处理:内建处理机制、自定义处理机制(自定义的链)

注意:报文不可能经由自定义链,只有在被内置链上的引用才能生效(即做为自定义目标)

iptables:规则管理工具

自动实现规则的语法检查

规则和链有计数器:

pkts: 由规则或链匹配到的报文的个数;

bytes:由规则或链匹配到的所有报文大小之和;

链:应该有默认策略;

iptables命令生成规则,送往netfilter;

规则通过内核接口直接送至内核,因此,会立即生效。但不会永久有效;

如果期望有永久有效,需要保存至配置文件中,此文件还开机时加载和由用户手工加载;

iptables[-t TABLE] SUBCOMMAND CHAIN CRETERIA -j TARGET

-tTABLE:

默认为filter, 共有filter, nat, mangle, raw四个可用;

SUBCOMMAND:

链:

-F:flush,清空指定表的指定链上所有规则;省略链名时,清空表中的所有链;

例:

[[email protected]~]# iptables -F INPUT

[[email protected]~]# iptables -F OUTPUT

-N:new, 新建一个用户自定义的链;自定义链只能作为默认链上的跳转对象,即在默认链通过引用来生效自定义链;

例:

-X:drop,删除用户自定义的空链;非空自定义链和内置链无法删除;

-Z:zero,将规则的计数器置0;

-P:policy,设置链的默认处理机制;当所有都无法匹配或有匹配有无法做出有效处理机制时,默认策略即生效;

filter表的可用策略:ACCEPT,DROP, REJECT

例:表明filter的表INPUT链默认为DROP

iptables-t filter -P INPUT DROP

-E:rename,重命名自定义链;

注意:被引用中的链,无法删除和改名

规则:

-A:append,在链尾追加一条规则;

-I:insert,在指定位置插入一条规则;

-D:delete,删除指定的规则;

-R:replace,替换指定的规则;

查看:

-L:list,列出指定链上的所有规则;

-n: numeric,以数字格式显示地址和端口号,即不反解;

-v: verbose,详细格式,显示规则的详细信息,包括规则计数器等;

-vv:

-vvv:

--line-numbers: 显示规则编号;

可以显示规则的编号

iptables -L -n --line-numbers

-x: exactly,显示计数器的精确值;

pktsbytes target     prot opt in     out    source               destination

pkts: 被本规则所匹配到的包个数;

bytes:被本规则所匹配到的所包的大小之和;

target: 处理目标(目标可以为用户自定义的链)

prot: 协议 {tcp,udp, icmp}

opt: 可选项

in: 数据包流入接口

out: 数据包流出接口

source: 源地址

destination: 目标地址;

CRETERIA: 匹配条件

检查IP首部,检查TCP、UDP或ICMP首部;

基于扩展机制,也可以进行额外的检查;如做连接追踪;

注意:可同时指定多个条件,默认多条件要同时被满足;

匹配条件:

通用匹配:

[!] -s, --src, --source  IP|Network:检查报文中的源IP地址;

-d, --dst, --destination:检查报文中的目标IP地址;

-p, --protocol:检查报文中的协议,即ip首部中的protocols所标识的协议;tcp、udp或icmp三者之一;

-i, --in-interface:数据报文的流入接口;通常只用于PREROUTING, INPUT, FORWARD链上的规则;

-o, --out-interface:检查报文的流出接口;通常只用于FORWARD, OUTPUT, POSTROUTING链上的规则;

例:替换第一条规则,检查为tcp协议首部

iptables -t filter -R INPUT 1 -s 172.16.250.145 -d 172.16.249.139 -ptcp -j ACCEPT

添加一条icmp协议的

iptables -t filter -R INPUT 1 -s 172.16.250.145 -d 172.16.249.139 -picmp -j ACCEPT

例:将INPUT的默认策略改为DROP

iptables -t filter -P INPUTDROP

例将原先的第二条规则替换为以eth0端口进入的以icmp协议

[[email protected] ~]# iptables -R INPUT 2 -s 172.16.250.145 -d172.16.249.139 -p icmp -i eth0 -j ACCEPT

[[email protected] ~]# iptables -L -n -v --line-numbers

Chain INPUT (policy DROP 7 packets, 796 bytes)

num   pkts bytes target     prot opt in     out    source              destination

1     1546  113K ACCEPT     tcp --  *      *      172.16.250.145      172.16.249.139

2        0     0 ACCEPT     icmp -- eth0   *       172.16.250.145       172.16.249.139

扩展匹配:使用iptables的模块实现扩展性检查机制

隐式扩展:如果在通用匹配上使用-p选项指明了协议的话,则使用-m选项指明对其协议的扩展就变得可有可无了;

tcp:

--dportPORT[-PORT]

--sport

--tcp-flagsLIST1 LIST2

LIST1: 要检查的标志位;

LIST2:在LIST1中出现过的,且必须为1标记位;而余下的则必须为0;

例如:--tcp-flags syn,ack,fin,rst syn

--syn:用于匹配tcp会话三次握手的第一次;

例:目标的80端口被禁止

iptables -I INPUT 1 -s 172.16.250.145 -d172.16.249.139 -p tcp -m tcp --dport 80 -j DROP(-m tcp可以不写)

udp:

--sport

--dport

icmp:

--icmp-types

8:echo request

0:echo reply

练习:

1、放行本机上的ssh和http服务;要求input和output策略默认均为DROP;

2、开放本机对ping的响应,和ping请求;

显式扩展:必须指明使用的扩展机制;

-m 模块名称

每个模块会引入新的匹配机制;

想知道有哪些模块可用:

rpm-ql iptables

小写字母,以.so结尾;

multiport扩展:

以离散定义多端口匹配;最多指定15个端口;

专用选项:

--source-ports,--sports PORT[,PORT,...]

--destination-ports,--dports PORT[,PORT,...]

--portsPORT[,PORT,...]

例子:

iptables-I INPUT 1 -d 172.16.100.11 -p tcp -m multiport --dports 22,80,443 -j ACCEPT

iptables-I OUTPUT 1 -s 172.16.100.11 -p tcp -m multiport --sports 22,80,443 -j ACCEPT

iprange扩展:

指定连续的ip地址范围;在匹配非整个网络地址时使用;

专用选项:

[!]--src-range IP[-IP]

[!]--dst-range IP[-IP]

示例:

iptables-A INPUT -d 172.16.100.11 -p tcp --dport 23 -m iprange --src-range172.16.100.1-172.16.100.100 -j ACCEPT

iptables-A OUTPUT -s 172.16.100.11 -p tcp --sport 23 -m iprange --dst-range172.16.100.1-172.16.100.100 -j ACCEPT

string扩展:

检查报文中出现的字符串,与给定的字符串作匹配;

字符串匹配检查算法:

kmp,bm

专用选项:

--algo{kmp|bm}

--string"STRING"

--hex-string "HEX_STRING":HEX_STRING为编码成16进制格式的字串;

示例:

iptables-I OUTPUT 1 -s 172.16.100.11 -p tcp --sport 80 -m string --string"sex" --algo kmp -j REJECT

time扩展:

基于时间区间做访问控制

专用选项:

--datestartYYYY[-MM][-DD][hh[:mm[:ss]]]

--dattestop

--timestart

--timestop

--weekdaysDAY1[,DAY2,...]

示例:

#iptables -R INPUT 1 -d 172.16.100.11 -p tcp --dport 80 -m time --timestart08:30 --timestop 18:30 --weekdays Mon,Tue,Thu,Fri -j REJECT

connlimit扩展:

基于连接数作限制;对每个IP能够发起的并发连接数作限制;

专用选项:

--connlimit-above[n]

#iptables -I INPUT 2 -d 172.16.100.11 -p tcp --dport 22 -m connlimit--connlimit-above 5 -j REJECT

limit扩展:

基于发包速率作限制;

专用选项:令牌桶算法

--limit  n[/second|/minit|/hour|/day]

--limit-burstn

iptables-R INPUT 3 -d 172.16.100.11 -p icmp --icmp-type 8 -m limit --limit 10/minute--limit-burst 5 -j ACCEPT

iptables/netfilter(3)

显式扩展(续)

connection template:连接追踪模板,用于记录各连接及相关状态;基于IP实现,与是否为TCP协议无关;通过倒计时的方式删除条目;

记录连接的状态:

NEW: 新建立的连接,连接追踪模板中无相应的条目时,客户端第一次发出的请求;

ESTABLISHED:NEW状态之后,边距追踪模板中的条目删除之前所进行的通信过程,都称为ESTABLISHED;

RELATED:相关联的连接,如ftp协议的命令连接与数据连接即为相关联的连接;

INVALIED: 无法识别的状态;

state扩展:启用连接追踪模板记录连接,并根据连接匹配连接状态的扩展;

启用连接追踪功能之前:简单包过滤防火墙;

启用连接追踪功能:带状态检测的包过滤防火墙;

专用选项:

--stateSTATE

调整连接追踪功能所能容纳的连接的最大数目:

/proc/sys/net/nf_conntrack_max

当前追踪的所有连接:

/proc/net/nf_conntrack

不同协议或连接类型追踪时的时长属性:

/proc/sys/net/netfilter/

如何放行被动模式下的ftp服务:

(1) 装载模块:

#modprobe nf_conntrack_ftp

(2) 放行请求报文

放行入站请求端口为21的请求报文;

放行所有状态为ESTABLISHED和RELATED状态的入站报文;

(3) 放行出站响应报文

放行所有状态为ESTABLISHED的出站报文;

如何保存及重载规则:

保存:

(1)service iptables save

/etc/sysconfig/iptables文件;

(2)iptables-save > /PATH/TO/SOMEFILE

重载:

(1)service iptables reload

(2)iptables-restore < /PATH/FROM/SOMEFILE

NAT:Network AddressTranslation

仅从请求报文判断,地址转换:

源地址转换:SNAT

目标地址转换:DNAT

端口转换:PNAT

NAT Server: 能根据需要实现所谓的SNAT、DNAT或PNAT;

并非是用户空间运行的进程完成转换功能,靠的是内核中地址转换规则;

SNAT:CIP --> SIP: CIP --> SNAT(PIP) --> SIP

CIP: 本地客户端地址

DNAT:RemoteIP--> PIP: RemoteIP --> DNAT(SIP) --> SIP

RemoteIP:远程客户端地址;

PNAT:端口转换

私有的客户端访问互联网的方法:

(1)SNAT

(2)Proxy

SNAT:主要用于实现让内网客户端访问外部主机时使用;

注意:要定义在POSTROUTING链;也可以在OUTPUT上使用;

定义方法:

iptables -t nat -A POSTROUTING -s 内网网络或主机地址 -j SNAT --to-source NAT服务器上的某外网地址

另一个TARGET:

MASQUERADE:地址伪装;

能自行判断该转为哪个源地址;

iptables -t nat -A POSTROUTING -s 内网网络或主机地址 -j MASQUERADE

DNAT:主要用于发布内部服务器,让内网中的服务器在外网中可以被访问到;

注意:要定义在PREROUTING链;

iptables -t nat -A PREROUTING -d NAT服务器的某外网地址 -p 某协议 --dport 某端口 -jDNAT --to-destination 内网某服务器地址[:PORT]

FULLNAT: 全地址转换

在请求报文到时:既修改源地址,又修改目标地址

回顾:

state扩展,nat

state扩展:

tcp finite state machine: 有限状态机

closed, listen, syn_sent, syn_rcvd,established, fin_wait_1, fin_wait_2, close_wait, last_ack, time_wait

state: 无论tcp,udp, icmp协议,都能够基于connection track template完成连接追踪;

NEW,ESTABLISHED, RELATED, INVALID

内核模块:nf_conntrack, nf_conntrack_ftp

专用选项:--state

nat: 网络地址转换;用到的表为nat;

SNAT:源地址转换;

DNAT:目标地址转换;

FULLNAT:源地址和目标都进行转换;

nat表相对应链:PREROUTING,OUTPUT, POSTROUTING

SNAT:OUTPUT,POSTROUTING

-jSNAT --to-source

-jMASQUERADE

DNAT:PREROUTING

PNAT:

-jDNAT --to-destination IP[:PORT]

iptables(4):

TARGET:

ACCEPT

DROP

REJECT

SNAT

DNAT

MASQUERADE

LOG:日志

REDIRECT:端口重定向;

RETURN: 返回至调用者;

MARK:防火墙标记

练习:INPUT和OUTPUT默认策略为DROP;

iptables -P INPUT DROP

iptables -P OUTPUT DROP

1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;

#iptables -A INPUT  -d 172.16.18.1 -p tcp --dport 80 -m time ! --weekdays Mon  limit --limit10/minute --limit-burst 5

! string --string "admin" --algo kmp -j ACCEPT

#iptables -AOUTPUT -s 172.16.18.1 -p tcp --dport 80 -m time ! --weekdays Mon   limit --limit 10/minute --limit-burst 5

! string --string "admin" --algo kmp -j ACCEPT

2、在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;

# iptables -A INPUT  -s 172.16.0.0/16 -d 172.16.18.1 -ptcp --dport 21 -m time--timestart 08:30 --timestop 18:30

--weekdays  Mon,Tue,Wed,Thu,Fri  connlimit--connlimit-above 5  -j REJECT

#iptables -A  OUTPUT  -s 172.16.18.1 -d 172.16.0.0/16 -p tcp --dport 21 -m time --timestart 08:30 --timestop18:30

--weekdays  Mon,Tue,Wed,Thu,Fri  connlimit--connlimit-above 5  -j REJECT

3、开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;

iptables -A INPUT -s 172.16.18.1-172.16.18.100  -m  connlimit --connlimit-above 5  -state RELATED -j REJECT

iptables -A OUTPUT -d 172.16.18.1-172.16.18.100  -m  connlimit --connlimit-above 5  -state RELATED -j REJECT

4、拒绝TCP标志位全部为1及全部为0的报文访问本机;

iptables -A INPUT -d172.16.18.1 -p tcp --tcp-flags  allnone  -j REJECT

5、允许本机ping别的主机;但不开放别的主机ping本机;

iptables -A INPUT -d 172.16.18.1 -p tcp --dport 22  -j REJECT

iptables -A OUTPUT -s 172.16.18.1 -p tcp --dport 22 -j ACCEPT

练习:判断下述规则的意义:

#iptables -N clean_in

#iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP

#iptables -A clean_in -d 172.16.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 172.16.100.7 -j RETURN

#iptables -A INPUT -d 172.16.100.7 -j clean_in

#iptables -A INPUT  -i lo -j ACCEPT

#iptables -A OUTPUT -o lo -j ACCEPT

运行从lo端口进入以及出去

#iptables -A INPUT  -i eth0 -m multiport-p tcp --dports 53,113,135,137,139,445 -j DROP

#iptables -A INPUT  -i eth0 -m multiport-p udp --dports 53,113,135,137,139,445 -j DROP

#iptables -A INPUT  -i eth0 -p udp --dport1026 -j DROP

#iptables -A INPUT  -i eth0 -m multiport-p tcp --dports 1433,4899 -j DROP

#iptables -A INPUT  -p icmp -m limit--limit 10/second -j ACCEPT

课外任务:研究recent扩展的用法

利用iptables的recent模块来抵御DOS攻击:

ssh: 远程连接,

iptables-I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP

iptables-I INPUT  -p tcp --dport 22 -m state--state NEW -m recent --set --name SSH

iptables-I INPUT  -p tcp --dport 22 -m state--state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j LOG--log-prefix "SSH Attack: "

iptables-I INPUT  -p tcp --dport 22 -m state--state NEW -m recent --update --seconds 300 --hitcount 3 --name SSH -j DROP

1.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;

2.利用recent和state模块限制单IP在300s内只能与本机建立2个新连接。被限制五分钟后即可恢复访问。

下面对最后两句做一个说明:

1.第二句是记录访问tcp 22端口的新连接,记录名称为SSH

--set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目

2.第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。

--update 是指每次建立连接都更新列表;

--seconds必须与--rcheck或者--update同时使用

--hitcount必须与--rcheck或者--update同时使用

3.iptables的记录:/proc/net/xt_recent/SSH

时间: 2024-08-10 23:14:29

防火墙及netfilter基础iptables基本用法的相关文章

netfilter基础及iptables基本应用

防火墙及netfilter基础 firewall 工作于主机或网络的边缘,对于进出的报文根据事先定义的规则作检查,对能够被规则匹配的报文作出相应处理的组件. 可分为主机防火墙和网络防火墙 可以是软件,也可以是硬件,专业的硬件防火墙:checkpoint, netscreen iptables:规则管理工具,是工作于用户空间的程序,可自动检查语法错误: netfilter: 网络过滤器, 是工作于内核空间TCP/IP网络协议栈上的框架: IDS:Intrusion Detecting System

针对Red Hat Enterprise Linux 6.5 的防火墙详细讲解,iptables(netfilter)规则的

防火墙基础 Linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或网络层防火墙).基于Linux内核编码实现,具有非常稳定的性能和高效率,因此获得广泛使用. 在Linux系统中,netfilter和iptables都用来指Linux防火墙. netfilter:指的是Linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"(Kernel Space,又称为内核空间)的防火墙功能体系. iptables:指的是

Linux 防火墙:Netfilter iptables

一.Netfilter 简介 (1) Netfilter 是 Linux 内置的一种防火墙机制,我们一般也称之为数据包过滤机制,而 iptables 只是操作 netfilter 的一个命令行工具(2) Netfilter 是 Linux CentOS 6 内置的防火墙机制,Firewall 是 Linux CentOS 7 内置的防火墙机制,如果想在 CentOS 7 中使用 netfilter 而不是 firewall,操作如下 [[email protected] ~]# systemct

实现vsftp虚拟用户和iptables基本用法

1.搭建vsftpd服务器 1.安装vsftpd服务 [root@centos7 ~]#yum install -y vsftpd 2.启动服务 [root@centos7 ~]#systemctl start vsftpd [root@centos7 ~]#ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:111 *:* LISTEN 0 5 192.168.122.1:53 *:*

Android网络安全:Netfilter与iptables

Android 4.4.4 1.Netfilter与iptables关系 Netfilter: http://www.netfilter.org/: Netfilter is a framework provided by the Linux kernel that allows various networking-related operations to be implemented in the form of customized handlers. Netfilter offers

EasyUI中Base(基础)的基本用法

EasyUI中Base(基础)的用法 一.Base(基础) 1.parser 解析器 2.easyloader 简单加载 3.draggable 拖动 4.droppable 放置 5.resizable 调整大小 6.pagination 分页 7.searchbox 搜索框 8.progressbar 进度条 9.tooltip 提示框 步骤: 1.导入支持easyUI所需的文件 使用easyUi里面的插件,先要引入easyUi.css.icon.css.jquery.easyui.min.

java基础之泛型用法

1.什么是泛型 泛型是java中保障类型安全的一种机制.它通过对变量类型的假设,实现变量类型的进行限制,从而在一定程度上保证程序编译时变量类型的安全.反之,如果没有泛型,这些假设则只存在于程序员的大脑中,这样会导致类型转换的异常在程序运行时才被发现. //不用泛型 List list1 = new ArrayList(); list1.add(1); Object o = list1.get(0); //返回Object类型对象 Integer i = (Integer) o; //需预先知道类

CentOS 7.0 关闭firewalld防火墙指令 及更换Iptables防火墙

CentOS 7.0 关闭firewalld防火墙指令 及更换Iptables防火墙 时间:2014-10-13 19:03:48  作者:哎丫丫  来源:哎丫丫数码网  查看:11761  评论:2 service firewalld stop 1. Disable Firewalld Service. [root@rhel-centos7-tejas-barot-linux ~]# systemctl mask firewalld 2. Stop Firewalld Service. [ro

java基础之synchronized用法

首先,参考文章:http://www.cnblogs.com/devinzhang/archive/2011/12/14/2287675.html PS:参考文章很长,但内容非常丰富,若是初学者,更要有耐心读完. 第二,个人小结: 关于synchronized关键字的作用: 1.在某个对象的所有synchronized方法中,在某一时刻,只能有一个唯一的一个线程去访问这些synchronized方法 2.如果一个方法是synchronized方法,那么该synchronized关键字表示给当前对