iptables 转发 代理 路由

扫盲 网卡配置 说明

TYPE=Ethernet                               网卡类型:以太网
PROXY_METHOD=none                           代理方式:关闭状态
BROWSER_ONLY=no                             只是浏览器(yes|no)
BOOTPROTO=static                            设置网卡获得ip地址的方式(static|dhcp|none|bootp)
DEFROUTE=yes                                设置为默认路由(yes|no)
IPV4_FAILURE_FATAL=no                       是否开启IPV4致命错误检测(yes|no)
IPV6INIT=yes                                IPV6是否自动初始化
IPV6_AUTOCONF=yes                           IPV6是否自动配置
IPV6_DEFROUTE=yes                           IPV6是否可以为默认路由
IPV6_FAILURE_FATAL=no                       是不开启IPV6致命错误检测
IPV6_ADDR_GEN_MODE=stable-privacy           IPV6地址生成模型
NAME=eth0                                   网卡物理设备名称
UUID=6e89ea13-f919-4096-ad67-cfc24a79a7e7   UUID识别码
DEVICE=eth0                                 网卡设备名称
ONBOOT=no                                   开机自启(yes|no)
IPADDR=192.168.103.203                      IP地址
NETNASK=255.255.255.0                       子网掩码,也可使用掩码长度表示(PREFIX=24)
GATEWAY=192.168.103.1                       网关
DNS1=114.114.114.114                        首选DNS
DNS2=8.8.8.8                                备用DNS
最简化配置
TYPE=Ethernet
BOOTPROTO=static
DEFROUTE=yes
DEVICE=eth0
ONBOOT=yes
IPADDR=10.10.10.31
NETMASK=255.255.255.0





TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
IPV6INIT="yes"
IPV6_AUTOCONF="yes"
IPV6_DEFROUTE="yes"
IPV6_FAILURE_FATAL="no"
IPV6_ADDR_GEN_MODE="stable-privacy"
NAME="eth1"
UUID="3c4004a4-6394-41b6-88f3-e543a2b3573c"
DEVICE="eth1"
ONBOOT="yes"
IPADDR="172.16.0.249"
PREFIX="24"
GATEWAY="172.16.0.254"
IPV6_PRIVACY="no"

四表五链 | iptables


四表五链
iptables
四表五链
四表:filter 负责过滤功能
     nat    网络地址转换
     mangle 负责修改数据包内容
     raw    负责数据包跟踪

五链:PREROUTING  主机外报文进入位置
     INPUT       报文进入本机用户空间位置
     OUTPUT      报文从本机用户空间出去的位置
     FORWARD     报文经过路由发觉不是本机决定转发不知道从哪个网卡出去
     POSTROUTING 报文经过路由被转发出去

流入本机:A ---> PREROUTING ---> INPUT ---> B
流出本机:A ---> OUTPUT ---> POSTROUTING ---> B
经过本机:A ---> OUTPUT ---> POSTROUTING | --->    
        PREROUTING ---> FORWARD ---> POSTROUTING -
        --> C ---> PREROUTING ---> INPUT ---> B

filter:INPUT FORWARD OUTPUT
nat:PREROUTING INPUT OUTPUT POSTROUTING
raw:PREROUTING OUTPUT
mangle:PREROUTING INPUT FORWARD OUTPUT 
        POSTROUTING
iptables
格式:iptables -t 表名 选项 链名称 条件 动作
              -t 指定操作的表
              -L 列出当前规则
              -v 显示数据包和大小
              -n 不反解地址
              -A 追加一条规则到链中
              -I 插入一条规则到顶部
              -F 清空
              -Z 清空计数器

              -D 删除链中的规则
              -R 修改
              -S 列出所有的规则
              -N 创建一个自定义链
              -X 删除一个自定义链
              -P 指定链的默认策略

查询本机端口占用命令:netstat -nutlp
iptables动作
1.ACCEPT 将数据包放行,处理完不比对其他规则,跳到下一个规则链
2.REJECT 阻拦数据包,传送数据包通知对方
3.DROP   丢弃包,处理完不比对其他规则,中断过滤程序
4.REDIRECT 将包导入另一个端口,处理完比对其他规则

1.-s 源地址 发送请求的地址
2.-d 目标地址 访问的地址
3.--sport 源端口 发送请求的端口
4.--dport 目标端口 访问的端口
iptables基本条件匹配
1.TCP
2.UDP
3.ICMP
4.ALL
动作
1.-i 进来的网卡
2.-o 出去的网卡
3.-m 指定的模块
4.-j 转发动作
5.-p 指定协议
iptables模块
指定模块:-m
1.连续匹配多个端口multiport--dports 指定多个端口(不同端口之间以逗号分割,连续的端 口使用冒号分割)

