route,iptables及一些相关知识(整理),iptables命令解释

从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。

主机防火墙:针对于单个主机进行防护。

网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。

网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。

 

从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。

硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。

软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。

路由表
存储了设备的网络路径信息,决定了数据包的流向
典型应用:网吧双线路、公司内网环境
Linux route 命令
用于修改 Linux 内核中存储的路由表
Linux iptables 命令
用来增删改经过 Linux 系统的数据包( SNAT DNAT
用来进行QoS(Quality of Service)
简单的基于规则的防火墙
route iptables 这两条命令及其使用的 Linux 内核模块为 Linux 提供了强大的网络配置能力
 
•SNAT
SNAT Source Network Address Translation ,源地址转换),其作用是将 IP 数据包的源地址转换成另外一个地址,是路由器的工作原理

         DNAT: Destination Network Address Translation,是修改网络包目的ip地址的。

 

修改源ip地址的目的一般都是为了让这个包能再回到自己这里,所以在iptables中,SNAT是在出口,也即POSTROUTING链发挥作用。

修改目的ip地址的原因一般就是为了改变包发送的目的地,让包走出去,而不是留下来,所以在iptables中,DNAT是在入口,也即PREROUTING链中发挥作用,以便让包进入FORWARD表。

 

iptables其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter

netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。

iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

netfilter/iptables(下文中简称为iptables)组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换(NAT)等功能

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

网络地址转换(Network Address Translate)、数据包内容修改、数据包过滤的防火墙功能

所以说,虽然我们使用service iptables start启动iptables"服务",但是其实准确的来说,iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。

我们知道iptables是按照规则来办事的,我们就来说说规则(rules),规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。

route,iptables及一些相关知识(整理),iptables命令解释_第1张图片

 更详细的:

 route,iptables及一些相关知识(整理),iptables命令解释_第2张图片

到本机某进程的报文:PREROUTING --> INPUT

由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING

由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING

PREROUTING      的规则可以存在于:raw表,mangle表,nat表。

INPUT          的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。

FORWARD         的规则可以存在于:mangle表,filter表。

OUTPUT         的规则可以存在于:raw表mangle表,nat表,filter表。

POSTROUTING      的规则可以存在于:mangle表,nat表。

raw     表中的规则可以被哪些链使用:PREROUTING,OUTPUT

mangle  表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING

nat     表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)

filter  表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT

route,iptables及一些相关知识(整理),iptables命令解释_第3张图片

ACCEPT:允许数据包通过。

DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。

REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。

SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题。

MASQUERADE:是SNAT的一种特殊形式,适用于动态的、临时会变的ip上。

DNAT:目标地址转换。

REDIRECT:在本机做端口映射。

LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配。

iptables命令的语法规则

iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION

  -t table,是指操作的表,filter、nat、mangle或raw, 默认使用filter

  COMMAND,子命令,定义对规则的管理

  chain, 指明链路

  CRETIRIA, 匹配的条件或标准

  ACTION,操作动作,见上边的代码段中的内容

  例如,不允许10.8.0.0/16网络对80/tcp端口进行访问,

iptables -A INPUT -s 10.8.0.0/16 -d 172.16.55.7 -p tcp --dport 80 -j DROP

  查看iptables列表

iptables -nL

 

链管理

  -N, --new-chain chain:新建一个自定义的规则链;

  -X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;

  -F, --flush [chain]:清空指定的规则链上的规则;

  -E, --rename-chain old-chain new-chain:重命名链;

  -Z, --zero [chain [rulenum]]:置零计数器;  

  -P, --policy chain target, 设置链路的默认策略

 

规则管理

  -A, --append chain rule-specification:追加新规则于指定链的尾部;

  -I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;

  -R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;

  -D, --delete chain rulenum:根据规则编号删除规则;

 

查看规则 

  -L, --list [chain]:列出规则;

  -v, --verbose:详细信息;

    -vv, -vvv  更加详细的信息

  -n, --numeric:数字格式显示主机地址和端口号;

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

  --line-numbers:列出规则时,显示其在链上的相应的编号;

  -S, --list-rules [chain]:显示指定链的所有规则;

  查看规则的一般内容:

  route,iptables及一些相关知识(整理),iptables命令解释_第4张图片

