网络安全之iptables防火墙

1》各种传输方式到最后都会转化为能够通过网络发送的数据格式:
  1>文本格式;
  2>二进制格式;
2》TCP三次握手连接,四次断开,连接时客户端是主动打开,服务器是被动 打开,处于监听状态;

TCP有限状态机:

3》防火墙:可能是硬件,也可能是软件;
  规则:匹配标准和处理方法(除了制定的规则,还应有一种默认规则,默认规则一般处于关闭状态);
  匹配标准: IP:SIP,DIP
        UDP:SPORT,DPORT
           ICMP:icmp-type        =SYN=1,ACK=0,FIN=0,RST=0 第一次连接
         TCP:SPROT,DPORT======  =SYN=1,ACK=1,FIN=0,RST=0 第二次连接
                       = SYN=0,ACK=1,RST=0,FIN=0 第三次连接
  防火墙用于数据报文过滤,Linux中的防火墙处于内核之中的TCP/IP模块中;
4》文件/proc/sys/net/ipv4/ip_forward 中可以开启本机转发功能;
  钩子函数(hook function):TCP/IP协议栈上的一个补充;
  1>prerouting 路由决策之前====》用于目标IP地址转换
  2>input 进入本机
  3>output 从本机出来
  4>forward 转发
  5>postrouting 路由决策之后====》用于源IP地址转换

四表五链:
    filter表(过滤):
    input
    output
    forward
    nat表(地址转换):
    prerouting
    postrouting
    output

    mangle表(拆开,修改,封装):
    prerouting
    input
    forward
    output
    postrouting
    raw表(不作修改,原始格式):
    prerouting
    output

************1>可以使用自定义链,但只有在被调用的时候才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制,用户可以删除自定义的空链,                       默认链无法删除;
      2>每个规则都有两个内置的计数器,一个用来记录被匹配的报文的个数,一个记录被匹配的报文的大小之和;

5》规则:匹配标准和处理方法;===========》用rpm ql iptables 命令可以查看是否按照了iptables模块
  语法:
    iptables [-t table] command chain [num] 匹配标准 -j 处理方法
  通用匹配:
    -s; --src 指定原地址
    -d; --dst 指定目标地址
    -p {tcp,udp,icmp} 指定协议
    -i , interface 指定数据报文流入的网卡
    -o , interface 指定数据报文流出的网卡

  ****-i一般用于PREROUTING,INPUT,RORWARD这三条链;
       -o一般用于POSTROUTING,OUTPUT,FORWARD这三条链;
     -j: TARGET(动作)
       ACCEPT 接受通过
    DROP 丢弃
         REJECT 拒绝

  eg: iptables -t filter -A INPUT -s 172.16.0.0/16 -j DROP
i    ptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -j DROP

  匹配标准:
    通用匹配:自身能够完成的检查;
    扩展匹配:依赖于扩展模块才能完成的检查;
   扩展匹配:
      隐含扩展:不用特别指明由哪个模块来进行的扩展,因为此时使用了-p {tcp,udp,icmp};
      显示扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项来完成此项功能;
  ******/lib/iptables文件下有许多扩展匹配所依赖的扩展模块;

