iptables学习笔记

在linux中防火墙的功能实际上是由netfilter来实现的,netfilter是内核的一种架构,而iptables只是对netfilter来进行管理的,比如策略的添加和删除等。
iptables中有三张表:
nat:用来做地址转换的,包括的规则链有,prerouting,postrouting和output
filter:用来做过滤使用的,包括的规则链有,input,output和forward
mangle:用来做流量整形的,包括的规则链有,input,output,prerouting,postrouting和forward
规则表有规则链组成,规则链里面有一条一条的规则,默认有三张表和五条规则链,可以自定义规则表和规则链
input匹配目的IP是本机的数据包,forward匹配流经本机的数据包,prerouting用来修改目的地址用来做DNAT,postrouting用来修改源地址用来做SNAT
iptables的命令语法有:
POSTROUTING:数据包离开防火墙网卡的时候才做转换(SNAT) PREROUTING .. -o .. SNAT
PREROUTING:数据包进入防火墙网卡的时候就做转换(DNAT)PREROUTING .. -i .. DNAT
INPUT:匹配目的地址是本机的数据包
FORWARD:匹配从本机出去的数据包

iptables语法规则
iptables [-t 要操作的表] <操作命令> [要操作的链] [规则号码] [匹配条件] [-j 匹配到以后的动作]
iptables -P INPUT DROP 对链设置默认规则
         -t nat -F PREROUTING 清空规则链
         -N input_tcp 新建一条规则链
         -X 删除自定义的空链
         -E 重命名链
         -Z 清空链及链中规则的计数器
     规则的修改和删除
    
-A 新增规则,默认追加到最后一行
     -I NUM 插入规则
     -R [NUM]修改某条规则
     -D NUM 删除指定规则
     查看相关命令:
    
-L 查看
     -n 对IP不做反向解析,直接显示
     -v 显示详细信息
     -x 计数器按照数字形式显示,不转换为K,M
     --line-numbers 显示行号
匹配标准:
  通用匹配
  
-s 匹配源地址
   IP,NETWORK/NETMASK,0.0.0.0/0.0.0.0,使用!表示取反
  -d 匹配目标地址
  
  扩展匹配
    隐含匹配
    
-p 匹配协议{tcp|udp|icmp}一般就这三种协议
    --dport 可以指定连续端口(21-23),不能指定离散端口
    --sport
    --tcp-flags 对于tcp协议来说{SYN,ACK,FIN,PSH,RST,URG}
    --tcp-flags SYN,ACK,FIN,RST SYN 检查四个包SYN必须为1,其他都是0 == --SYN
    --icmp-type
     echo-request 8 ping出去的数据包
     echo-reply 0 ping返回的数据包
  -i 流入接口(eth0){PREROUTING|INPUT}
  -o 流出接口{POSTROUTING|OUTPUT|FORWARD} 
    显示匹配(各个扩展模块来实现)
     
-p tcp -m multiport --dport 21,23,80
      -m limit --limit 50/s 进行速率匹配
      -m mac --mac-source xx:xx:xx:xx:xx:xx 进行MAC地址匹配
         
采取的动作(ACTION)
 
DROP
  ACCEPT
  REJECT
  custom_chain 转向一个自定义的链
  DNAT 目标地址转换
  SNAT 源地址转换
  MASQUERADE 地址伪装
  REDIRECT 实现端口重定向
  MARK 打标记
  RETURN 返回

iptables设置:
 1、 将所有进入方向的默认规则设置为DROP,只开放允许进来的
 2、 将所有链默认规则全部设置为DROP,只开放允许的,此情况下,所有允许的规则都要设置双向两条
 3、 所有链规则默认全部设置为DROP,只开放允许的,设置双向允许规则并且全部采用状态检测机制

防火墙的状态检测 -m state --state NEW,ESTABLISHED
  
NEW 新建立的连接
  ESTABLISHED 已建立的连接
  RELATED 相关性的连接(如FTP 20,21号端口之间)
  INVALID 无法识别的非法连接
  RST 重置类型的连接

主机自己访问自己的服务先要从OUTPUT出去然后再从INPUT进来,和其他主机访问本机的走的过程正好相反
service iptables save保存 默认保存在/etc/sysconfig/iptables文件中,设置iptables开机自动启动
iptables-save > /etc/sysconfig/iptables 这里也可以自定义保存位置
iptables-restore < /etc/sysconfig/iptables
    
iptables在指定某个IP时候不要加子网掩码,写网络号一定要有子网掩码

-p用来指定协议可以是tcp,udp,icmp等也可以是数字的协议号,-s指定源地址,-d指定目的地址,-i进入接口,-o流出接口,-j采取的动作,accept,drop,snat,dnat,masquerade,--sport源端口,--dport目的端口,端口必须和协议一起来配合使用
POSTROUTING链不支持流入接口"-i",PREROUTING链不支持流出接口"-o"
下面是进行目的地址转换的例子
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.2:80
iptables -t nat -A PREROUTING -i ppp0 -p tcp --dprot 81 -j DNAT --to 192.168.0.1-192.168.0.10

下面是进行源地址转换的例子:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10

下面是masquerade地址伪装的例子:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE

masquerade和snat的主要区别在于,snat是把源地址转换为固定的IP地址或者是地址池,而masquerade在adsl等方式拨号上网时候非常有用,因为是拨号上网所以网卡的外网IP经常变化,这样在进行地址转换的时候就要在每次都要修改转换策略里面的ip,使用masquerade就很好的解决了这个问题,他会自己去探测外网卡获得的ip地址然后自动进行地址转换,这样就算外网获得的ip经常变化也不用人工干预了。
按包状态来进行匹配,主要的状态有NEW,RELATED,ESTABLISHED,INVALID(不能识别属于哪个连接或没有任何状态)
例如:iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
匹配某个MAC地址用于封杀某个MAC
iptables -A FORWARD -m mac --mac -source MAC地址 -j DROP
报文经过路由后,数据包中原有的MAC信息会被替换,所以在路由后的iptables中使用mac匹配没有意义。
以一定的速率去匹配数据包
iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
iptables -A FORWARD -d 192.168.0.1 -j DROP
多端口匹配,用以一次匹配多个端口:
iptables -A INPUT -p tcp -m muliport --dport s 21,22,25,80,110 -j ACCEPT
几种应用
1.单服务器防护:可以直接受目的端口为80,状态为RELATED,ESTABLISHED的数据包,其他丢弃。
2.作为网关来使用,echo "1" > /pro/sys/net/ipv4/ip_forward然后做SNAT
3.可以用来限制内网用户,在forward表中做限制
4.使用链接追踪模块modprobe ip_nat_ftp
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
注意:
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
modprobe ip_nat_ftp
所有链名必须大写,表明必须小写,动作必须大写,匹配必须小写
防火墙的模块放在/lib/modules/内核名字/kernel/net/ipv4/netfilter目录下面
 

你可能感兴趣的:(参数,iptables,详解,NAT,状态检测)