iptables filter 表案例
建立一个iptables.sh脚本linux
[root@Ask-02 ~]# vim /usr/local/sbin/iptables.shshell
写入脚本内容:vim
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 -s 192.168.135.0/24 -p tcp --dport 22 -j ACCEPT //增长规则(192.168.223网段访问22端口的数据包放行) $ipt -A INPUT -p tcp --dport 80 -j ACCEPT //增长规则(80端口数据包方行) $ipt -A INPUT -p tcp --dport 21 -j ACCEPT //增长规则(21端口数据包放行)
完成脚本后保存退出,接着运行这个脚本;服务器
[root@Ask-02 ~]# sh /usr/local/sbin/iptables.sh网络
最后再来查看如下规则;tcp
[root@Ask-02 ~]# iptables -nvLide
恢复默认规则;3d
[root@Ask-02 ~]# service iptables restartrest
关于icmp的包比较常见的应用,执行如下命令;code
[root@Ask-02 ~]# iptables -I INPUT -p icmp --icmp-type 8 -j DROP
这条命令会禁止别人ping不通本机,可是本机能够ping通外网
删除这条规则命令以下;
[root@Ask-02 ~]# iptables -D INPUT -p icmp --icmp-type 8 -j DROP
在平常生活中接触到的路由器,它的功能就是分享上网,原本一根网线过来(其实只有一个公网IP),经过路由器后,路由器分配一个网段(私网IP),这样链接路由器的多台PC或者手机等设备都能链接上网了,而远端的设备认为你的IP就是那个链接路由器的公网IP。这个路由器的功能其实就是由linux的iptables实现的,而iptables又是经过nat表做用而实现的。
如下举个例子说明,假设你的两台机器,A机器有两块网卡ens33和ens33,其中ens33的IP为192.168.135.133,ens35的IP为192.168.100.1,ens33网卡链接了因特网,但ens35没有链接。如今B机器有个的ens37网卡和A机器的ens37是互通的,如何设置才能让链接ens35的A机器链接因特网,和192.168.135.133互通呢,操做以下;
[root@Ask-02 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward
[root@Ask-02 ~]# 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区段必定要一致。
接下来ifconfig查看下各个机器的网卡现象
给A、B机器新网卡同时设置临时IP;
[root@Ask-02 ~]# ifconfig ens37 192.168.135.1/24
[root@Ask-01 ~]# ifconfig ens37 192.168.135.100/24
B机器为了更好的演示操做,能够ifdown掉ens33网卡
[root@Ask-01 ~]# ifdown ens33
这样准备工做就作好了,能够用ping命令检测如下A、B机器是否能相互ping通内网和外网,若是以上操做正确的话,获得的结果是A机器能ping通外网和内网,而B机器只能ping通内网。
接下来就是让A机器的ens37设置的可以链接外网
[root@Ask-02 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward //打开端口转发
[root@Ask-02 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE //增长规则
咱们能够执行如下命令查看设置结果
[root@Ask-02 ~]# cat /proc/sys/net/ipv4/ip_forward //默认是0端口关闭,1则是打开
1
[root@Ask-02 ~]# iptables -t nat -nvL
再来给B机器设置网关以及修改DNS;
[root@Ask-01 ~]# route add default gw 192.168.100.1
[root@Ask-01 ~]# vi /etc/resolv.conf
写入公共DNS:119.29.29.29保存并退出
这样B机器技能ping通A机器也能ping通外网了,好比你ping一个A机器能够链接外网IP的地址或则ping百度或者腾讯的地址
远程访问B机器
删掉A机器以前设定的nat表的规则;
[root@Ask-02 ~]# iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
从新设定一个nat表的规则(针对进去的数据包)
[root@Ask-02 ~]# iptables -t nat -A PREROUTING -d 192.168.135.133 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
在设定一个nat表的规则(针对回来的数据包)
[root@Ask-02 ~]# iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.135.133
给B机器设置网关;
[root@Ask-02 ~]# route add default gw 192.168.100.1
最后在Xshell设置一个远程登陆到IP地址为192.168.135.133端口为1122的服务器便可。