Linux日常维护(filter的一个小案例,filter的nat表应用)

一个iptables的小案例。

写一个脚本,并执行它。

在编辑之前可以先看iptables的规则,和之后会有对比

[root@litongyao ~]# iptables -nvL

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         


Chain FORWARD (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         


[root@litongyao ~]# vim /usr/local/sbin/iptables.sh

ipt="/usr/sbin/iptables"                            (定义一个全局变量)

$ipt -F                                        (计数器清零)

$ipt -P INPUT DROP                                 (把进来的数据包链DROP掉)

$ipt -P OUTPUT ACCEPT                                (本机的数据包可以出去)

$ipt -P FORWARD ACCEPT                                (目标不是本机地址的可以通行)

$ipt -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT (指定状态,RELATED和ESTABLISHED是要同时存在的,详细见下)

$ipt -A INPUT -s 192.168.52.0/24 -p tcp --dport 22 -j ACCEPT (指定只要源地址是这个网段的ip都可以远程连接ssh)

$ipt -A INPUT -p tcp --dport 80 -j ACCEPT             (开放本机的80端口)HTTP服务

$ipt -A INPUT -p tcp --dport 21 -j ACCEPT              (开放本机21端口)FTP服务


[root@litongyao ~]# sh /usr/local/sbin/iptables.sh      sh执行这个命令

再来看看iptables的规则:

[root@litongyao ~]# iptables -nvL        

Chain INPUT (policy DROP 0 packets, 0 bytes)

 pkts bytes target     prot opt in    out   source     destination         

   64  4472 ACCEPT     all  --  *   *   0.0.0.0/0      0.0.0.0/0      state RELATED,ESTABLISHED

    0     0 ACCEPT     tcp  --  *   *  192.168.52.0/24   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


Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)

 pkts bytes target     prot opt in     out     source               destination         


Chain OUTPUT (policy ACCEPT 37 packets, 3556 bytes)

 pkts bytes target     prot opt in     out     source               destination         

可以看到我们写的脚本都被加入了规则里,这里注意的是,没有运行service iptables save,就不会保存规则,重启即可恢复


实验:关于icmp的小案例   (在开始这个小案例之前,需要把上一条规则恢复默认,既重启服务)

[root@litongyao ~]# service iptables restart

下面执行一条命令:

[root@litongyao ~]#  iptables -I INPUT -p icmp --icmp-type 8 -j DROP

我们ping外网,发现没有问题,可以ping通,用别的主机ping自己的时候,却发现ping不通了

Linux日常维护(filter的一个小案例,filter的nat表应用)

Linux日常维护(filter的一个小案例,filter的nat表应用)

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。



Iptables的四种状态:

NEW
NEW说明这个包是我们看到的第一个包。意思就是,这是conntrack模块看到的某个连接的第一个包,它即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。

ESTABLISHED
ESTABLISHED已经注意到两个方向上的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我们所发出的信息的应答。

RELATED
RELATED是个比较麻烦的状态。当一个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这个新的连接就是 RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 连接就是和FTP-control有关联的,如果没有在iptables的策略中配置RELATED状态,FTP-data的连接是无法正确建立的,还有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。


INVALID
INVALID说明数据包不能被识别属于哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP错误信息。一般地,我们DROP这个状态的任何东西,因为防火墙认为这是不安全的东西





nat表的两个应用

  1. 1A机器有两个网卡。一个外网网卡。一个内网网卡。B机器有一个网卡,只有一个内网网卡。需求:B机器可以上网(路由器)

准备工作:

1.给litongyao虚拟机增加一块内网网卡,并设置为LAN区段,(如果没有LAN区段。则需要增加一个区段。)

2.给内网网卡设置一个IP和网段。

[root@litongyao ~]# ifconfig ens37 192.168.100.100/24    

(这种方法设置的ip是临时性的,重启后就会失效。可以复制ens33的配置文件改名为ens37,并修改里面的配置)

3.给xuniji的内网网卡设置一个ip。(因为没有外网网卡。所以不能远程登录连接)

[root@xuniji ~]# ifconfig ens33 192.168.100.50/24 

4.检查

用一台去Ping另外一台机器,如果Ping通,则准备工作完成


实验:

  1. 打开A机器端口转发,并更改防火墙设置

出于安全考虑,Linux系统默认是禁止数据包转发的。所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包。这通常就是路由器所要实现的功能。

[root@litongyao ~]# cat /proc/sys/net/ipv4/ip_forward   (默认是0,则表示端口转功能关闭)

0

[root@litongyao ~]# echo "1" > /proc/sys/net/ipv4/ip_forward        (打开端口转发功能,将0修改成1)

[root@litongyao ~]# cat /proc/sys/net/ipv4/ip_forward

1


[root@litongyao ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE      

2.设置B机器的网关

[root@litongyao ~]# route -n                         (查看网关的命令)

[root@litongyao ~]# route add default gw 192.168.100.1        (增加一个192.168.100.1的网关)



2.C机器只能和A机器通信,让C机器可以连通B机器的22端口(端口映射)

工作:

  1. A机器上打开端口转发

[root@litongyao ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

2.A机器上更改防火墙配置 (最好恢复默认的配置,以免出现偏差)

[root@litongyao ~]# iptables -t nat -A PREROUTING -d 192.168.52.100 -p tcp --dport 1122 -j DNAT --to 192.168.100.50:22

[root@litongyao ~]# iptables -t nat -A POSTROUTING -s 192.168.100.50 -j SNAT --to 192.168.52.100

3.B机器上设置网关

实验:用xshell试着连接192.168.52.100:1122,看是否能映射到B机器的192.168.100.50











本文转自 小新锐 51CTO博客,原文链接:http://blog.51cto.com/13407306/2046196,如需转载请自行联系原作者
上一篇:使用jsonp进行跨域访问


下一篇:javascript验证价格输入