iptables

系统环境 RHEL 7

systemctl stop firewalld # 关闭防火墙
systemctl start iptables.service # 打开iptables
systemctl enable iptables.service # 开机自启iptables

1.四表五链

四表

  • filter:过滤,防火墙,访问本机数据
  • nat :network address translation 网络地址转换,从本机经过的数据
  • mangle:拆解报文,作出修改,封装报文
  • raw: 关闭nat表上启用的链接追踪机制

五链

  • PREROUTING 数据包进入路由之前
  • INPUT 目的地址为本机
  • FORWARD 实现转发
  • OUTPUT 原地址为本机,向外发送,不经过网卡
  • POSTROUTING 发送到网卡之前,源地址转换,在路由之后
2.iptables的使用详解
  • 链管理:

-F : 清空规则链
-N : 创建新的自定义规则链
-X : drop 删除用户自定义的规则链
-P : Policy 为指定链设置默认策略;
-E : 重命令自定义链
  • 规则管理:

-A:将新规则添加到指定的链上
-I:将新规则插入到指定的位置
-D:删除链上的指定规则
-R:替代指定链上的规则
  • 基本匹配

-s 源地址IP 
-d 目的地址IP 
-p 协议{tcp|udp|icmp} 
-i 数据报文的流入接口 
-o 数据报文的流出接口 
-j 目标动作或跳转
  • 目标:

TARGET:jump至指定的TARGET 
ACCEPT:接受 
DROP  :丢弃 
REJECT:拒绝访问 
RETURN:返回调用链
  • 具体实现

iptables -A INPUT -s 192.168.0.4 -p tcp --dport 23 -j REJECT   # 访问拒绝,有提示
iptables -A INPUT -s 192.168.0.4 -p tcp --dport 23 -j DROP      # 访问拒绝,无任何提示,直接被丢弃
iptables -F              # 刷新策略
iptables -t nat -F PREROUTING
iptables -I INPUT 2 -p tcp --dport 23 -j DROP      # 插入到第二条策略
iptables -E allowed disallowed                     # 修改规则链名称
iptables -D INPUT 3                                # 删除filter表中的第三条规则
iptables -D INPUT -s 192.168.0.1 -j DROP           # 按内容删除
iptables -R INPUT 3 -j ACCEPT                      # 将原来编号为3的规则内容替换为ACCEPT
iptables -P INPUT DROP                             # 设置filter表INPUT链的默认规则 ,当数据包没
                                                     有被规则列表里的任何规则匹配到时,按此默认
                                                     规则处理
iptables -t nat -F              # 清空nat策略, -F 仅仅是清空链中规则,并不影响 -P 设置的默认规则
iptables -t nat -nL             # 查看nat策略
iptables -t nat -L PREROUTING   # 查看nat表PREROUTING链的规则
iptables -N redhat              # 添加自定义链名
iptables -X redhat              # 删除自定义链
iptables -A INPUT -s !192.168.0.4 -p tcp --dport 23 -j REJECT  # 只有192.168.0.4不可以连接
         	-D redhat 1                     # 删除自定义链下的策略
            -i eth0                         # 匹配从网络接口 eth0 进来
         	-o eth0                         # 匹配从网络接口 eth0 出去
         	-s 192.168.0.1                  # 匹配来自 192.168.0.1 的数据包
            -s 192.168.1.0/24               # 匹配来自 192.168.1.0/24 网络的数据包
            -d 202.106.0.20                 # 匹配去往 202.106.0.20 的数据包
         	-d 202.106.0.0/16               # 匹配去往 202.106.0.0/16 网络的数据包
         	-d www.abc.com                  # 匹配去往域名 www.abc.com
  • iptables -t filter -nL # 查看filter表,与iptables -nL看到的效果相同
    这里写图片描述

  • iptables -t nat -nL # 查看nat表
    这里写图片描述

  • iptables -t mangle -nL # 查看mangle表,五条链的信息都可以看到
    这里写图片描述

  • iptables -F # 刷新,清掉策略

  • service iptables save # 保存更改到/etc/sysconfig/iptables
    这里写图片描述

  • iptables -A INPUT -s 172.25.254.78 -p tcp --dport 80 -j ACCEPT # 设置只允许172.25.254.78这台主机连接,但是还是不能访问,因为默认只读第一条正确的策略,以提高读取速度;
    其余的策略根本就不会读,所以还不能访问
    这里写图片描述

  • iptables -D INPUT 2 # 删除第二条策略
    这里写图片描述

  • iptables -R INPUT 1 -s 172.25.254.78 -p tcp --dport 80 -j ACCEPT #修改第一条策略使得172.25.254.78这台主机可以访问
    这里写图片描述

  • iptables -I INPUT 2 -p tcp --dport 22 -j ACCEPT # 指定在INPUT的第二行添加策略,使得所有主机都可连接此服务端
    这里写图片描述

  • iptables -N westos #添加westos
    这里写图片描述

  • iptables -E westos WESTOS # 重命名
    这里写图片描述

  • iptables -X WESTOS # 删除
    这里写图片描述

  • iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT # -m state表示数据包的连接状态,NEW表示与任何连接无关

  • iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT

  • iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT

  • iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT

  • iptables -A INPUT -m state --state NEW -p tcp --dport 3260 -j ACCEPT

  • iptables -A INPUT -m state --state NEW -p -i lo -j ACCEPT

  • iptables -nL
    这里写图片描述

  • service iptables save

  • cat /etc/sysconfig/iptales
    这里写图片描述

3.应用iptables控制服务
  • systemctl start httpd
  • iptables -P INPUT DROP # 设置为丢弃状态,默认为接受,可以进行访问
    这里写图片描述
测试:
  • 修改之前:
    这里写图片描述
  • 修改之后:
    这里写图片描述
    注: iptables -P #其后只能加ACCEPT或DROP,P表示规则,p表示协议

iptables -A INPUT -p tcp --dport 80 -j REJECT #将80端口设置为拒绝状态
这里写图片描述

因为拒绝,所以访问不到


如果有多条策略,但只读第一条正确的,其余的就不会读,以下操作解决这个问题


iptables -D INPUT 1   # 删除原来所有的策略,有几行就依次删除
iptables -A INPUT -p tcp --dport 80 -j ACCEPT    # 依次添加策略
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 3260 -j ACCEPT 
iptables -A INPUT -p tcp --dport 443 -j ACCEPT 
iptables -A INPUT -i lo -j  ACCEPT     # 允许回环接口
iptables -nL       # 查看策略
iptables -F        # 刷新策略
ipables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT   # 设置使连接过的和正在使用的不读取,那么在后边新写入的策略就会被读取,以此类推,新写入的策略总能被读取到

这里写图片描述

4.iptable命令实现端口伪装,在nat表中实现

在服务端(双网卡)

  • iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 172.25.254.238 #所有从eth1出去的数据包地址都伪装成172.25.0.238输出,SNAT就是改变转发数据包的源地址
  • iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 22 -j DNAT --to-dest 172.25.254.238 #22端口是以172.25.254.238输入,DNAT就是改变转发数据包的目的地址
  • iptables -t nat -nL

在客户端测试:

  • ping 172.25.0.238 #可以ping通,就代表成功(内网访问外网)
    这里写图片描述

  • 连接服务端,连接成功查看eth0,看到172.25.254.238,就代表成功(外网访问内网)
    这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值