iptables filter表案例

iptables filter 表案例
创建一个iptables.sh脚本

[root@Ask-02 ~]# 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 -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

最后再来查看以下规则;

[root@Ask-02 ~]# iptables -nvL

恢复默认规则;

[root@Ask-02 ~]# service iptables restart

关于icmp的包比较常见的应用,执行以下命令;

[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

iptables nat表应用

在日常生活中接触到的路由器,它的功能就是分享上网,本来一根网线过来(其实只有一个公网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段 ——确定

iptables nat 网卡 iptables nat原理_iptables nat 网卡


iptables nat 网卡 iptables nat原理_iptables nat 网卡_02


iptables nat 网卡 iptables nat原理_iptables nat 网卡_03


iptables nat 网卡 iptables nat原理_IP_04


这里A机器就设置好了,B机器和A机器设置操作一样,只是需要先把原本B机器上可以连接的网卡断掉禁用掉,已方便操作,禁掉操作如下;

iptables nat 网卡 iptables nat原理_IP_05

这里记住A、B机器选择的LAN区段一定要一致。

接下来ifconfig查看下各个机器的网卡现象

iptables nat 网卡 iptables nat原理_IP_06


iptables nat 网卡 iptables nat原理_IP_07

给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

iptables nat 网卡 iptables nat原理_内网_08

再来给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的服务器即可。


转载于:https://blog.51cto.com/13529231/2065634