5》相关命令:
  1>管理规则的命令:
    -A:附加一条规则,添加在链的尾部;
    -I CHAIN [num] :插入一条规则,插入为对应链上的第num条,不加num则默认为第一条;
    -D CHAIN [num] : 删除指定链中的第num条规则;
    -R CHAIN [num] : 替换指定链上的规则

  2>管理链的命令:
    -F [CHAIN]: 清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链;
    -P CHAIN : 设定 指定链的默认策略;
    -N :自定义一个新的空链;
    -X:删除一个自定义的空链;
    -Z:置零指定链中所有规则的计数器;
    -E:重命名自定义的链;

  3>查看类的命令:
    -L : 显示指定表中的规则;
    -n : 以数字格式显示主机地址和端口号;
    -x: 显示精确值,不进行估算;
    -v:显示详细信息;
    --line-numbers: 显示规则号码;
  4>动作(target)参数:
    ACCPT: 接受通过
    DROP: 丢弃
    REJECT: 拒绝
    DNAT: 目标地址转换
    SNAT: 源地址转换
    REDIRECT: 重定向/端口重定向
    MASQUERADE: 地址伪装(源地址转换)
    LOG: 日志
    MARK: 打上标志
  5>扩展匹配:
    隐含扩展:
      -p tcp
        --sport port /port-port 源端口,也可以使用连续的端口号
        --dport 目的端口
        --tcp-flags 标志位
        --tcp-flags mak comp
        --tcp-flags SYN,FIN,ACK,RST SYN TCP的第一次连接握手
      ****mask:只检查此列表中指定的标志位,是逗号分隔的标志位列表;
         comp:此列表中出现的标志位必须为1,此列表中没出现,mask中出现的必须为0;
      -p icmp
        --icmp-type
          0 回送应答
          8 回送请求
      -p udp
        --sport
        --dsport

  eg: 自己可以ping 别人规则:
    iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 8 -j ACCEPT
    iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT
  eg: 本机IP为172.16.100.7,开放本机的sshd服务; 22/tcp
    iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p tcp --dport 22 -j ACCEPT
    iptables -t fileter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT

6》iptables不是服务,但有服务脚本,服务脚本的主要作用在于管理保存的规则;
    lsmod |grep iptables 命令可以查看相关的iptables的模块
    iptables的相关模块可以装载及移除:
      iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_conntrack
  指定默认规则,除了上述的sshd服务外其他的都不允许访问:
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    iptables -P FORWARD DROP

  将WEB服务可以访问的规则放在第一条示例:
    iptables -I INPUT -d 172.16.100.7 -p tcp --dport 80 -j ACCEPT
    iptables -I OUTPUT -s 172.16.100.7 -p tcp --sport 80 -j ACCEPT

  允许自己能够ping通自己的规则定义示例:
    iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT
    iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

7》ip_conntrack: 连接追踪模块:
    /proc/net/ip_conntrack 这个内核文件保存着当前系统上其他主机与当前主机建立的连接关系,也可以用iptstate命令来查看这些连接关系;
      iptstate -t 可以显示当前连接的每种连接的个数;
    service iptables stop可以移除iptables加载的所有相关内核模块,移除之后,/proc/net/ip_conntrack文件就不存在了;
    modprobe ip_conntrack 可以手动装载ip_conntrack模块,装载之后那个文件就有了;
    cat /proc/sys/net/ipv4/ip_conntrack_max 文件来定义/proc/net/ip_conntrack 文件最大可以保存多少个连接记录;

    modprobe -r nfnetlink 移除模块nfnetlink;    

