详解Linux操作系统的iptables原理及配置

linux网络防火墙

  netfilter :内核中的框架,过滤框架,网络过滤器!

  iptables  :实现数据过滤、netmangle规则生成的工具

防火墙:硬件、软件、规则(匹配规则、处理办法)

 

/proc/sys/net/ipv4/ip_forward :转发数据报文

 

根据目标ip完成路由决策

 

hook :钩子函数(四表五链)

 PREROUTING  :在路由决策之前

      INPUT  :进入本机

     OUTPUT  :本机出去

    FORWARD  :本机转发

 POSTROUTING  :在决策之后,就要离开本机

 

规则链:一个钩子上放着多条规则

 

filter(过滤):表

    INPUT

   OUTPUT

  FORWARD

nat(地址转换):表

    PREROUTING

    OUTPUT

    POSTROUTING

mangle (把报文拆开做了修改,再缝上):表

     PREROUTING

     INPUT

     OUTPUT

     POSTROUTING

     FORWARD

raw(原始转状态):表

     OUTPUT

     PREROUTING

 

 

可以使用自定义链,它只能在被调用时才能发挥作用,而且如果没有自定义链中的任何匹配规则,还应该有返回机制。

用户可以删除自定义的空链,默认链无法删除。

 

 

每个规则都有两个内置的计数器

    被匹配的报文个数

    被匹配的报文大小之和

 

规则:匹配标准、处理动作

格式iptables   -t 指定表名  子命令   操作链  [第几条规则]   匹配标准  -j  处理办法   

匹配标准

    通用匹配 :自身能够完成检查

              -s :    指定源地址

              -d :   制定目标地址

              -p  [tcp|udp|icmp]  :指定协议  

              -i  网络接口   :指定数据报文流入的接口

                   可用于定义标准的链:PEREOUTING          INPUT   FORWARD

              -o  网络接口   :指定数据报文流出的接口

                    可用以定义标准的链:OUTPUT   POSTROUTING    FORWARD

 

    扩展匹配:依赖于模块才能完成的检查

         隐含扩展 :不用特别指明由那个模块进行的扩展,因为此时使用-P{tcp|udp|icmp}。

             -p  tcp

                   --sport  端口  :源端口

                   --dport  端口  :目标端口

            -p  icmp

                   --icmp-type 

            -u   udp

                 --sport

                 --dport

         显式扩展 :必须指明由那个模块进行的扩展,在iptable中使用-m选项可完成此功能。

                     使用额外的匹配之际

                    -m :指定扩展名称,

                         --选项 :指定这个扩展独有的选项

                state:状态扩展

                     结合nf_conntrack追踪会话的状态,nf_conntrack跟踪连接状态,在服务量比较大的服务器中不建议开启

                      NEW :新发起的请求

                      ESTABLISHED:已建立的链接,响应报文

                      INVALID:非法请求

                      RELATED:相关联的

         multiport:实现离散的多端口匹配扩展

               --source-port s :匹配源端口

               --destion-ports :匹配目标端口

               --ports :即匹配源端口,又匹配目标端口

           格式:-m  multiport  --source-ports  20,21,22,80  -j ACCETP

 

iptables  -A  INPUT  -d 192.168.2.128  -p tcp  --dport 22 -m state --state NEW,ESTABLISHED  -j ACCEPT

设置防护墙入站规则只允许目标地址是192.168.2.128的tcp链接,而且连接的是22端口,状态是请求报文或者是响应报文

iptables -A OUTPUT  -s 192.168.2.128  -p tcp --sport 22 -m state --state  ESTABLISHED  -j ACCEPT

设置防护墙出站规则只允许源地址是192.168.2.128的tcp链接,而且连接的是22端口,状态是响应报文

 

查看防火墙连接状态:ipstate

iptstate需要两个东西的支持,一个是ncurses库,一个是libnetfilter_conntrack 的支持,如果没有这两个东西,是运行不了的。

          格式:  ..... -m state   --state  状态类型,状态类型   -j 处理办法

 处理办法

     -j  :跳转

          ACCEPT    允许

          DROP     直接丢弃数据包,不作任何回应信息

          REJECT    拒绝数据包通过,必要时会给数据发送端回一个响应信息

          LOG      记录日志

语法格式: iptables  -t  表名   command   CHAIN  [那条规则匹配标准  -j  处理办法

 

命令

 管理规则

   -A :附加一条规则,添加在链的尾部

   -I  CHAIN  [数字:插入一条规则,插入在对应的CHAIN上的第几条

   -D  CHAIN  [数字:删除指定链中第几条规则

   -R  CHAIN  [数字:替换指定的规则

 管理链

   -F [CHAIN] :用于清空指定规则链,若省略CHAIN则实现删除对应表中的所有链

   -P  CHAIN :设定指定链的默认策略

   -N :自定义一个新的空链

   -X :删除一个自定义的空链

   -Z :置零指定链中所有规则的计数器

   -E :重命名自定义的链

查看类的命令

   -L :显示指定表中的规定

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

      -v :显示链及规则详细信息

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

       --line-numbers :显示规则号码

处理动作类的命令(target)

          ACCEPT    允许

          DROP     丢弃

          REJECT    拒绝

          DNET     目标地址转换

          SNET     源地址转换

          REDIREC  端口重定向

          MASQUERADE  地址伪装,实现原地址转换

          LOG      记录日志

          MARK     给报文打一个标记

         

 iptables 不是服务,但有服务脚本,服务脚本的主要作用在于管理保存的规则。

 

lsmod  :查看内核模块

lsmod| grep ip :查看iptables有关的的模块

 

 

 

ping类型:

0  回显应答,ping应答,响应报文

8  回显请求,ping请求,请求报文

 

 

保存规则

当防火墙重启的时候,他会清空每个表中的链,重启完之后不会有任何的规则,

想要配置永久生效的防火墙规则,建立完一条规则,必须用一条命service  iptables  save 进行保存,保存到/etc/sysconfig/iptables

iptables-save   >  /etc/sysconfig/iptables.112  把防火墙的规则保存在。。。

iptables -restore  < /etc/sysconfig/iptables.112  重启防火墙时选择读取那个防火墙规则

 

 

 

常用扩展模块:

-m  iprange  :指定ip范围

       --src-range  ip-ip :匹配源的

       --dst-range  ip-ip :匹配目标的

  加!可以取反,除他之外的范围,不加叹号为这个范围内的

-m  limit  :连接数限定,

 

-j  LOG  处理动作记录日志

     

iptables  -N 链名  :创建一条空链

iptables  -I 主链名  -j  自定义链名   :把规则引用到主链上

 

 

NAT及其过滤功能:

DNAT:目标地址转换

SNAT:源地址转换(一定要在NAT表postrouting中做)

 

-j  SNAT    地址转换

      --to-source   IP地址 :转换为那一个地址作为源地址,也可以指定范围(IP地址-IP地址)

-j  DNAT

iptables  -t  nat  -A  PREROUTING  -i 接口  -d 公网接口  -p tcp  --dport 端口  -j DNAT  --to-destination  私有地址

 

DNAT :目标地址转换

SNAT : 源地址转换

让linux服务器带有路由功能,需要一个模块ip_forward,/proc/sys/net/ipv4/ip_forward位置,设值为1。

编辑  /etc/sysctl.conf    改forward =1 然后保存,sysctl  -p 使其生效!

 

使用rpm包安装tcpdump抓包

使用格式:tcpdump   -i 接口   -nn  -X 协议

posted @ 2019-08-02 16:34  え稚始گ  阅读(327)  评论(0编辑  收藏  举报