iptables

iptables: 包过滤型的防火墙



防火墙,字面理解做好一堵墙预防火灾。在计算机中什么代表火?  那就是危险以及任何和安全相关的不确定的因素。那在这里iptables就是那堵墙。那我们要提前建好一个墙,做好防患于未然,把危险过滤在墙外。

而且在传输协议中所有的传输都要把传输的内容封装为一个一个的包传送,iptables就是基于这种情况下做过滤,所以又称为包过滤型防火墙。

过滤方式(四表五链)


什么是四表五链?

简单来说就是实现iptables的管理,根据报文流入流出的原理而设置的一套详细的过滤配置,看下图每个表和链的对应关系;

四个表:

表优先级的对应关系:Raw——>mangle——>nat——>filter

filter   :(过滤规则表)过滤防火墙,该表根据管理员预定义的一组规则过滤符合条件的数据报。

nat     :(地址转换规则表)用于修改源IP或目标IP,也可以改端口;

mangle   :(修改数据标记位规则表)拆解报文,做出修改,并重新封装起来;

raw    :(跟踪数据表规则)关闭nat表上启用的连接追踪机制;

链处理规则位置:

每个表基于不同的规则对应处理不同链上的数据,每个链对应的添加规则的位置如下图;

五个链:

PREROUTING   :(目的地转换)负责把公网IP转换为内网IP,可以保护内网“主机|服务器”不被外网发现,增加“主机|服务器”的安全性。以及判断传输的数据是否需要转发还是本机需要的。

INPUT      :接收数据。

FORWARD      :访问目标不是本机,服务器使用路由功能实现转发。(当然也有专门的路由服务器)。

OUTPUT       :请求数据。

POSTROUTING   :(源地址转换)把内网IP转换为公网IP。同样起到了保护内网“主机|服务器”的安全的作用。

添加规则时的考量点:(规则添加之后是立即送往内核并且生效的)

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

(2) 报文流经的路径:判断添加到哪个链上;

 

链:链上的规则次序,即为检查的次序;因此,隐含一定的应用法则:

(1) 同类规则(访问同一应用),匹配范围小的放上面;

(2) 不同类的规则(访问不同应用),匹配到报文频率较大的放在上面;

(3) 将那些可由一条规则描述的多个规则合并起来;

(4) 设置默认策略;

 那该怎么处理规则呢?



防火墙服务:service iptables {start|stop|restart|status}   ##CentOS6及以下

      systemctl  {start|stop|restart|status}  firewalld.service  ##CentOS7

语法格式:iptables [-t table] COMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

举例: iptables -R INPUT 1 -d 172.16.251.124 -p tcp --dport 80 -m iprange --src-range 172.16.250.25-172.16.250.30 -m time ! --weekdays 7 -j REJECT(如果不指定表默认是filter)

配置filter表上的流入的第一条规则,(原本的第一条规则此时变成了第二条这里需要注意)目标主机是172.16.251.124 扩展模式指定目标地址范围172.16.250.25-172.16.250.30 指定时间 (!取反)不是周日的时候拒绝访问tcp协议的80端口。

-j   来指定对包的处理   ##选项有很多,这里只介绍常用的几个

   ACCEPT:接受

   DROP:丢弃

   REJECT:拒绝

   REDIRECT:端口重定向

    ? 加油加油! ?      看起来比较麻烦,但是把下面的几个基础选项掌握就so easy了。
ミ ミ ( ??? )ミ゛ミ
゛゛ \   /゛゛
    i⌒ヽ |
     (_) ノ
      ∪

匹配条件:

隐式扩展[-m]

基本匹配条件:无需加载任何模块,由iptables/netfilter自行提供; ##为取反

[!] -s:指定源IP

[!] -d:指定目标IP

[!]--sport port[:port]:匹配报文的源端口;可以是端口范围;

[!] --dport port[:port]:匹配报文的目标端口;可以是端口范围;

[!] --syn:用于匹配第一次握手,相当于”--tcp-flags SYN,ACK,FIN,RST SYN“的简写;

[!] --sport port[:port]:匹配报文的源端口;可以是端口范围;

[!] --dport port[:port]:匹配报文的目标端口;可以是端口范围;

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

echo-request:8

echo-reply:0

比如此时想要访问web网站,那针对这个怎么配置防火墙呢?

iptables -I INPUT 1 -s 192.168.186.126 -p tcp --sport 80 -j ACCEPT

iptables -I OUTPUT 1 -d 192.168.186.126 -p tcp --dport 80 -j ACCEPT

