iptables 包过滤型防火墙
防火墙的类别:
代理服务器(proxy):代理client访问internet,分割内部与外部网络
IP Filter:进入本机的tcp/ip封装协议进行过滤
软件防火墙(逻辑上实现)
        硬件防火墙(硬件配合软件实现)iptables功能:拒绝internet数据包进入linux主机的端口port
拒绝IP的数据包进入
                       拒绝带有特殊旗标flag的封装协议
                       分析硬件地址mac提供的服务
              限制:无法抵御***病毒;
                        内部LAN抵御力差;iptables四张表:
raw 处于所有表的最前端,在此处可控制nat表的connectiontrack 链接追踪的生效与否
filter与本机有关INPUT:进入本机
                               OUTPUT:从本机发出
                               FORWORD:从本机转发,与本机关系不大nat:来源与目的IP或port转换
PREROUTING:路由判断之前进行的规则(DNAT/REDICRECT)
                                POSTROUTING:路由判断之后(SNAT/MASQUERADE)
                                OUTPUT:本机发出mangle:带有特殊路由器旗标有关
PREROUTING:
                                 INPUT:
                                 FORWORD:
                                 OUTPUT
                                 POSTROUTING:4个表的优先级由高到低的顺序为:raw-->mangle-->nat-->filter
请求与响应过程:
 
  
数据包>>mangle-PREROUTING>>nat-PREROUTING>>mangle-INPUT>>filter-INPUT>>本机资源>>mangle-OUTPUT>>nat-OUTPUT>>filter-OUTPUT>>mangle-POSTROUTING>>nat-POSTROUTING>>数据包发出
 
  
网络防火墙路由过程:
 
  
数据包>>mangle-PREROUTING>>nat-PREROUTING>>mangle-FORWARD>>filter-FROWARD>>mangle-POSTROUTING>>nat-POSTROUTING>>数据包发出
 
  
iptables用法: -t   表明   -L列出规则表 -n不进行IP的反解析
 
  
                    -v:列出更多的信息,数据包的总数、网络接口
                    -F:清楚所有已定的规则
                    -X:杀掉所有的自定义的table
                    -Z:将所有的chain的计数与流量清零
 
  
-P:定义policy
 
  
          ACCEPT:允许
          DROP:数据包丢弃
     一般的policy:          
             iptables  -P  INPUT DROP
          iptables -P OUTPUT  DROP
          iptables -P FORWORD DROP
 
  
iptables规则设置:
iptables -A 链 -io 网络接口 -p 协议 -s 来源ip/mask -d 目标IP/mask -j ACCEPT|DROP
 
  
         -A :新增规则在原规则之后;
         -I  :默认插入第一条,也可数字
     链:INPUT,OUTPUT,FORWORD
         -i:数据包的入口设备 与INPUT结合
         -o:数据包出口设备 与OUTPUT结合
         -p:协议:tcp,udp,icmp,all
         -s:规定为不允许则其前加!+IP
         -d:目标IP/MASK
         -j:动作ACCEPT、DROP、记录(LOG)
 
  
隐式扩展模块: 一般的不用-m 指定,而是 -p tcp/udp 时隐式自动添加-m tcp 模块
TCP,UDP 规则:
 
  
    --sport 源端口
    如果其前加上 ! 表示除了该指定项
    ! --sport 80 除了80端口都被匹配
    --dport目的端口
    多个连续端口:137:138
 
  
特殊旗标:
 
  
 --syn
 
  
显式扩展模块:MAC;RELATED
-m:调用模块:state状态模块,mac网卡硬件模块
 
  
           --state           INVALID:无效的数据包或损坏的
                        ESTABLISHED:已连接的
                        NEW: 欲新建连接的
                        RELATED:常用,本机发出的数据包有关,并非是已经建立的,但与已经建立的某个链接有关
                             mac 网络硬件地址模块:--mac-source  xx:xx:xx:xx
 
  
iprange地址范围模块,指定一个地址范围
 
  
           -m iprange  --src-range  x.x.x.x-x.x.x.x
 
  
layer7模块:可用于应用层协议的过滤
 
  
           -m layer7 --proto  qq
 
  
multiport模块:以离散或者连续的端口作定义
 
  
           -m multiport  --dports 80,53
 
  