8》显式扩展:
    -m EXTESTINN --spe-opt
      state:状态扩展,结合ip_conntrack追踪会话的状态;
    NEW: 新连接的请求
    ESTABLISHED: 已建立的连接
    INVALID: 非法连接
    RELATED: 相关联的
    -m state --state NEW,EXTABLISHED, - j ACCEPT

    ****定义好规则之后可以用命令service iptables save 来保存在/etc/sysconfig/iptables 中,这样重启后规则也不会失效;iptables

      - save  >/etc/sysconfig/iptables.2017.2 可以将文件保存在特定的文件中;iptables -restore </etc/sysconfig/iptables.2017.2可以使这些规则生效;

  示例:
    server: 172.16.100.7 开放sshd,httpd服务,设置好追踪连接;

    iptables -A INPUT -d 192.168.1.106 -p tcp --dport 22 -m state --state NEW,ESTABLISHED, -j  ACCETP
    iptables -A OUTPUT -s 192.168.1.106 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP
    WEB服务也一样,只需改端口就好;
  iptstate 命令可以查看连接状态;
    sysctl -w net.ipv4.ip_conntrack_max=65536 命令修改保存连接记录的最大值,但只能临时有效;
    cat /proc/sys/net/ipv4/ip_conntrack_max 命令来查看连接记录的最大值;
    在文件/etc/sysctl.conf 文件中修改相关值可以永久有效;
    在目录/proc/sys/net/ipv4/netfilter 下有很多关于各种连接的超时设置的文件;

  示例:放行别人ping自己
    iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -jACCEPT
    iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

    iptables -L -n --line-numbers 可以显示规则的行号

    *********高效规则制定:可以将相关规则合为一条,任意协议任意IP保持连接的都可以出去;
    iptables -I OUTPUT -s 172.16.100.6 -m state --state ESTABLISHED -j ACCEPT

    FTP服务:基于本机的MYSQL认证登录;
      iptables -A INPUT -d 172.16.100.6 -p tcp --dport 21 -m state --state RELATED,ESTABLISHED -j ACCEPT
      iptables -A INPUT -i lo -j ACCEPT
      iptables -A OUTPUT -o lo -j ACCEPT
      iptables -A INTPUT -d 172.16.100.7 -p tcp -m state --state RELATED -j ACCEPT

    修改OUTPUT链的第一条规则:
      iptables -R OUTPUT 1 -s 172.16.100.7 -m state --state ESTABLISHED,RELATED -j ACCEPT
      *****在制定关于ftp规则之前首先要装载ip_conntrack_ftp 和ip_nat_ftp模块;
      在文件/etc/sysconfig/iptables-config 中编辑IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"

===================最终高效规则:

9》multiport :离散的多端口匹配扩展
    --source-ports
    --destination-ports
    --ports
  -m multiport --destination-port 21,22,80 -j ACCEPT
  iptables -I INPUT 2 -d 172.16.100.7 -p tcp -m multination --destination-ports 21,22,80 -m state --state NEW -j ACCEPT

  在所有的规则中可以使用英文字符!来表示条件取反:
    -s ! 172.16.100.7

  -m iprange : 指定范围内的IP地址;
    --src-range
    --dst-range
  iptables -A INPUT -p tcp -m iprange --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT

  *****也可以加!取反,取这个范围之外的IP地址;

  -m connlimit:连接数限制
  ! --connlimit-above n 连接数上限 n (允许<n人访问)
  每个用户允许连接数为两个以内:
    iptables -A INPUT -d 172.16.100.7 -p tcp --dprot 80 -m connlimit ! --connlimit-above 2 -j ACCEPT

  -m limit : 流量控制
    --limit RATE (速率) 每个时间段允许连接多少个
    --limit-burst number 允许一下子涌来多少个

  eg: 对ping进行设置:
    iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m limit --limit 5/minute --limit-burst 6 -j ACCEPT
    iptables -A OUTPUT -s 172.16.100.7 -p icmp --icmp-type 0 -m state --state RELATED,ESTABLISHED -j ACCEPT

    -m string 对一些特定的字符串进行限制(网页中的内容)
      --algo {bm|kmp}
      --string “STRING”
    iptables -I OUTPUT -s 172.16.100.7 -m string --alge kmp --string “h7ng” -j REJECT                                          

10》-j LOG 记录日志,如果链中有ACCEPT,DROP,REJECT等动作,要将LOG放在第一条;

    --log-prefix 存放日志前缀
   iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -j LOG --log-prefix “firewall log foricmp--”
    用命令tail /var/log/messages 来查看相关日志
11》自定义规则链:
  iptables -N 链名
  iptables -N clean_in
  在自定义规则链下添加规则:
  iptables -I INPUT -j clean_in 刚进来就调用自定义的链
  iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
  iptables -A clean_in -d 172.16.100.7 -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-lags ALL NONE -j DROP
  iptables -A clean_in -d 172.16.100.7 -j RETURN 返回主链          