2.指定一段连续ip地址范围iprange
  --src-range from[-to]	源地址范围
  --dst-range from[-to]	目标地址范围

3.匹配指定字符串string
  --string pattern 指定要匹配的字符串
  --algo {bm|kmp} 匹配的查询算法

4.根据时间匹配报文time
  --timestart hh:mm[:ss] 开始时间
  --timestop hh:mm[:ss] 结束时间
  --monthdays day[,day...] 指定一个月的某一天
  --weekdays day[,day...] 指定周 还是  周天

5.禁ping,默认本机无法ping别人,别人无法ping自己
  --icmp-type {type[/code]|typename}
    echo-request  (8) 请求 
    echo-reply    (0) 回应

6.限制链接数,并发连接connlimit
   --connlimit-upto n	如果现有连接数小于或等于n  则匹配
   --connlimit-above n 如果现有连接数大于n 则匹配

7.针对 报文速率 进行限制。 秒、分钟、小时、天
  --limit rate[/second|/minute|/hour|/day] 报文数量 
  --limit-burst number 报文数量(默认:5)

案例
1.只允许22端口访问,其他端口无法访问
iptables -t filter -A INPUT -p TCP --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP

2.只允许192.168.15.71能够通过22端口链接,其他的不行
iptables -t filter -A INPUT -p TCP -s 192.168.15.71 -d 198.168.15.81 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p TCP -j DROP

3.要求192.168.15.71对外部不可见
iptables -t filter -A INPUT -p TCP -d 192.168.15.71 -j DROP

4.要求将22,80,443以及30000-50000之间所有的端口向外暴露,其他端口拒绝
iptables -t filter -A INPUT -p TCP -m multiport --dports 22,80,443,30000:50000 -j ACCEPT
iptables -f filter -A INPUT -p TCP -j DROP

5.要求访问数据包中包含HelloWorld的数据不允许通过
iptables -t filter -A INPUT -p TCP -m string --string "HelloWorld" --algo kmp -j DROP

6.7.要求限制速率在500k/s左右
iptables -t filter -A OUTPUT -p -TCP -m limit --limit 300/s -j ACCEPT
iptables -t filter -A OUTPUT -p TCP -j DROP

双网卡配置

定位eth0网卡物理位置
#ethtool -p eth0 10    //让eth0网卡LED灯持续闪烁10秒。

#ethtool -p eth0    //让eth0网卡LED灯持续闪烁,直到手动终止(Ctrl+c)


yum install net-tools -y
使用 rount -n  ifocnfig 命令



开启内核转发 
sudo sysctl -w net.ipv4.ip_forward=1

#设置网卡的临时变量
PHY_IFACE=eth1     
ZT_IFACE=eth0

sudo iptables -t nat -A POSTROUTING -o $PHY_IFACE -j MASQUERADE   # 指定网卡 开启转发功能 
sudo iptables -A FORWARD -i $ZT_IFACE -o $PHY_IFACE -j ACCEPT  #   转发链 添加 从 I 网卡来的数据包,任意状态数据包,从A网卡转出,动作为允许  (zerTier网段的数据可以从物理网卡出去)
sudo iptables -A FORWARD -i $PHY_IFACE -o $ZT_IFACE -m state --state RELATED,ESTABLISHED -j ACCEPT  # 转发链 添加 从 I 网卡来的数据包,状态是 xxx的,从 O 网卡转出,动作为允许  ( 互联网来的数据包,要进去zerTier网络,状态必须是链接的,可以进入)

iptables-save  




-----
也可以这么细化 做 
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE   # 指定网卡 开启转发功能 
iptables -t nat -I POSTROUTING -o eth1 -i eth2 -j MASQUERADE  # 来源eth2的网卡数据 可以从eth1 网卡  地址转换出去
iptables -t nat -I POSTROUTING -o eth1 -s 192.168.10.68/32  -j MASQUERADE    #  # 来源 某个ip或者ip段的数据 可以从eth1 网卡  地址转换出去




添加路由
# 路由添加      前往的网段   掩码                网关  IP      设备  网卡名
route add -net 172.16.0.0 netmask 255.255.0.0 gw 172.16.10.1 dev ens37

追加到开机自启动中

echo "route add -net 172.16.0.0 netmask 255.255.0.0 gw 172.16.10.1 dev ens37" >>/etc/rc.local
posted @ 2023-12-07 10:51  mmszxc  阅读(238)  评论(0)    收藏  举报