time模块:指定时间匹配条件
 
  
           -m time --timestart hh:mm:ss
           --timestop hh:mmss
           --weekdays 1,2,3
           --monthdays 10,11,12
           --kerneltz  默认使用的是格林威治时间,该选可使用内核配置时区
 
  
string模块:基于字符串匹配
 
  
           --algo bm|kmp 指定算法
           --string 指定字符串的匹配模式
           --hex-string 以16进制指定
           --from offset 指定偏移量
           --to offset
 
  
connlimit模块:限制客户端的连接数
 
  
           --connlimit-upto n 指定连接数不超过nge
           --connlimit-above
 
  
limit模块:限制速率,按照包的个数而不是带宽
 
  
           --limit rate/second
           --limit-burst N  限制令牌池
           限制接受新请求的速率 --syn,-m limit
 
  
ICMP数据包的限定:
 
  
    请求报文: --icmp-type 8
    响应报文: --icmp-type 0
    -p icmp --icmp-type 8(icmp_request)
 
  
-j 处理动作
一般动作:ACCEPT ,DROP
      扩展动作:REJECT
 
  
    --reject--with TYPE 可指定拒绝类型
 
  
LOG
 
  
    --log-prefix
    --log-level
    一般日志保存于/varlog/message
 
  
RETURN:_
 
  
    用于自定义链接,返回调用者
  自定义连作为处理动作
 
  
将现有的iptables设置存储:iptables-save > filename
  根据文件恢复iptables规则:iptables-restore < filename
规则优化的思路:使用自定义链管理特定应用的相关规则,模块化管理规则;
 
  
1. 优先放行双方向状态为ESTABLISHED的报文;
2. 服务于不同类别的功能的规则,匹配到报文可能性更大的放前面;
3. 服务于同一类别的功能的规则,匹配条件较严格的放在前面;
 
  
1.本机向外
                              2.私网向本机
                              3.公网向本机SNAT:用于做客户端的代理,将内网的客户机ip统一替换为紫荆指定的ip地址
iptables -t nat POSTROUTING -s 192.168.1.0/24 -o eno16777736 -j SANT --to-source 111.111.111.111
DNAT:用于服务器端的请求代理,从而达到隐藏服务器的目的
iptables -t nat -I PREROUTING -i eno16777736 -j DNAT --to--destination  192.168.1.1
连接网关时常变动ip需要外网自动探查技术:动态伪装;
iptables -t nat -A POSTROUTING -s 192.168.1.0/24  -j MASQUERADE
防火墙的某些功能需要修改的内核参数,以及需要加载的模块
 
  
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_conntrack_ftp
modprobe ip_nat_ftp
 
  
删除某条规则:
iptables -vnL --line-numbers
  iptables -D INTPUT 7
实例:一个普通的 web 服务器的配置iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 22,80 -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -P INPUT DROP
保存iptbales配置:配置文件是在/etc/iptables
命令是/etc/rc.d/init.d/iptables save
    也可 service   iptables save查看是什么时候保存的!
 
  
cat /etc/sysconfig/iptables
 
  
放行yum的主要是80端口及state NEW
 
  
  iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  iptables -A OUTPUT -p tcp -m tcp -m state --state NEW --dport 80 -j ACCEPT
 
  
放行samba服务普通方式:
 
  
  iptables -A INPUT -p tcp -m multiport --dports 139,445 -j ACCEPT 
  iptables -A INPUT -p udp -m multiport --dports 137,138 -j ACCEPT
  iptables -A OUTPUT -p tcp -m multiport --sports 139,445 -j ACCEPT
  iptables -A OUTPUT -p udp -m multiport --sports 137,138 -j ACCEPT
 
  
防火墙iptables优化:
 
  
  iptables -A INPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
  iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT 
  iptables -A INPUT -i eth2 -j REJECT
  iptables -A OUTPUT -m state
  iptables -A OUTPUT -o eth2 -j REJECT
 
  
iptables nat表的转发:
 
  
  iptables -t nat  -A POSTROUTING -s 192.168.0.0/24 -j SNAT   --to-source 172.16.254.226
  iptables -t nat -I PREROUTING -d 172.16.251.65 -p tcp --dport  80 -j DNAT --to-destination  172.16.254.226

NAT表的转发可指向多个ip地址以实现流量负载均衡轮流发给每个ip处理请求.