初探iptables -- 下

来源:互联网 发布:探索者软件 编辑:程序博客网 时间:2024/05/16 19:40

接上篇blog。

具体流程估计都了解了吧。

下面来看看他具体是如何操作,添加,删除以及修改规则。

先上个例子。

iptables -t filter -I INPUT -p icmp -j DROP
-t   -->  tables

-I   -->  插入方式

INPUT  -->  chain

-p  --> 匹配的选项 后面接着协议

-j  -->  target

DROP  -->  丢弃

这条规则: 对经过filter表中的INPUT链的icmp数据包进行丢弃操作。看起来还是挺简单的把

现在介绍下几个比较简单的基本操作

iptables -L -t table    查看规则
插入规则:iptables -t table -I chain -p icmp -j DROP            iptables -t table -A chain -p icmp -j DROP

-I 的具体意思是 INSERT  -A则是APPENT  前者是也以直接插入到自己所指定的第几条规则,默认的话是第一条。后者的话也就是追加到规则末尾了。

删除规则:iptables -t table -D chain num or rule
清除列表中的所有规则 :iptables -F           
修改iptables 中某个table中某个chain中的默认规则  iptables -t table -P chain target

这是几个比较基础的简要操作。当然了,iptables的精华在于其各个内核模块实现而所提供匹配参数。

基于ip:

-s 192.168.0.1    -s表示对于源ip为...

-d 222.24.19.63   -d相对的表示则是对目的Ip为..

基于接口:

-i eth0    表示对于从eth0所进来的数据包

-o eth1   表示对于从eth1所出去的数据包

基于端口:

--dport 80   对于目的端口为XX的数据包

--sport 1:1023  对于源口为XX的数据包,这个例子中的1:1023指的是端口1到1023的意思。iptables中可以通过这来表示对一个范围端口号的限制

基于协议:

-p tcp  -p udp    -p icmp  表示对某个协议的数据包

基于mac:-m mac --mac-source aa:bb:cc:dd:ee:ff 
表示对mac地址为XXXX的数据包

基于状态:-m -state--state NEW,ESTABLISHED,RELATED,INVALID 
说到这里就得插两句了

上一篇说到iptables中有一条跟踪机制,其主要就是和上述的这四种状态有关的

NEW:还未建立好的连接的第一个包,也就是SYN包了

ESTABLISHED : 已建立的连接 ,已经建立三次握手之后



RELATED:由已经存在的、处于已建立状态的连接生成的新连接。 简要的举个例子,ftp服务器工作时在建立连接后通过21端口进行对命令的传输,而到传输数据的时候则会通过再次开发另一个端口对其进行数据传输

INVALID:意味着这个包没有已知的流或连接与之关联,也可能是它包含的数据或包头有问题 

这也就是这四种状态所具体表示的意义了。

下面来说一说哦NAT这个table

SNAT:源地址转换,其作用是将ip数据包的源地址转换成另外一个地址
这个chain常常用来对局域网ip到公网ip之间的ip转换。大家所用的虚拟机中的上网方式中的nat方式其实就是通过这个来实现的

DNAT :Destination Network Address Translation目的地址转换

这个常常用来对于ip跳转。听起来好像没什么用? 举个例子,你的web'服务器不想暴露在网络当中,但是别人还是得访问到你的web服务,这时候就得通过一个跳板,也就是通过一个中转服务器来进行对数据包的转发。这就保证了自己web服务器的安全同时又让其能够正常工作

nat中还有个操作是MASQUERADE 其作用其实和SNAT差不多。 区别在与SNAT得自己指定所要修改成的出口ip,而MASQUERADE这个操作则是自己搜寻可用的出口ip。

而这三个操作用于NAT table中的哪几个chain呢。

通过对上篇blog中就能看出。SNAT和MASQUERADE只能用于POSTROUTING,而DNAT这个操作也只能用于PREROUTING中了。

举个例子:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -p tcp -j SNAT --to-source 1.2.3.4  把源ip为192.168.0.0网段 子网掩玛为 255.255.255.0中tcp数据包的源ip改为1.2.3.4

iptables -t nat -A PREROUTING -d 192.168.0.0/24 -p tcp --dport 80 -j SNAT --to 1.2.3.4:80 把目的ip为192.168.0.0网段 子网掩玛为255.255.255.0中的tcp包目的端口为80的数据包转发到大1.2.3.4的80端口

最后在来点一些模块拓展

-m multiports 实现多端口融合

iptables -I INPUT 2 -d 192.168.0.2 -p tcp -m state --state NEW,ESTABLISHED -m multiport --destination-ports 22,80 -j ACCEPT 

-m iprange 指定ip地址范围--src-range 源地址范围--dst-range 目的地址范围

iptables -A INPUT -m iprange --src-range 192.168.0.100-192.168.0.200 -p tcp --dport 23 -m state --state NEW -j ACCEPT 

-m limit 限制连接次数,保证了主机的安全性--limit rate 平均最大速率限定匹配到的数据包的个数--limit-burst  number 平均最大数率的峰值 默认为5

iptables -A INPUT -s 192.168.0.2 -p tcp --dport 80 -m state --state NEW -m limit --limit 3/minute --limit-burst 5 -j ACCAPT 

echo > 1 /pro/sys/net/ipv4/tcp_syncookies

打开syn校验模块,可用于抵御dos,对于大型的服务器,不推荐打开这个模块,他是通过对发来的syn包进行一次校验 

echo > 1/pro/sys/net/ipv4/ip_forward 

打开转发功能

-m time 定义时间模块

--timestart 8:00 --timestop 18:00 -j DROP--days

iptables -t filter -A FORWARD -m iprange --src-range 192.168.2.10-192.168.2.20 -m time --timestart 08:00  --timestop 18:00  -p tcp --dport 21  -j ACCEPT

-m connlimit --connlimit-above 

connlimit模块允许你限制每个客户端ip的并发连接数,即每个ip同时连接到一个服务器个数。

iptables -A INPUT -i eth0 -p tcp --syn -m connlimit --connlimit-above 15 -j DROP 

0 0