Linux中iptables学习

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 22:16   2877   0

防火墙:是一种位于内部网络与外部网络之间安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfilter;管理员通过终端与iptables打交道,来添加和定义防火墙规则到预定义的表中。iptables位于/etc/sysconfig/iptables。iptables可以说是一个过滤规则,而Netfilter是内核中的一个模块,它才是执行包过滤任务的。而在RHEL/CentOS 7中,Firewalld被作为最新的过滤规则,它已经取代了iptables接口,并与netfilter相连接。Firewalld位于/etc/firewalld/是以XML为基础进行配置的。

iptables是来执行脚本的,而不是一种服务    
    service iptables start     会启动一些模块。
    service iptables stop      会卸载一些模块。
    service status iptables    查看当前iptables是否开启
    lsmod | grep ip_tables     检测iptables模块是否被加载
iptables的一般格式:

iptables [-t 表] [-AID 链] [-i/o 接口] [-s sip] [-d dip] [-p 协议] -j 处理动作
放行sshd服务:(通信是双向的,在进出口上都要设置)
    iptables -t filter -A INPUT -s 192.168.1.0/24 -d 192.168.1.1 -p tcp --dport 22 -j ACCEPT      #表示192.168.1.0/24中的主机都可以访问192.168.1.1的sshd服务
    iptables -t filter -A OUTPUT -s 192.168.1.1 -d 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
4个基本表:
    1、filter:是iptables的默认表,用来过滤数据包,支持INPUT链、FOWARD链、OUTPUT链。    
    2、nat:用于网络地址转换,根据表中规则修改数据包IP地址,支持PREROUTING链、OUTPUT链、POSTROUTING链
    3、mnagle:用来对特殊的包进行修改 支持PREROUTING链、INPUT链、FOWARD链、OUTPUT链、POSTROUTING链
    4、raw:表示在对数据包修改前定义某些包不能修改,直接放行
iptables的5个链
    1、PREROUTING:(表示路由前)
    2、INPUT :(入口处)
    3、FOWARD:(转发时)
    4、OUTPUT:(出口)
    5、POSTROUTING:(路由后)
处理动作:
    ACCEPT    :接受        
    DROP    :丢弃,不让客户端知道
    REJECT    :明确拒绝
    DNAT    :目的地址转换
    SNAT    :源地址转换
    REDIRECT:端口重定向
    LOG        :为匹配的包开启内核记录
    MARK    :打标记,只适用于mangle表
规则:
    -A:在指定链后面追加一个规则
    -I 链 n:插入后为第n条,n不指定默认为第一条
    -D 链 n: 删除第n条规则
             iptables -D OUTPUT 3        #删除OUTPUT中第3条规则
    -R 链 n:替换,修改第n条规则
链:
    -F:清空规则,没有指定就删除所有
        iptables -t filter -F  INPUT     #删除filter表中的INPUT链上的规则   
    -P:设置默认规则
        iptables -P INPUT DROP           #预设INPUT链为DROP
    -X:删除一个自定义的链
    -Z:清空计数器

查看 iptables -L:

    -n主机以数字形式表示
        iptables -L -n
    --line-number给出行号
    -v详细情况
    -vv更详细情况
    -vvv更更详细
    -x以字节为单位,表示数据包大小           

匹配条件:

    1、通用匹配
        -s:源IP地址,可以跟网段和子网掩码,不加是表示全部匹配
        -d:目的IP地址,可以跟网段和子网掩码
        -p:协议(tcp、udp、icmp)
        -i:入口设备名(eth0、lo)
           iptables -A INPUT -i lo -j ACCEPT     #放行本机环回口
           iptables -A OUTPUT -o lo -j ACCEPT
        -o:出口设备名
    2、扩展匹配
       隐式匹配:
        -p  tcp --dport
                --tcp-flags SYN,FIN,ACK,RST    SYN,ACK    SYN和ACK是否为1,其他为0才匹配
            icmp --icmp-type 
                ping 别人 进类型0 出8;别人ping自己 进8 出0;<span>不允许别人ping自己,自己可以ping别人</span>。
                iptables -A OUTPUT -s 192.168.248.133 -p icmp --icmp-type 8 -j ACCEPT
                iptables -A INPUT -d 192.168.248.133 -p icmp --icmp-type 0 -j ACCEPT
       显式匹配:
        -m state --state {NEW|ESTABLISHED|INALID|RELATED} 指定状态
           NEW:一次新的请求,tcp三次握手的第一次
           ESTABLISHED:NEW以后的连接,已经连接成功的连接状态
           RELATED:相关连得状态,表示这个包是与主机发送出去的数据包有关系,FTP连接中两个端口
           INALID:无法识别的状态,数据包破损  
           iptables -A INPUT -d 192.168.1.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT  #用户创建新连接时和已经建立的连接时放行,进入链                     
           iptables -A INPUT -s 192.168.1.1 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT      #只放行已建立的连接,出链
        -m multiport
                --sport 源端口
                --dport 目的端口
                --ports 可以多个端口一起
           iptables -A INPUT -d 192.168.248.138 -p tcp -m multiport --dports 21,22,80 -m state --state NEW -j ACCEPT  #表示接收以192.168.248.138的21,22,80为目的端口状态为new的数据 
        -m connlimit --connlimit-above    限制连接数
           iptables -A INPUT -d 192.168.248.131 -p tcp --dport 80 -m connlimit --connlimit-above 2 -j DROP  #限制访问192.168.248.131 httpd服务为2个,当有第3个时就会连不上
        -m limit --limit n/second   平均每秒n个连接 
                 --limit-burst m     最大时每秒m个连接
           iptables -A INPUT -d 192.168.248.131 -p tcp --dport 80 -m limit --limit 10/second --limit-burst 30 -j ACCEPT   #设置访问web服务平均每秒10个连接,最大时30个链接。
        -m mac 网卡地址
              --mac-source 源网卡地址
           iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j ACCEPT #放行局域网内源MAC为aa:bb:cc:dd:ee:ff的主机。此条也可以限制局域网内部主机访问外网。
        -m string --algo {bm|kmp} --string "string"    过滤敏感字符 有两种算法bm和kmp
           iptables -A OUTPUT -s 192.168.248.1 -p tcp --sport 80 -m string --algo kmp --string "abc" -j DROP        #访问时内容包含abc的都过滤掉。
NAT(Network Address Translation)网络地址转换

SNAT  源IP地址转换为一个外网的IP
          iptables -t nat -A POSTROUTING -s 192.168.248.0/24 -j SNAT --to-source 222.24.24.1 #将192.168.248.0/24的地址 转换成222.24.24.1
DNAT  将目标IP转换为内网IP
          iptables -t nat -A PREROUTING -d 222.24.24.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.248.131  #将访问222.24.24.1的80端口,改为192.168.248.131的80端口
          iptables -t nat -A PREROUTING -d 222.24.24.1 -p tcp --dport 80 -j DNAT --to-destination 192.168.248.131:8080 #改为访问8080端口
后面还有很复杂的规则;未完待续。。。。。



参考:鸟哥Linux私房菜,马哥Linux教学视频

转载于:https://www.cnblogs.com/imlifelong/p/10651325.html

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP