10.15 iptables filter表小案例
iptables小案例
需求
把80端口,22端口,21端口放行。但是22端口指定IP段访问
vi /usr/local/sbin/iptables.sh 加入如下内容
#!/bin/bash
ipt="/usr/sbin/iptables" 定义变量,目的为了以后加载它
$ipt -F :首先清空规则
$ipt -P INPUT DROP : 定义策略行为 DROP 阻断
$ipt -P OUTPUT ACCEPT :定义策略行为 ACCEPT 放行
$ipt -P FORWARD ACCEPT :定义策略行为 ACCEPT 放行
加入新规则
ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 加该条命令是为了通信更顺畅
指定状态,针对这些状态放行。ESTABLISHED=保持连接 RELATED=两个机器通信完,还继续保持一些额外的通信。
ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT
指定端口,网段数据包放行
ipt -A INPUT -p tcp --dport 80 -j ACCEPT 放行指定端口
ipt -A INPUT -p tcp --dport 21 -j ACCEPT 放行指定端口
icmp 示例
icmp 会产生一个效果,ping外面的网络会通,但是ping本机不通,只是禁ping。
iptables -I INPUT -p icmp --icmo-type 8 -j DROP
10.16 iptables nat表应用(上)(中)(下)
nat表应用
A机器两块网卡 ens33(192.168.133.130),ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联
需求1:可以让B机器连接外网
A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
A上执行命令
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
B机器上设置网关为 192.168.100.1
需求2:C机器只能和A机器通信,让C机器可以直接连通B机器的22端口
A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
A机器上执行命令
iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to192.168.100.100:22
A机器上执行命令
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130
B机器上设置网关为192.168.100.1
虚拟机上操作
有两个虚拟机
在虚拟机A上先添加一块网卡,默认选项
然后在新添加网卡的右侧选择LAN 区段。
LAN 相当于把网卡连到内网交换机上去,是真机连不上的。
在虚拟机B上也要添加一块网卡,把本来的禁用掉。然后在选择LAN的时候要选择同一个区段
需求1的流程
启动AB 两机器
查看A机器 给新增加的网卡增加ip
可以通过ifconfig 命令来手动命令直接设置,但是重启就没有了。如果要永久 就要更改配置文件新创建一下
语法 ifconfig ens37 IP/端口
给A机器ens37 设置为192.168.100.1
给B机器设置ip 192.168.100.100
之后互相ping一下。ping通,说明准备工作完成了。B机器处于不能连接外网。A机器处于可以连接外网
之后把A机器 打开路由转发,改下内核配置
/proc/sys/net/ipv4/ip_forward 默认是0 关闭状态
之后通过命令
echo "1">/proc/sys/net/ipv4/ip_forward 启动路由转发
之后在A机器上增加一条natfilter规则,有了这条规则就可以实现上网了
iptables -t nat -A POSTROUTING -S 192.168.100.0/24 -o ens33 -j MASQUERADE
就是想让100.0 IP 可以上网,做一个伪装
之后在B机器上做一个网关为,192.168.100.1
可以通过 route 命令设置网关
route -n 查看当前网关
route add default gw 网关IP
之后B机器去ping A机器连接外网的网卡 192.168.133.130。发现能通,就意味着B机器可以跟外网通信了。
我们设置下DNS
编辑/etc/resolv.conf 能ping通,就说明可以上外网了。
但是其他机器还是连不上B机器。只能通过A机器连B机器。等于A机器起到一个路由器的功能
需求2 流程
通过A机器跳转到B机器。 端口映射
把100.100的端口映射出来,映射成其它的端口
第一步 打开A机器的路由转发功能
echo "1">/proc/sys/net/ipv4/ip_forward 启动路由转发
给网卡增加IP 已有可忽略
增加两条规则
第一条
出去进入B机器的包
iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100
DNAT 转发行为 进入到 192.168.133.130/1122 的数据包 转发到 192.168.100.100/22
第二条
B机器返回A机器的包
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130
把B机器192.168.100.100发出的包伪装由 192.168.133.130 ip发出 因为Windows源ip只识别与它可以通信的ip
给B机器要设置网关
之后远程连接B机器,
写的IP 需要A机器的IP 端口也是
也是可以跟外网通信的。
可以通过w查看源IP