iptables语法
filter表:
INPUT链:作用于进入本机的包
OUTPUT链:作用于送出本机的包
FORWARD链:作用于和本机无关的包
nat表:
PREROUTING链:作用是包在刚刚到达防火墙时改变包的目标地址
OUTPUT链:改变本地产生的包的目标地址
POSTROUTING链:作用是在包将离开防火墙时改变包源地址
1.查看iptables规则
iptables -nvL (此时默认查看filter表,加选项 -t 可以指定表 iptables -t nat -nvL )
(规则的保持路径: /etc/sysconfig/iptables
)
把所有规则清空 iptables -F:(/etc/sysconfig/iptables仍然是保存着的)
保存默认规则到配置文件(/etc/sysconfig/iptables)
重启一下服务:service iptables restart (因为刚刚删除了规则:iptables -F ,需要重启加载。否则无东西可保持!)
执行:service iptables save 保存
当我们添加规则的时,如果需要保存到配置文件需要保存操作(service iptables save),否则只是保持在当前的内存中。
2. iptables -Z 把计数器清零 (因为每时每刻都是在通信,数据清零一会又会有数据)
iptables -Z; iptables -nvL
3.增加/删除一条规则:
-A/-D 表示增加或删除一条规则
-I : 表示插入一条规则
-p : 指定协议(tcp、udp、icmp)
--dport 和-p一起使用,指定目标端口 (使用dport必须使用-p指定协议)
--sport 和-p一起使用,指定源端口 (使用dport必须使用-p指定协议)
-s 表示指定源IP
-d 表示指定目标ip
-j 后面加动作: (1)ACCEPT 允许包 (2)DROP 丢掉包 (3)REJECT 拒绝包
-i 指定网卡
(DROP 丢掉包 和 REJECT 拒绝包 :效果一样,DROP 丢掉包,直接把包丢弃;REJECT 拒绝包 :分析过再拒绝)
(3.1)增加规则
如:
(操作默认表filter)
iptables -A INPUT -s 192.168.136.1 -p tcp --sport 1234 -d 192.168.136.123 --dport 80 -j DROP
iptables -I INPUT -p tcp --dport 80 -j DROP
(-I 和-A 的区别 ,-I把规则插入到最前面,-A把规则添加到最后,在过滤时,先执行最前面的)
(3.2)删除规则 -D
1.(记得规则前提下删除规则,直接把选项加-D)
iptables -D INPUT -s 192.168.136.1 -p tcp --sport 1234 -d 192.168.136.123 --dport 80 -j DROP
iptables -D INPUT -p tcp --dport 80 -j DROP
(2)不记得规则命令时删除规则方法:
a.把规则的序列号打印出来 iptables -nvL --line-number
b.针对规则编号进行删除
iptables -D INPUT 规则编号
iptables -D INPUT 1
iptables -nvL 可以看到链的默认策略
通过-P 可以改链的策略(千万不要执行)
iptables -P OUTPUT DROP
(如果执行了这个命令,则我们远程连接就会链接不上,因为我们的包不能正常的返回给我们)
iptables filter表小案例
需求:对filter表开放22端口、80端口、 21端口,INPUT链:DROP ,OUTPUT链和FORWARD链:ACCEPT,22端口只针对192.168.136.0/24开通,所有网段开发80端口、 21端口。
(这条规则必须要写,不然后面的80端口和21端口无法取得包)
看结果:
icmp示例
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
执行命令后,只能ping通外网,别人不能ping通我们的本机(禁ping作用)
命令的 8 是指能在本机ping 同其他机器,而其他机器不能ping通本机。
ptables nat表应用
(一).首先准备两台机器(让A\B能相连)
先在两台机器都添加多一个网络适配器
步骤 :
第一台机器 编辑虚拟机设置 -->添加-->网络适配器-->选中右边LAN(图中操作)-->选中我们定义的LAN区段--->确认
(LAN相当于网卡选到一个内网交换机上,但此时我们的window机连不上这个交换机)
第二台机器:(也是添加一个网络适配器,因为原机器上已经配置了一个ip)
(首先把原来网络适配器设备状态 启动时连接 选项取消,(此时ip不存在,不能再远程连接)。再开始添加网络适配器)
启动两台机器
第一台机器:(查看一下ip,ifconfig)
1. 设置ip
方法一:(步骤和设置虚拟网卡一样)
(1)先复制一份配置文件 cp /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/sysconfig/network-scripts/ifcfg-ens37
(2) 修改配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens37
(3)保存退出
方法二:(临时生效)
命令:ifconfig ens37 192.168.100.1/24 (临时设置,重启消失)
第二台机器(B )
(我们在设置网络适配器时已经取消它开机启动,使用命令
ifdown ens33 是为更保险的down掉ens33网卡对实现的影响)
1.设置ip
方法如上第一台机器
设置ip为 ifconfig ens37 192.168.100.100/24
配置完了ip 测试两台机器相ping是否通:
A机器:
ping 192.168.100.100
查看配置的网卡是否有问题方法:
(1)ping 自己的ip
(2)mii-tool 网卡名(mii)
(以上准备工作已经实现A,B两台机器可以通信,能相互ping通)
(二)
1.A机器修改一下配置文件,开启内核转发
内核参数配置文件: /proc/sys/net/ipv4/ip_forward
默认内容为:“0” 表示没有开启内核转发
把配置文件中的"0"改为1 开启内核转发
echo "1" >/proc/sys/net/ipv4/ip_forward
2.A实现设置的网段能上网
iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
3. B上设置网关为192.168.100.1
(数据包要想从B-->A ,必须设置一个网关)
查看网关命令: route -n
还没网关
设置网关:route add default gw 192.168.100.1 (A机器的网卡ens37的ip)
route add default gw 192.168.100.1
接着测试 是否能ping同A机器的ens33,同则证明能外网/公网通信
设置DNS 链接到网络上
vi /etc/resolv.conf
添加内容保存: nameserver 119.29.29.29
保存后测试是否能ping通外网:ping www.baidu.com
(实验不能ping通外网,可能是和我的网络环境(实验时我用的网络是手机热点),但是此时我能ping通A机器的ens33和ping通网关就行了)
应用需求二:
需求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 --to 192.168.100.100:22
A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.136.133
B上设置网关为192.168.100.1
(其实就是端口映射)
1.A上打开端口转发
echo "1">/ proc/sys/net/ipv4/ip_forward
2.删除需求一的nat表的设置,让它恢复为空:
执行命令:iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
(因之前操作过:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE)
3.向nat表添加操作:
(3.1)A上执行
iptables -t nat -A PREROUTING -d 192.168.136.133 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22 (实现把进来的包通过端口映射转发到22端口)
(3.2)A上执行
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.136.133 (返回的包,进行SNAT操作)
4.给B机器加上网关(必须要设置网关)
route add default gw 192.168.100.1
5.测试,使用192.168.136.133 /1234端口远程连接B机器
(实验不成功)
iptables规则备份和恢复
1. service iptables save //命令会把规则保存到 /etc/sysconfig/iptables
根据自己的需求把iptables规则保存到指定的文件中:
步骤:iptables-save > /自定义文件
iptables-save >/tmp/ipt.txt
恢复保存的规则:
iptables-restore < /保存的文件
iptables-restore </tmp/ipt.txt