这里使用tcp协议如果不加-p默认所有协议 因为访问80端口需要发送数据,服务器也要给我们回发我们请求的数据,所以要配置INPUT和OUTPUT两个链。()

显式扩展:-m

显式扩展:必须显式地指明使用的扩展模块进行的扩展

  • 1、multiport扩展

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

[!] --sports port[,port|,port:port]...:指定多个源端口,##用逗号隔开;

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

[!] --ports port[,port|,port:port]...:指明多个端口;

   iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp -m multiport --dports 22,80 -j ACCEPT

  

  • 2、iprange扩展

指明连续的(但一般不是整个网络)ip地址范围;

[!] --src-range from[-to]:源IP地址;

[!] --dst-range from[-to]:目标IP地址;

  iptables -A INPUT -d 172.16.100.67 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP

  • 3、string扩展

对报文中的应用层数据做字符串模式匹配检测;##相当于字符串传输比对算法

--algo {bm|kmp}:使用的字符串匹配检测算法;

bm:Boyer-Moore

kmp:Knuth-Pratt-Morris

[!] --string pattern:要检测的字符串模式;

[!] --hex-string pattern:要检测的字符串模式,16进制格式编码后的字符串;

   iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp --sport 80 -m string --algo bm --string "gay" -j REJECT

  • 4、time扩展

根据将报文到达的时间与指定的时间范围进行匹配;

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

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

--timestart hh:mm[:ss]

--timestop hh:mm[:ss]

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

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

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

   iptables -R INPUT 1 -d 172.16.251.124 -p tcp --dport 80 -m iprange --src-range 172.16.250.25-172.16.250.30 -m time --timestart 10:00 --timestop 17:00 -j REJECT

   iptables -R OUTPUT 1 -s 172. 16.251.124 -p tcp --sport 80 -m iprange --dst-range 172.16.250.25-172.16.250.30 -m time --timestart 10:00 --timestop 17:00 -j REJECT

      172.16.251.124是虚拟机IP 172.16.250.28是PC的IP

  

  5、connlimit扩展

根据每客户端IP做并发连接数数量匹配;

--connlimit-upto n:连接的数量小于等于n时匹配;

--connlimit-above n:连接的数量大于n时匹配;

   iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m connlimit --connlimit-above 2 -j REJECT

  

  6、limit扩展

基于收发报文的速率做匹配;

令牌桶过滤器;

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

--limit-burst number

   iptables -I INPUT -d 172.16.100.67 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT

   iptables -I INPUT 2 -p icmp -j REJECT

  7、state扩展

根据”连接追踪机制“去检查连接的状态;

conntrack机制:追踪本机上的请求和响应之间的关系;状态有如下几种:

NEW:新发出请求;连接追踪模板中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求;

ESTABLISHED:NEW状态之后,连接追踪模板中为其建立的条目失效之前期间内所进行的通信状态;

RELATED:相关联的连接;如ftp协议中的数据连接与命令连接之间的关系;

INVALID:无效的连接;

UNTRACKED:未进行追踪的连接;

[!] --state state

   iptables -A INPUT -d 172.16.100.67 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT

   iptables -A OUTPUT -s 172.16.100.67 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

Nat表介绍



nat :(地址转换规则表)用于修改源IP或目标IP,也可以改端口,看下图;

这里介绍介绍nat是因为比较有代表性,重复一下对应的链规则有;

  • prerouting
  • output
  • postrouting

nat表主要用来隐藏局域网内主机或者服务器,主机访问外网,路由负责把局域网内主机IP转换成为自己的,目标地址不变,把访问记录记录在一个表,服务器响应的时候会把数据丢给路由,路由接受到数据会检查自己的表是否是自己局域网内的主机请求的,如果不是会把数据丢弃,如果有记录会把目标地址改为局域网内的主机源地址不变(此时因为是响应报文所以源地址是web服务器)。

原理相同,同样可以把服务器隐藏起来,事实上现在的服务器都已经被隐藏,没有哪个公司的服务器暴露在公网之下,这样风险太大。

并且因为IPV4地址比较稀缺,并不能做到每个主机一个IP,也算是无心插柳节约了一部分地址,而且每个主机配一个IP也算一笔不菲的费用。

nat表的target:

SNAT   改写封包来源 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围;

  --to-source [ipaddr[-ipaddr]][:port[-port]]

  --random

DNAT    改写封包目的地 IP 为某特定 IP 或 IP 范围,可以指定 port 对应的范围;

  --to-destination [ipaddr[-ipaddr]][:port[-port]]