12》利用iptables的recent模块来抵御DOS攻击:
    SSH:远程连接
      iptables -I INPUT 2 -d 172.16.100.7 -p tcp --dport 22 -m connlimit --connlimit-above 3 -j DROP
      iptables -I INPUT 3 -d 172.16.100.7 -p tcp --dport 22 -m state --state NEW -m recent --set --name SSH
      iptables -I INPUT 4 -d 172.16.100.7 -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个新连接,被限制五分钟后即可恢复访问;
    第二句是记录访问tcp 22号端口的新连接,记录名称为SSH,--set 记录数据包的来源IP,如果IP 已经存 在将更新已经存在的条目;
    第三句是指SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接;
    --updat 是指每次建立连接都更新列表
    --seconds 必须与--rcheck 或者--update 同时使用
    --hitcount 必须与--rcheck 或者 --upddate 同时使用
  3>iptables的记录:/proc/net/ipt_recent/SSH,也可以使用下面的命令来记录日志;
    iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --name SSH --seconds 300 --hitcount 3 -j LOG --log-prefix “SSH Attack”

13》NAT: 网络地址转换
    DNAT: 目标地址转换
    SNAT: 源地址转换 (POSTROUTING,OUTPUT)
  ****在文件/proc/sys/net/ipv4/ip_forward:1中开启路由转发功能,这种方式暂时有效;
  在文件/etc/sysctl.conf中修改net.ipv4.ip_forward=1永久有效;
  -j SNAT
    --to-source IP
    --to-source IP-IP 可以指向多个IP,动态IP地址池
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.7
  =====ADSL:123.2.3.2
    iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 123.2.3.2
  =====禁止本机与外网进行ping但不禁止其他通信:
    iptables -A FORWARD -s 192.168.10.0/24 -p icmp -j REJECT
  =====只允许内网主机访问外网,ping 外网,不允许外网的访问内网,ping 内网
    iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
    iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 80 -m state --state NEW -j ACCEPT
    iptables -A FORWARD -s 192.168.10.0/24 -p icmp --icmp-typpe 8 -m state --state NEW -j ACCEPT
  ======放行外网的FTP服务需要使用RELATED状态:
    iptables -A FORWARD -s 192.168.10.0/24 -p tcp --dport 21 -m state --state NEW -j ACCEPT
    iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

  要记得开启:ip_nat_ftp 和ip_conntrack_ftp两个模块;在文件/etc/sysconfig/iptables-config中添加;

  DNAT:外网访问内网;
    iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.22

  PNAT: 端口转换

    iptables -t nat -R PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.22:8080

  拒绝对内网中的网站包含特定字符的访问:

    iptables -A FORWARD -m string --algo kmp --string “h7ng” -j DROP

   ====丢弃发送至192.168.1.1的所有数据以及分片数据:
    iptables -A OUTPUT -f -d 192.168.1.1 -j DROP

   ====记录192.168.0.1至192.168.0.22地址段内所有的主机发送给路由要求转发的数据包,并允许转发这些数据包
    iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.22 -p tcp --dport 80 -j LOG
    iptables -A FORWAR -m iprange --src-range 192.168.0.1-192.168.0.22 -p tcp --dport 80 -j ACCEPT

14》防火墙备份与还原
  相关命令:
    iptables-save >/etc/sysconfig/iptables
    iptables-save >firewall.bak
    iptables-restore <firewall.bak
15》iptables之layer7(针对服务进行的七层过滤)
  1> 内核编译:
    2.6----------》3.0
    单内核:模块化(文件系统;驱动;安全相关功能)
    配置:.config(/proc/cpuinfo,lspci,lsusb,hal-device)
        make menuconfig
        make gconfig
          make kconfig
          make config
    编译:make

         只编译部分源码:
           make SUBDIR-arch
           make drivers/net/pcnet32.ko
                make dir

        可以将编译结果转存到其他地方:
           make O=/path/to/somewhere
  安装内核模块:
    make modules_install
  安装内核:
    make install
  2>layer7
    netfilter:rules
    iptables: 语法正确

时间: 2024-11-09 00:11:04

网络安全之iptables防火墙的相关文章

网络安全-iptables防火墙