匹配条件

匹配条件包括通用匹配条件和扩展匹配条件。

通用匹配条件是指针对源地址、目标地址的匹配,包括单一源IP、单一源端口、单一目标IP、单一目标端口、数据包流经的网卡以及协议。

扩展匹配条件指通用匹配之外的匹配条件。

通用匹配条件

[!] -s, --source address[/mask][,...]:检查报文的源IP地址是否符合此处指定的范围,或是否等于此处给定的地址;

[!] -d, --destination address[/mask][,...]:检查报文的目标IP地址是否符合此处指定的范围,或是否等于此处给定的地址;

[!] -p, --protocol protocol:匹配报文中的协议,可用值tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh 或者 "all", 亦可以数字格式指明协议;
[!] -i, --in-interface name:限定报文仅能够从指定的接口流入;only for packets entering the INPUT, FORWARD and PREROUTING chains.

[!] -o, --out-interface name:限定报文仅能够从指定的接口流出;for packets entering the FORWARD, OUTPUT and POSTROUTING chains.

 

扩展匹配条件

  • 隐含扩展匹配条件

-p tcp:可直接使用tcp扩展模块的专用选项;
  [!] --source-port,--sport port[:port] 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 ;

  [!] --destination-port,--dport port[:port] 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围 ;

  [!] --tcp-flags mask comp 匹配报文中的tcp协议的标志位;Flags are: SYN ACK FIN RST URG PSH ALL NONE;
    mask:要检查的FLAGS list,以逗号分隔;
    comp:在mask给定的诸多的FLAGS中,其值必须为1的FLAGS列表,余下的其值必须为0;

  [!] --syn: --tcp-flags SYN,ACK,FIN,RST SYN

-p udp:可直接使用udp协议扩展模块的专用选项:

  [!] --source-port,--sport port[:port]

  [!] --destination-port,--dport port[:port]

-p icmp
  [!] --icmp-type {type[/code]|typename}

    0/0:echo reply

    8/0:echo request

  • 显式扩展匹配条件

  必须用-m option选项指定扩展匹配的类型,常见的有以下几种,

multiport

以离散或连续的 方式定义多端口匹配条件,最多15个;

  [!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口;

  [!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口;
 

iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT

 



iprange

以连续地址块的方式来指明多IP地址匹配条件;

  [!] --src-range from[-to]

  [!] --dst-range from[-to]
 

# iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT

 



time

匹配数据包到达的时间

  --timestart hh:mm[:ss]

  --timestop hh:mm[:ss]

  [!] --weekdays day[,day...]

  [!] --monthdays day[,day...]

  --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

  --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

  --kerneltz:使用内核配置的时区而非默认的UTC;

string
匹配数据包中的字符

  --algo {bm|kmp}

  [!] --string pattern

  [!] --hex-string pattern

  --from offset

  --to offset
 

~]# iptables -I OUTPUT -m string --algo bm --string "gay" -j REJECT


connlimit
用于限制同一IP可建立的连接数目

  --connlimit-upto n

  --connlimit-above n
 

~]# iptables -I INPUT -d 172.16.0.7 -p tcp --syn --dport 22 -m connlimit --connlimit-above 2 -j REJECT


limit
限制收发数据包的速率

  --limit rate[/second|/minute|/hour|/day]

  --limit-burst number
 

~]# iptables -I OUTPUT -s 172.16.0.7 -p icmp --icmp-type 0 -j ACCEPT


state
限制收发包的状态

  [!] --state state

  INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.

  NEW: 新连接请求;

  ESTABLISHED:已建立的连接;

  INVALID:无法识别的连接;

  RELATED:相关联的连接,当前连接是一个新请求,但附属于某个已存在的连接;

  UNTRACKED:未追踪的连接;

state扩展:

内核模块装载:
  nf_conntrack
  nf_conntrack_ipv4

手动装载:
  nf_conntrack_ftp

追踪到的连接:
  /proc/net/nf_conntrack

调整可记录的连接数量最大值:
  /proc/sys/net/nf_conntrack_max

超时时长:
  /proc/sys/net/netfilter/*timeout*

参考链接 : SNAT和DNAT的区别   

iptables详解(1):iptables概念

iptables命令使用详解

你可能感兴趣的:(环境配置与搭建)