iptables filter表案例
iptables filter 表案例
创建一个iptables.sh脚本
[root@hch ~]# vim /usr/local/sbin/iptables.sh
写入脚本内容:
ipt="/usr/sbin/iptables"//定义一个环境变量(下面$ipt就等同于
/usr/sbin/iptables的绝对路径了)
$ipt -F//清空之前规则(没有-t,默认是执行的filter)
$ipt -P INPUT DROP//定义策略 (INPUT策略 DROP掉)
$ipt -P OUTPUT ACCEPT//定义策略(OUTPUT策略 ACCEPT接受)
$ipt -P FORWARD ACCEPT// 定义策略(FORWARD策略 ACCEPT接受)
$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT//增加规则(RELATED状态,ESTABLISHED状态放行)
$ipt -A INPUT -s192.168.135.0/24-p tcp --dport22-j ACCEPT//增加规则(192.168.223网段访问22端口的数据包放行)
$ipt -A INPUT -p tcp --dport80-j ACCEPT//增加规则(80端口数据包方行)
$ipt -A INPUT -p tcp --dport21-j ACCEPT//增加规则(21端口数据包放行)
完成脚本后保存退出,接着运行这个脚本;
[root@hch ~]# sh /usr/local/sbin/iptables.sh
最后再来查看以下规则;
[root@hch ~]# iptables -nvL
Chain INPUT (policy DROP 31 packets, 5272 bytes)
pkts bytes target prot opt in out source destination
6 448 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
0 0 ACCEPT tcp -- * * 10.2.32.0/23 0.0.0.0/0 tcp dpt:22
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
恢复默认规则;
[root@hch ~]# service iptables restart
关于icmp的包比较常见的应用,执行以下命令;
[root@hch ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
这条命令会禁止别人ping不通本机,但是本机可以ping通外网
删除这条规则命令如下;
[root@hch ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP
iptables nat表应用
在日常生活中接触到的路由器,它的功能就是分享上网,本来一根网线过来(其实只有一个公网IP),通过路由器后,路由器分配一个网段(私网IP),这样连接路由器的多台PC或者手机等设备都能连接上网了,而远端的设备认为你的IP就是那个连接路由器的公网IP。这个路由器的功能其实就是由linux的iptables实现的,而iptables又是通过nat表作用而实现的。
以下举个例子说明,假设你的两台机器,A机器有两块网卡ens33和ens37,其中ens33的IP为10.2.33.71,ens37的IP为192.168.100.1,ens33网卡连接了因特网,但ens37没有连接。现在B机器有个的ens37网卡和A机器的ens37是互通的,如何设置才能让连接ens33的A机器连接因特网,和110.2.33.71互通呢,操作如下;
[root@hch ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@hch ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
在此之前如果使用的是虚拟机演戏的话,需要预备几步工作;
先对A机器进行操作设置,添加网卡
编辑虚拟机设置——选中:网络适配器——添加:网络适配器——点击:下一步——保持默认:NAT模式——点击: 完成—— 选中:网络适配器 2——选择:LAN 区段——添加:自定义名称——确定——选中刚刚添加的新LAN段 ——确定
这里A机器就设置好了,B机器和A机器设置操作一样,只是需要先把原本B机器上可以连接的网卡断掉禁用掉,已方便操作,禁掉操作如下;
这里记住A、B机器选择的LAN区段一定要一致。
[root@hch ~]#
接下来ifconfig查给A、B机器新网卡同时设置临时IP;
[root@hch ~]# ifconfig ens37 10.2.33.81/23
[root@hch ~]# ifconfig ens37 10.2.33.85/24
B机器为了更好的演示操作,可以ifdown掉ens33网卡
[root@hch ~]# ifdown ens33
这样准备工作就做好了,可以用ping命令检测以下A、B机器是否能相互ping通内网和外网,如果以上操作正确的话,得到的结果是A机器能ping通外网和内网,而B机器只能ping通内网。
接下来就是让A机器的ens37设置的能够连接外网
[root@hch ~]# echo "1" > /proc/sys/net/ipv4/ip_forward //打开端口转发
[root@hch ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE //增加规则
我们可以执行以下命令查看设置结果
[root@hch ~]# cat /proc/sys/net/ipv4/ip_forward //默认是0端口关闭,1则是打开
1
[root@hch ~]# iptables -t nat -nvL
再来给B机器设置网关以及修改DNS;
[root@hch ~]# route add default gw 192.168.100.1
[root@hch ~]# vi /etc/resolv.conf
写入公共DNS:119.29.29.29保存并退出
这样B机器技能ping通A机器也能ping通外网了,比如你ping一个A机器可以连接外网IP的地址或则ping百度或者腾讯的地址
远程访问B机器
删掉A机器之前设定的nat表的规则;
[root@hch ~]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
重新设定一个nat表的规则(针对进去的数据包)
[root@hch ~]# iptables -t nat -A PREROUTING -d 10.2.33.71 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
在设定一个nat表的规则(针对回来的数据包)
[root@hch ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 10.2.33.71
给B机器设置网关;
[root@hch ~]# route add default gw 192.168.100.1
最后在Xshell设置一个远程登录到IP地址为192.168.135.133端口为1122的服务器即可。