标签:报文 选项设置 local 主机 依据 block 防火 war 数据
关于iptablesLinux的防火墙体系主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙(或称网络层防火墙)。iptables是一个命令行防火墙实用程序,它使用策略链来允许或阻止通信。当连接试图在你的系统上建立自己时,iptables在它的列表中寻找一条规则来匹配它。如果找不到,则采取默认操作。
netfilter/iptables过滤防火墙系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的信息包过滤表中,而这些表集成在Linux内核中。在信息包过滤表中,规则被分组放在我们所谓的链(chain)中。
虽然netfilter/iptables包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables的原理就是通过iptables中的规则对数据包进行控制,iptables中定义了5条链,每条链中可以定义多条规则,每当数据包到达一个链,iptables就会从链中第一条规则开始检查,看该数据包是否满足规则所定义的条件。如果满足,系统就会根据该条规则所定义的方法处理该数据包;否则iptables将继续检查下一条规则,如果该数据包不符合链中任一条规则,iptables就会根据该链预先定义的默认策略来处理数据包
规则就是网络管理员在iptables上预定义的条件,规则一般定义为“如果数据包头符合这样的条件,就处理这个数据包”,规则存储在内核空间的信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
上述规则一般都是有很多条, 将很多条规则串起来, 即形成了(规则)链. 内核检查的时候, 按照链中的顺序, 一条条的进行检查,可以将链比做成一个检查站,每个要经过检查站的数据包,都会对其进行检查,查看数据包是否符合检查站上的规则,如果有符合条件的规则,则执行规则相应的动作。Iptables上定义了五条默认的规则链,分别为INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING。其应用时间点分别对应如下:
我们把具有相同功能的规则的集合叫做表,所以说,不同功能的规则,我们可以放置在不同功能的表中进行管理,iptables中定义了四张表,每张表对应了不同的功能,每张表的功能如下:
Iptables [-t 表] [-命令参数 链] [-匹配条件 {扩展匹配}] [-j 动作]
可以使用‘iptables -m 扩展模块 -h’查看模块的使用帮助
查看iptables详细规则iptables -nvL
禁止所有人访问22端口iptables -A INPUT -p tcp --dport 22 -j DROP
只允许173.168.16.0网段访问22端口iptables -I INPUT -s 173.168.16.0/24 -p tcp --dport 22 -j ACCEPT
允许关联的状态包通过iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
允许访问Samba服务的137与138这两个udp端口
iptables -A INPUT -p udp --dport 137 -j ACCEPT
iptables -A INPUT -p udp --dport 138 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j REJECT
iptables -A OUTPUT -p icmp -m icmp --icmp-type 0 -j REJECT
数字8代表的是icmp报文的类型为8,也就是‘echo-request’,表示回显请求,
而数字0代表icmp报文的类型为0,也就是‘echo-reply’,表示回显应答,更多icmp报文的类型和编可以使用‘iptables -m icmp -h’查看,如果为了省事可以直接使用iptables -I INPUT -p icmp -j REJECT,不过这样就把所有的icmp包给拒绝了,我们也就无法ping通别人了
将INPUT链上的默认策略设置为拒绝iptables -P INPUT DROP
将本机的220端口转发到22端口iptables -t nat -A PREROUTING -p tcp --dport 220 -j REDIRECT --to-ports 22
将INPUT链里规则序号为2的规则删除iptables -D INPUT 2
接受源地址为173.168.16.0/24网段的IP访问22和80端口iptables -A INPUT -s 173.168.16.0/24 -p tcp -m multiport --dports 22,80 -j ACCEPT
iptables -A INPUT -s 173.168.16.8 -p tcp -m limit --limit 12/minute --limit-burst 10 -j ACCEPT
iptables -A INPUT -s 173.168.16.8 -p tcp -j DROP
这里因为我的INPUT链默认规则是ACCEPT,第一条规则是每五秒钟匹配一次数据包,那么第五秒钟之前没有匹配到的数据包如果没有对应的规则匹配,那么只能匹配INPUT链的默认规则ACCEPT,那这样限速是完全没用的,于是我们需要添加一条规则来将那些没有匹配到的数据包进行丢弃
主机A 外网ip:60.205.177.173
内网ip:173.168.16.1
主机B 内网ip:173.168.16.2 网关:173.168.16.1
临时开启echo 1 > /proc/sys/net/ipv4/ip_forward
永久开启
[root@localhost ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p #重新加载内核参数
在主机A添加规则如下
iptables -t nat -A POSTROUTING -o eth0 -s 173.168.16.0/24 -j SNAT --to-source 60.205.177.173
如果外网ip是动态的,可以使用MASQUERADE动作,他跟SNAT动作相似,只不过他会自动映射一个可用的外网ip,规则如下:iptables -t nat -A POSTROUTING -o eth0 -s 173.168.16.0/24 -j MASQUERADE
环境配置不变,添加规则如下:
iptables -t nat -A PREROUTING -d 60.205.177.173 -p tcp -i eth0 --dport 800 -j DNAT --to-destination 173.168.16.2:80
这样就可以通过访问60.205.177.173的800端口来访问173.168.16.2上的web服务了,如果不能进行访问,可以试着将对应的SNAT规则配置一下
标签:报文 选项设置 local 主机 依据 block 防火 war 数据
原文地址:https://blog.51cto.com/12970189/2416509