• Linux系统安全——iptables相关总结


    目录

    1.查看iptables规则

    2.删除规则

    3.插入规则

    4.黑白名单

    5.添加回环网卡

    6.清空规则

    7.基本匹配条件

    8.扩展匹配条件

    9.tcp

    10.icmp

    11.显式扩展

    11.1multiport扩展

    11.2iprange扩展

    11.3mac

    11.4string扩展

    11.5time

    11.6连接最大数

    11.7limit 限制流量

    11.8state状态

    11.8.1实现功能

    老用户可以访问  新用户不可以访问

    延伸

    11.9target

    12.规则保存

    12.1开机自动加载

    12.2测试

    12.3备份工具

    13.自定义链

    14.永久开启路由转发功能

    15.SNAT

    16.DNAT


     

    在使用iptables时注意要先关闭firewalldsystemctl stop firewalld.service

    1.查看iptables规则

    iptables -vnL

    选项含义
    -v查看时显示更多详细信息
    -n所有字段以数字形式显示
    -L查看规则列表

    例,拒绝来自192.168.241.22的源地址  直接丢弃

    iptables  -t  filter -A INPUT -s 192.168.241.22 -j DROP

    其中-t filter是指filter表,常用的还可以替换为-t  nat

    -A
    -D编号规则-jtarget
    -I规则
    -R编号规则

    target

    选项含义
    DROP已读不回
    REJECT回不合适
    ACCEPT允许
    LOG生成日志
    SNAT使用snat;source 修改源ip
    DNAT使用dnat; 修改目的ip

    例,拒绝来自192.168.241.22的源地址  不回复  241网段的主机都无法访问

    iptables -A INPUT -s 192.168.241.0/24 -j REJECT

    tcpdump -i ens33 icmp -nn 在22主机上抓包只能看到去的包,看不到回的包

    注意:配错策略无法远程登录服务器

    登录本地  查看规则编号

    iptables -vnL  --line-numbers

    2.删除规则

    iptables -D INPUT 2 

    删除第二条规则

    3.插入规则

    iptables -I INPUT 编号 -s 192.168.241.22 -j DROP

    iptables -I INPUT -s 192.168.241.1 -j ACCEPT   允许本地

    iptables -A INPUT -s 192.168.241.0/24 -j REJECT  拒绝所有241网段的主机

    4.黑白名单

    修改默认规则为白名单后自己也无法访问

    iptables -P INPUT DROP

    访问127.0.0.1也不行

    5.添加回环网卡

    iptables -I INPUT 2 -i lo -j ACCEPT

    6.清空规则

    iptables -F 不包括默认规则  清空全部规则

    iptables -P INPUT DROP 修改INPUT链的默认规则为拒绝,清空规则后又无法登录(因为此时的INPUT链的默认规则是拒绝)

    手动白名单

    iptables -A INPUT -s 192.168.241.1 -j ACCEPT

    iptables -A INPUT -i lo -j ACCEPT

    iptables -A INPUT -j REJECT  最后再添加拒绝所有,比较安全,也不会影响自己本机登录

    7.基本匹配条件

    -s, --source address[/mask][,...]:源IP地址或者不连续的IP地址
    -d, --destination address[/mask][,...]:目标IP地址或者不连续的IP地址
    -p, --protocol protocol:指定协议,可使用数字如0(all)protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp,mh or“all“ 

     iptables -I INPUT 2 -p icmp -s 192.168.91.241 -j REJECT  禁止icmp协议,ssh协议可以继续使用


    -i, --in-interface name:报文流入的接口;只能应用于数据报文流入环节,只应用于INPUT、FORWARD、PREROUTING链
    -o, --out-interface name:报文流出的接口;只能应用于数据报文流出的环节,只应用于FORWARD、OUTPUT、POSTROUTING链

    8.扩展匹配条件

    rpm -ql iptables |grep time  
    man iptables  看不到扩展
    man iptables-extensions  扩展模块

    隐式扩展     -p   tcp 指定了特殊的协议无需再次使用-m 选项   
    显示扩展    必须加   -m  选项

    9.tcp

    iptables -I INPUT 3 -s 192.168.241.22 -p tcp --dport 80 -j REJECT  指定端口号

    iptables -I INPUT 3 -s 192.168.241.22 -p tcp --dport 80:82 -j REJECT 连续的端口号

    tcp的标记位

    --tcp-flags

    --syn:用于匹配第一次握手,相当于:--tcp-flags SYN、ACK、FIN、RST、SYN

    10.icmp

    A可以ping B   B不可以ping  A

    iptables -A INPUT -s 192.168.241.22 -j REJECT    双方都不可以ping

    iptables -A INPUT -s 192.168.241.22 -p icmp --icmp-type 8 -j REJECT  拒绝请求包

    iptables -A INPUT -s 192.168.241.22 -p icmp --icmp-type 0 -j REJECT  拒绝回复包

    拒绝请求包要好用

    11.显式扩展

    11.1multiport扩展

    混合端口,以离散的方式定义多个端口

    yum install epel-release.noarch -y  安装额外源

    systemctl start redis 开启redis

    ss -natp | grep 6379

    vim /etc/redis.conf

    在第61行 bind 0.0.0.0 修改绑定地址

    redis-cli -h 192.168.241.11 主机二登录

    拒绝源地址为192.168.241.22访问本机80和6379端口

    iptables -A INPUT -s 192.168.241.22 -p tcp -m multiport --dports 80,6379 -j REJECT

    11.2iprange扩展

    ip地址范围,之前只能指定网段

    iptables -A INPUT -m iprange --src-range 192.168.241.22-192.168.241.24 -j REJECT

    指定源地址为192.168.241.22-192.168.241.24 三个地址无法访问当前主机

    11.3mac

    根据mac地址

    iptables -A INPUT -m mac --mac-source 00:0c:29:51:4b:b5 -j REJECT

    只有源mac没有目标mac

    11.4string扩展

    根据字符串过滤

    vim /var/www/html/index.html  www.google.com

    vim /var/www/html/index.html  www.baidu.com

    www.google.com

    curl 192.168.241.11/index.html

    www.baidu.com

    iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62 --string "google" -j REJECT

    11.5time

    时间是UTC时间  世界协商时间

    date -u

    man iptables-extensions

    iptables -A INPUT -m time --timestart 16:00 --timestop 18:00 -j REJECT

    11.6连接最大数

    gcc flood connect.c -o flood

    ./flood 192.168.241.11

    iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 2 -j REJECT

    11.7limit 限制流量

    iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

    每分钟允许10个   前5个不限制

    iptables -A INPUT -p icmp -j REJECT

    11.8state状态

    • NEW:无论是我发出的第一个包还是收到的第一个包  都叫NEW
    • ESTABLISHED:NEW 之后都叫ESTABLISHED,除了第一个
    • RELATED:ftp 权限端口会自动打开数据端口
    • NVALID:无效的连接,如flag标记不正确
    • UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪
    • cat /proc/net/nf_conntrack    默认连接跟踪功能需要开启 state功能

    11.8.1实现功能

    老用户可以访问  新用户不可以访问

    iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT

    已在ping的可以继续ping,ping停止的话不可以再ping,xshell也不可以连

    iptables -A INPUT -m state --state NEW -j REJECT 新用户拒绝

    lsmod | grep comn 内核模块可以看到,调用state状态时可以看到

    cat /proc/sys/net/netfilter/nf_conntrack_max 记录的用户数为65536

    echo 1 > /proc/sys/net/netfilter/nf_conntrack_max  修改最大记录数

    tail /var/log/messages  查看日志

    iptables -A INPUT -m state --state ESTABLISHED ACCEPT

    iptables -A INPUT -m state --state NEW -j REJECT

    延伸

    报错Feb  5 09:41:49 localhost kernel: nf_conntrack: table full, dropping packet

    A不能访问我,我可以访问A    单向通讯
    iptables -A INPUT -s 192.168.91.101 -j REJECT    不行都不可以了
    iptables -A INPUT -s 192.168.91.101 -m state --state NEW -j REJECT    第一个包是请求包只要禁止请求包即可

    11.9target

    log
    iptables -I INPUT -s 192.168.91.101 -p tcp -m multiport --dports 80,21:23 -m state --state NEW -j LOG --log-prefix "hello:"

    12.规则保存

    iptables-save 此条命令会将所有规则打印在屏幕上

    iptables-restore 支持标准输入

    iptables-save > /data/iprule

    iptables-restore < /data/iprule

    iptables -A INPUT -s 192.168.241.1 -j ACCEPT

    iptables -A INPUT -s 192.168.241.0/24 -j ACCEPT

    iptables -A INPUT -j REJECT

    将这三条规则加入到规则表中

    iptables-save > /data/iprule   备份

    iptables-restore  < /data/iprule 导入

    12.1开机自动加载

    vim ~/.bashrc

    vim /etc/rc.d/rc.local

    iptables-restore < /data/iprule

    chmod +x /etc/rc.d/rc.local

    12.2测试

    iptables -F

    /etc/rc.d/rc.local

    iptables -vnL

    12.3备份工具

    yum install iptables-services.x86_64 -y

    rpm -ql iptables-service

    /etc/sysconfig/iptables 存放系统自带的规则

    systemctl start iptables-services

    systemctl enable iptables-services

    13.自定义链

    将规则分类  web链 db链  java链

    iptables -N web 自定义链

    iptables -vnL 可以看到自己定义的链

    iptables -E web WEB 修改名称

    iptables -A INPUT -s 192.168.241.0/24 -j WEB

    input链调用将自定义链和INPUT链修改也可以保存

    删除自定义链

    iptables -F INPUT

    iptables -F WEB  删除

    iptables -X WEB 清空自定义链的规则

    curl http://ip.sh 查看本机主机访问公网时使用的ip

    14.永久开启路由转发功能

    vim /etc/sysctl.conf

    net.ipv4.ip_forward = 1   将此写入配置文件

    15.SNAT

    iptables -t nat -A POSTROUTING -s 192.168.241.0/24 -o ens36 -j SNAT --to 12.0.0.1

    将源地址为192.168.241.0网段的私网地址全部转化为网关地址

    iptables -t nat -A POSTROUTING -s 192.168.241.0/24 -o ens36 -j MASQUERADE

    如果地址不固定可以设置

    16.DNAT

    iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.10 -p tcp --dport 80 -j DNAT --to 192.168.241.22

    iptables -t nat -A POSTROUTING -o ens36 -s 192.168.241.0/24 -j SNAT --to 12.0.0.254

    有去有回踩可以ping通  所以要加SNAT

    iptables -t nat -A PREROUTING -i ens36 -d 12.0.0.254 -p tcp --dport 80 -j DNAT --to 192.168.241.11:8080

  • 相关阅读:
    深度学习(PyTorch)——循环神经网络(RNN)基础篇四
    修改angular cli 的默认包管理器
    【Web3 系列开发教程——创建你的第一个 NFT(6)】为 NFT 设置价格
    如何安装Ambari集群_大数据培训
    【毕业设计源码】基于微信小程序的查寝系统的设计与实现
    微服务从代码到k8s部署应有尽有系列(十四、部署环境搭建)
    Scala012--Scala中的常用集合函数及操作Ⅲ
    程序通过命令行获取操作系统名称+版本+CPU名称等:Part2
    支持录音的笔记APP,可将录音转化为文字的笔记软件
    传统算法与神经网络算法,神经网络是机器算法吗
  • 原文地址:https://blog.csdn.net/G_D0120/article/details/136105499