netfilter/iptables是集成在Linux2.4.X版本内核中的包过滤防火墙系统 netfilter/iptables框架可以实现数据包过滤.网络地址转换以及数据包管理功能 Linux中防火墙系统包括两部分:netfilter和iptables:netfilter位于内核空间,iptables是用户工具 iptables默认维护着四个表和五个链 默认的iptables规则表有:fileter表(过滤规则表).nat表(地址转换规则表).mangle(修改数据标记位规则表).raw(跟

iptables防火墙高级应用

iptables 防火墙(主机防火墙) 前言:我们在以前学习过asa防火墙,对防火墙有一定的了解,那么iptables和asa防火墙类似,作用一样,都是为了保证网络安全,系统安全,服务器的安全,和asa一样也需要建立策略,个人觉得比asa的策略要繁琐一点,但只要多做几遍,也就简单了. 一.防火墙基础 Linux防火墙主要工作在网络层,属于典型的包过滤防火墙. 1.iptables的表.链结构 Iptables采用了表和链的分层结构,每个规则表相当于内核空间的一个容器,根据规则集的不同用途划分为默

iptables防火墙应用

安全服务--Iptables  一.网络安全访问控制我们都知道,Linux一般作为服务器使用,对外提供一些基于网络的服务,通常我们都需要对服务器进行一些网络控制,类似防火墙的功能,  常见的访问控制包括:那些IP可以访问服务器,可以使用那些协议,那些接口.那些端口 是否需要对数据包进行修改等等.如果某服务器受到攻击,或者来自互联网哪个区域或者哪个IP的攻击,这个时候应该禁止所有来自该IP的访问.那么Linux底层内核集成了网络访问控制,通过netfilter模块来实现.  iptables作用:

深入研究iptables防火墙基础

防伪码:没有比脚更长的路,没有比人更高的山 第十章 iptables防火墙(一) 前言:我们在以前学习过asa防火墙,对防火墙有一定的了解,那么iptables和asa防火墙类似,作用一样,都是为了保证网络安全,系统安全,服务器的安全,和asa一样也需要建立策略,个人觉得比asa的策略要繁琐一点,但"只要功夫深铁杵磨成针". 一.基础概念 1.iptables表.链结构 a.规则表 表的作用:容纳各种规则链 表的划分依据:防火墙规则的作用相似 默认包括4个规则表 raw表:确定是否对该

iptables防火墙网路安全实践配置

01:iptables防火墙网络安全前言介绍企业中安全配置原则:尽可能不给服务器配置外网IP,可以通过代理转发或者通过防火墙映射.并发不是特别大情况有外网IP,可以开启防火墙服务.大并发的情况,不能开iptables,影响性能,利用硬件防火墙提升架构安全. iptables防火墙概念介绍Netfilter/Iptables(以下简称Iptables)是unix/linux自带的一款优秀且开放源代码的完全自由的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入和流出服务器的数据包进

Iptables防火墙(一)

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

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

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

Linux下的配置iptables防火墙增强服务器安全

Linux下的配置iptables防火墙增强服务器安全 实验要求 iptables常见概念 iptables服务器安装及相关配置文件 实战:iptables使用方法 例1:使用iptables防火墙保护公司web服务器 例2:使用iptables搭建路由器,通过SNAT使用内网机器上网 例3:限制某些IP地址访问服务器 例4:使用DNAT功能把内网web服务器端口映射到路由器外网 实验环境 iptables服务端:xuegod-63   IP:192.168.1.63 iptables客户端:x

基于linux的web服务器的iptables防火墙安全优化设置

安全规划:开启 80  22 端口并 打开回路(回环地址 127.0.0.1) #iptables –P INPUT ACCEPT #iptables –P OUTPUT ACCEPT #iptables –P FORWARD ACCEPT 以上几步操作是为了在清除所有规则之前,通过所有请求,如果远程操作的话,防止远程链接断开. 接下来清除服务器内置规则和用户自定义规则: #iptables –F #iptables -X 打开ssh端口,用于远程链接用: #iptables –A INPUT