10.15 iptables filter表案例
10.16/10.17/10.18 iptables nat表应用
iptables filter表案例
vim /usr/local/sbin/iptables.sh 加入以下内容
#!/bin/bash
ipt="/usr/sbin/iptables" #定义变量,写全局(绝对路径),简洁明了
$ipt -F #清空之前的规则
$ipt -P INPUT DROP #DROP默认INPUT
$ipt -P OUTPUT ACCEPT #ACCEPT OUTPUT
$ipt -P FORWARD ACCEPT #FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #对RELATED,ESTABLISHED状态的数据包放行,RELATED是编译源的状态,在服务器端和客户端建立连接后会有额外的连接,只有ESTABLISHED可能会导致通信失败,因为默认INPUT链是DROP规则
$ipt -A INPUT -s 192.168.133.0/24 -p tcp --dport 22 -j ACCEPT #对192.168.133.0~192.168.133.255 网段,访问22端口的数据包放行
$ipt -A INPUT -p tcp --dport 80 -j ACCPET #把访问80端口的数据包放行
$ipt -A INPUT -p tcp --dport 21 -j ACCEPT #把访问21端口的数据包放行
写脚本的目的是一次性批量处理这些命令,不存在DROP后不能执行后续命令的情况
:wq后执行 sh /usr/local/sbin/iptables.sh
iptables -nvL 查看更改后的规则
icmp示例:
先把iptables文件恢复到默认的规则 service iptables restart
再执行 iptables -I INPUT -p icmp --icmp-type 8 -j DROP
(执行以上操作会禁ping,使得外网无法ping通本机IP,但是本机可以ping通外网)
执行 iptables -D INPUT -p icmp --icmp-type 8 -j DROP 恢复icmp
iptables nat表应用
Linux防火墙-netfilter
nat表应用
A机器两块网卡ens16777736(192.168.242.128)、ens33554984(192.168.100.1),ens16777736可以上外网,ens33554984仅仅是内部网络,B机器只有ens33554984(192.168.100.100), 和A机器ens16777736可以通信互联
1)需求1:可以让B机器连接外网 (做一个小路由器)
①A机器上打开路由转发 echo "1" >/proc/sys/net/ipv/ip_forward
②A上执行iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
③B上设置网关为192.168.100.1
实际操作:
①首先给DTlinux-01虚拟机添加一张内网网卡,设置LAN区段(相当于把网卡连到内网的交换机上,真机无法连接,和另外一台机器连上同一个LAN区段,即内网交换机可以相互通信即可)
由于第二台虚拟机也是分配过IP的,启动连接禁掉后可以重新添加一块网卡,设置同一LAN区段, 并同时开机
DTlinux-01由于第一块网卡没有被禁掉,依然可以通过Xshell远程连接,ifconfig查看多了一块网卡
执行ifconfig 网卡名 192.168.100.1/24 临时设置内网网段,如果想要永久生效,则和设置虚拟网卡一样,复制再网卡配置文件夹/etc/sysconfig/network-scripts/下复制相应的网卡配置文件,并进入编辑模式,修改name,device, ip地址最后保存。
第二台机器DTlinux-02由于把第一块已经设置IP的网卡禁掉,即使网卡在也不能通过远程登录(为确保万无一失可ifdown 网卡命令),只能再原虚拟机终端上进行操作,同理设置内网IP网段 ifconfig 网卡名 192.168.100.100/24
ping测试:
在Xshell上测试机器一是否能ping通机器二的IP,成功
同理在机器二上的主机ping机器一的IP,成功
检测网络情况
cmd看是否能ping通私网地址,2终端查看是否能ping通外网
要实现nat表的应用,必须打开端口转发,默认为0,改成1即激活
echo "1" > /proc/sys/net/ipv4/ip_forward
执行iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens16777736 -j MASQUERADE 达到伪装效果,使得192.168.100.0/24这一网段可以上网,由于B机器IP在此网段内,故可以上网
同时注意,为了让数据包从B机器回到A机器建立通信(A→B→A),要设置B机器的默认网关和A相同放行数据包 192.168.100.1
route -n 查看网关 route add default gw xxxx 增加网关
编辑DNS文件 vi /etc/resolv.conf, 格式nameserver DNS
如果能ping通公用DNS 119.29.29.29就可以ping通外网
2)需求2:C机器不能和A通信,C机器可以直接连通B机器的22端口(要达到C可以连A的效果)
分析:实例中为了让C机器(DTlinux-02)也可以远程连接,方便控制,可以做一个端口映射:即把C机器的22端口映射到可以上公网的B机器的其他端口(如1122端口,22端口已经在使用中,用于C机器通信),然后再通过公网连A机器的1122端口。本例中A为Windows主机(连公网),B为DTlinux-01(连公网和私网),C为DT-linux-02(只能连私网),也就是说把C机器22端口映射到B机器的192.168.242.128的1122端口,即通过B机器的1122端口连C机器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 --to 192.168.100.100:22
外网的数据包想要流入C机器,必须通过B机器(目的IP)的1122端口通过DNAT操作转换成C机器内网IP的22端口(PREROUTING)
PREROUTING是目的地址转换,要把你的公网地址转换成内网地址才能上网。
③A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130
C机器内网的数据包流出,通过22端口到达B机器以后 (C机器为源IP)再进行SNAT操作转换成B机器的1122端口(POSTROUTING)
POSTROUTING是源地址转换,要把你的内网地址转换成公网地址才能让你上网。
④B上设置网关 192.168.100.1
补充:
PREROUTING 和 POSTROUTING, SNAT 和 DNAT图文解析(非常清淅)
https://blog.csdn.net/xzknet/article/details/51957269
测试: