iptables filter表案例
1.新建一个脚本文件
vim /usr/local/sbin/iptables.sh
2.写入脚本内容:
ipt="/usr/sbin/iptables"
$ipt -F
$ipt -P INPUT DROP
$ipt -P OUTPUT ACCEPT
$ipt -P FORWARD ACCEPT
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
$ipt -A INPUT -s 192.168.61.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
上面-s选项后面紧跟的ip可以使用w命令查看当前xshell连接的ip区间即可;
-m state --state <状态>
有数种状态,状态有:
▪ INVALID:无效的封包,例如数据破损的封包状态
▪ ESTABLISHED:已经联机成功的联机状态;
▪ NEW:想要新建立联机的封包状态;
▪ RELATED:这个最常用!表示这个封包是与我们主机发送出去的封包有关, 可能是响应封包或者是联机成功之后的传送封包!这个状态很常被设定,因为设定了他之后,只要未来由本机发送出去的封包,即使我们没有设定封包的 INPUT 规则,该有关的封包还是可以进入我们主机, 可以简化相当多的设定规则。
3.保存脚本文件并sh命令执行此脚本文件
sh /usr/local/sbin/iptables.sh
4.查看规则是否生效
iptables -nvL
5.恢复默认规则
service iptables restart
6.关于icmp的包比较常见的应用,执行以下命令(这条命令会禁止别人ping不通本机,但是本机可以ping通外网)
iptables -I INPUT -p icmp --icmp-type 8 -j DROP
7.删除这条规则命令如下
iptables -D INPUT -p icmp --icmp-type 8 -j DROP
参考下面实验:
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 --to 192.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
说白了就是做一个小路由器, 做这个试验无论什么时候一定要确认 ifconfig 输出的 IP 是否是 OK的
在此之前如果使用的是虚拟机演戏的话,需要预备几步工作:
1.给A机器添加网卡
2.默认选项点击完成
3.选择右侧LAN区段:(相当于连到了内网的交换机上, 真机是连不上的, 内网的两台机器可以连上)
4.LAN 区段设置, LAN 区段的名称可以自定义
5.选中 设置好的 LAN 区段 并点击确定, 那么就设置好了 LAN 区段
6.添加好的网卡
7.依照以第一台机器的方法对第二台机器设置网卡, 选择之前设置好的 LAN 区段名称; 但是第二台机器有设置好 IP 的网卡, 需要禁掉它
8.启动两台虚拟机, A机器可以远程连接(有设置好 ip 的网卡), 新添网卡因为没设置好 ip, 所以不能远程连接,新添加的ens37LAN区段还没有ip显示
9.添加新增网卡的IP方法: 命令行或设置配置文件, 设置配置文件之前有讲过; 命令行设置的 IP 重启后就不生效了, 所以想 IP 长久存在, 需要拷贝配置文件和配置配置文件
下面手动设置ip命令行的方法
因为不能远程第二台机器, 所以需要在虚拟机端去操作,为了保险,先禁用掉ens33网卡
B机器同样手动设置Ip,设置为192.168.200.100
主机B上ping一下A的LAN区段
主机A上ping一下B主机LAN段
Windos也ping不通两个LAN区段
确认B机器不能上外网
10.想使用 NAT 表/内核转发, 必须要修改一下内核参数
## 如果 /proc/sys/net/ipv4/ip_forward 为 0 就表示没有开启转发,
cat /proc/sys/net/ipv4/ip_forward
0
## 所以将其设置为 1 , 开启内核转发, 从而打开端口转发(要想使用 NAT , 必须打开它)
echo "1" > /proc/sys/net/ipv4/ip_forward; cat /proc/sys/net/ipv4/ip_forward
1
11.增加一条实现上网的规则: iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE , 目的是为了让 192.168.100.0/24 能上网
#增加规则
iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens33 -j MASQUERADE
#查看规则
[root@yolks1 ~]# iptables -t nat -A POSTROUTING -s 192.168.200.0/24 -o ens33 -j MASQUERADE
[root@yolks1 ~]# iptables -t nat -nvL
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 MASQUERADE all -- * ens33 192.168.200.0/24 0.0.0.0/0
12.B 机器设置网关 route add default gw 192.168.200.1 ; 且可以 ping 通另一个网段
设置 B 机器的 DNS 看看能否连网 vi /etc/resolv.conf
这样B机器技能ping通A机器也能ping通外网了,比如你ping一个A机器可以连接外网IP的地址或则ping百度或者腾讯的地址
远程访问B机器 删掉A机器之前设定的nat表的规则; 如果做到这一步出现 Name or service not known , 就要去 iptables -F, 甚至也需要 iptables -t nat -F
iptables -t nat -D POSTROUTING -s 192.168.200.0/24 -o ens33 -j MASQUERADE
重新设定一个nat表的规则(针对进去的数据包)
iptables -t nat -A PREROUTING -d 192.168.61.130 -p tcp --dport 1122 -j DNAT --to 192.168.200.100:22
13.不能每次通过虚拟机终端去操作, 很麻烦, 所以需要通过 A 机器去登录 B 机器, 这叫做端口映射, 而 22 端口正在用, 如果映射成其他端口(eg: 1122)那就可以用了, 也就是说访问 192.168.61.130:1122 就是访问 192.168.200.100:22; 此时 windows 是 A 机器, B 机器是 Linux A, B 机器是 Linux B ;
最后在Xshell设置一个远程登录到IP地址为192.168.61.130端口为1122的服务器即可。
笔记参考:
拓展
- iptables应用在一个网段 http://www.aminglinux.com/bbs/thread-177-1-1.html
- sant,dnat,masquerade http://www.aminglinux.com/bbs/thread-7255-1-1.html
- iptables限制syn速率 http://www.aminglinux.com/bbs/thread-985-1-1.html http://jamyy.us.to/blog/2006/03/206.html