iptables -t nat -A POSTROUTING -s 192.168.217.0/24 -j SNAT --to-source 172.16.0.6(网卡的另外一个地址图上没有画出来)

因为局域网内所有的主机访问的资源各不相同,协议也不一样所以这里省略指定,默认为所有端口所有协议,这样就配置好了。有没有感觉很简单?

总结:只要知道语法配置起来事半功倍。只是改个选项而已命令都差不多,iptables也很简单。

时间: 2024-10-06 01:20:39

iptables的相关文章

CentOS7安装iptables防火墙

CentOS7默认的防火墙不是iptables,而是firewalle. 安装iptable iptable-service #先检查是否安装了iptables service iptables status #安装iptables yum install -y iptables #升级iptables yum update iptables #安装iptables-services yum install iptables-services 禁用/停止自带的firewalld服务 #停止fir

iptables端口转发

1. 确定forward开启 # cat /proc/sys/net/ipv4/ip_forward1 2. 转发进来的包 iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp -m tcp --dport 16922 -j DNAT --to-destination 192.168.0.169:22 这表示将目的地为111.111.111.111:16922的包发往 192.168.0.169:22 3. 设置回路 iptables -

Iptables防火墙(一)

一.Linux防火墙基础 Linux防火墙主要工作在网络层,属于典型的包过滤防火墙. netfilter和iptables都用来指Linux防火墙,主要区别是: netfilter:指的是linux内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于"内核态"的防火墙功能体系. iptables:指的是用来管理linux防火墙的命令程序,通常位于/sbin/iptables目录下,属于"用户态"的防火墙管理体系. 1.iptables的表.链结构 Ipt

防火墙iptables

防火墙 主配置文件:vim /etc/sysconfig/iptables 想要自定义防火墙,需要把这里的规则清空并且权限设置成DROP 防火墙名字:netfilter,工具:iptables 防火墙有三个表filter,nat,mangle 每个表下面还有链: filter表主要用于过滤包,系统预设的表.内建三个链INPUT.OUTPUT.FORWARD,INPUT作用于进入本机的包,OUTPUT作用于本机送出的包,FORWARD作用于跟本机无关的包. nat表主要用处是网络地址转换,PRER

【整理笔记-防火墙】实现iptables防火墙搭建

搭建防火墙,配置防火墙. - - 系统centos7 . centos7自带firewalld,由于看firewalld命令行没有接触过,所以安装iptables防火墙. 1:禁用firewalld firewall-cmd --state 查看系统自带防火墙状态. 用systemctl stop firewalld.service   禁止立即生效, systemctl disable firewalld.service  永久关闭firewalld.执行完再看一下防火墙状态, 显示为not

iptables man中文手册

名称        iptables - IP包过滤器管理 总览        iptables -ADC  指定链的规则  [-A  添加 -D 删除 -C 修改]        iptables - RI        iptables -D chain rule num[选项]        iptables -LFZ 链名 [选项]        iptables -[NX] 指定链        iptables -P chain target[选项集]        iptables

service iptables start 无反应的解决方法

[[email protected] ~]# service iptables start[[email protected] ~]# service iptables status防火墙已停解决方法:一.初始化iptables.iptables -Fservice iptables saveservice iptables restartvi /etc/sysconfig/iptables 二.把预置的iptables规则添加进去就可以了:# Firewall configuration wr

关闭系统不必要的服务;关闭selinux,关闭iptables

关闭系统不必要的服务:关闭selinux,关闭iptables:关闭ctrl+alt+del重启:设置ssh端口,关闭DNS解析:设置系统最大文件描述符:设置系统关键文件权限:配置安装ntp:安装vim:配置安装阿里云yum源和epel源: #!/bin/bash #written by [email protected] #system optimization script #The fllow apply to CentOS 6.x . /etc/init.d/functions func

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

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

linux防火墙--iptables(二)

五.filter过滤和转发 a.打开内核的IP转发 # sysctl -w net.ipv4.ip_forward=1 或 # echo 1 > /proc/sys/net/ipv4/ip_forward b.基本匹配条件 ·通用匹配 → 可直接使用,不依赖于其他条件或扩展 → 包括网络协议.IP地址.网络接口等条件 ·隐含匹配 → 要求以特定的协议匹配作为前提 → 包括端口.TCP标记.ICMP类型等条件 类别 选项 用法 通用匹配 协议匹配 -p 协议名 地址匹配 -s 源地址