有些杂乱,可以直接参考代码高亮部分
启用内核ip包转发
确认 /etc/sysctl.conf 里面 net.ipv4.ip_forward=1
或者直接
[code]echo “net.ipv4.ip_forward=1” >> /etc/sysctl.conf
sysctl -p[/code]
iptables
如果是 RH 系的,自行处理 firewalld。。可以选择关掉 systemctl mask firewalld
Linux 内核中有ip包过滤系统,iptables 只是一个管理程序。
表(table)是分类定义规则的,链(chain)是定义报文触发某个行为的时候的规则。可以自己定义链。
有3张表
- filter 过滤ip包用的,相当于防火墙
- nat 地址转换
- mangle 修改数据
filter 表的链
- INPUT 入流量的过滤
- FORWARD 转发的过滤
- OUTPUT 出流量的过滤
nat 表的链
- PREROUTING 经过转发程序前对报文nat转换规则
- INPUT 经过转发程序(FORWARD)后,没有匹配转发规则,对报文nat转换规则
- OUTPUT 对出方向的报文(不是经过FORWARD转发出去的)的nat转换规则
- POSTROUTING 对出方向的报文(最终准备发送前)的nat转换规则
mangle 表的链
- PREROUTING 进入FORWARD和nat PREROUTING之前对报文的修改
- INPUT 经过转发程序(FORWARD)后,没有匹配转发规则,nat前对报文的修改
- FORWARD 转发过滤前
- OUTPUT 从本机出来 经过nat链之前
- POSTROUTING 发送前,经过nat链之前
图片Ref https://my.oschina.net/HankCN/blog/117796
在 INPUT 过程中,filter表和mangle表中间应该还有nat表,图片没有给出
因为较少在这里用NAT,经验不足可能有误
iptables 参数
- -L 查看
- -n 用数字表示地址和端口
- -t 对哪个表操作
- -A chain 添加记录,chain是链名
- -I chain [rulenum] 插入记录,插入到第几个
- -D chain [rulenum] 删除记录,删除第几个
- -F 删除当前表全部记录
- -N 新建链
- -X 删除链
- -p 指定协议
- –dport 目标端口
- -j 匹配规则后的操作
典型操作
- iptables -L 查看filter表
- iptables -L -t nat 查看nat表
- iptables -A INPUT -p tcp –dport 22 -j ACCEPT 放行tcp 22端口的报文
- iptables -A INPUT -p tcp –dport 80 -s 192.168.1.0/24 -j REJECT 拒绝来自192.168.1.0/24的tcp 80端口的报文
- iptables -A INPUT -p udp –dport 8888 -j DROP 丢弃udp 8888端口的报文
NAT 配置
内网为 192.168.233.0/24 ,到其他子网的包要进行 NAT 伪装。
[code]iptables -t nat -A POSTROUTING -s 192.168.233.0/24 ! -d 192.168.233.0/24 -m comment –comment Outgoing -j MASQUERADE[/code]
-t nat 操作nat表
-A POSTROUTING 加入POSTROUTING链
-s 192.168.233.0/24 源地址为 192.168.233.0/24
! -d 192.168.233.0/24 目标地址不是 192.168.233.0/24
-m comment –comment Outgoing 注释这是一条Outgoing相关的记录
-j MASQUERADE 动态伪装模式 另外还有 SNAT 源地址转换 DNAT 目标地址转换
添加FORWARD规则
filter 表的 FORWARD 链默认是 ACCEPT 全部。但是这里还是写上吧
[code]iptables -A FORWARD -s 192.168.233.0/24 -m comment –comment Outgoing -j ACCEPT
iptables -A FORWARD -d 192.168.233.0/24 -m comment –comment Outgoing -j ACCEPT[/code]
评论