Linux --- iptables

 

 
今天总结的是有关Linux的防火墙

netfilter : 数据过滤。在Linux的内核中有5hook functions, chains()

五个规则链: PREROUTING, INPUT , FORWARD, OUTPUT, POSTROUTING

三表:

filter: 允许不允许

NAT:地址转换

manale:修改报文原数据

三表五链的关系

filter: INPUT,FORWARD,OUTPUT

nat: PREROUTING, OUTPUT, POSTROUTING

mangle: PERROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

   

自己定义的链只有和内核中的链接起来才能生效,也只能删除自己的定义的链,内核中的不能删。

 

iptables/netfiler : iptables 是定义规则,netfiler是过滤的

定义规则:

   iptables –L –n 查看表  -v 显示详细信息

  iptables [ -t table ] COMMAND chain CRETIRIA –j ACTION

           -T table 定义哪个表 ,默认是filter

    COMMAND: 命令:

           链管理命令: -p 设定默认策略

              例: iptables –P INPUT {DROP|ACCEPT}

                -F 清空规则链

               例: iptable –t nat –F PREROUTING

                -N 新建一条链

               例:iptables –N inbound_tcp_web

                -X 删除用户自定义的空链

                 

                -E  重命名自定义的链

                

                -Z  清空链及链中的计数器

                  例: iptables –Z

                      规则管理命令:

                           -A 在当前规则的最后追加

                           -I num 把当前规则插入到第几条

                           -R num 修改第几条规则

                           -D num 删除第几条规则

                       查看命令:

                             -L –n –v ( -v ,-vv,-vvv)  -x –line-numbers; -n 是不用反向解析,-v 详细信息, -x 不用转换精确显示字节大小, --line-numbers 显示行号

 CRETIRIA:匹配标准(通用匹配,扩展匹配)

             通用匹配:

                -s, -src , --source :匹配源地址

                 IP, NETWORK/NETMASK, 0..0.0.0/0.0.0.0

-d 匹配目标地址

-p tcp|udp|icmp 匹配协议

-i eth0 流入接口

-o     流出接口

              扩展匹配:(隐含扩展,显式扩展)

                   隐含扩展:

                            -p tcp

                              --dport

                              --sport

                             --tcp-flags检查的标志位  必须为1 标志位  (   SYN,ACK,FIN,PSH,RST,URG)

        例: -tcp-flags SYN,ACK,FIN,RST,SYN 缩写: tcp-flags –syn 常用写法

                  -p udp

                     --dport

                     --sport

                  -p icmp

                    --icmp-type

       ping出的数据包echo-request数字为 8 ,回应的echo-reply 数字为0

               显式扩展

                     -p tcp –m multiport –dports 21,23,80

                            -m指定模块

            -j ACTION 如何处理

               DROP 丢弃,REJECT 拒绝,ACCEPT 接受,custom_chain 转向链, DNAT, SNAT,目标源地址转换,MASOUERADE,REDIRECT,MARK,

 

例:iptables –t filter –R INPUT 1 –s 172.16.0.0./16 –p udp –dport 53 –j REJECT

例:iptables –t filter –A OUTPUT –s 172.16.100.1 –d 172.16.0.0/16 –p tcp –sport 22 –j ACCPET

例:iptables –P

   状态检查:

         state

         NEW  新建立的链接

         ESTABLISHED    已建立的链接              

         RELATED

         INVALID      

例:iptables -A INPUT -s 192.168.0.0/24 -d 192.168.0.1 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT    (state 有两个杠)   

: iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT

: iptables –A INPUT –p icmp  –icmp-type 0 –j ACCEPT  (icmp-type 有两个杠)

  由于127.0.0.1是个特殊的地址,需要手动加入才能ping通的,否则ping不通

  重启iptales的所有的规则失效,保存方法: service iptables save 位置:/etc/sysconfig/iptables 手动开启:iptables-save > /etc/sysconfig/iptables.2  iptables-restore < /etc/sysconfig/iptables.2  

/proc/sys/net/ipv4/ip_forward  路由功能   

route  [-v]  [-A  family]  add  [-net|-host] target [netmask Nm] [gw Gw]  增加路由格式

route  [-v]  [-A  family]  del  [-net|-host] target [gw Gw] [netmask Nm]   删除路由

 route –v 显示路由信息

Nat的转换:

   源地址转换:

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 172.16.0.1

   外网地址是静态的用此方法,如果是动态的用以下地址

MASQUERADE地址伪装:

 iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE 

 

阻止80

     #iptables –P FORWARD DROP

     # iptables -A FORWARD -s 192.168.0.0/24 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEP

目标地址转换:

   iptables -t nat -A PREROUTING -d 192.168.0.100 -p tcp --dport 80 -j DNAT --to-destination 172.16.0.1
 

开放ftp:

     iptables –A INPUT –d 172.16.0.1 –p tcp –m state –state ESTABLISHED,RELATED –j ACCEPT

     加载模块”ip_conntrack_ftp ip_nat_ftp”或者编辑/etc/sysconfig/iptables-config的IPTABLES_MODULES中写入“ip_conntrack_ftp ip_nat_ftp”

  加载模块:modprobe ip_conntarck_ftp ; modprobe ip_nat_ftp

iptables脚本写法:

       #/bin/bash

       modprobe ip_conntrack_ftp

       modprobe ip_nat_ftp

       iptables –t filter –F
       iptables –t nat –F

       iptables –t mangle –F     

       iptables –p INPUT DROP

       iptables –p OUTPUT DROP

       iptables –p RORWARD DROP

 这是一些需用关闭常见攻击漏洞

iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,ACK,URG NONE -j DROP

iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,FIN SYN,FIN              -j DROP

iptables -A INPUT -p tcp -m tcp --tcp-flags SYN,RST SYN,RST              -j DROP

iptables -A INPUT -p tcp -m tcp --tcp-flags FIN,RST FIN,RST              -j DROP

iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,FIN FIN                  -j DROP

iptables -A INPUT -p tcp -m tcp --tcp-flags ACK,URG URG                  -j DROP

 保存之后,将名字写在/etc/rc.local中。

l7-filter软件的使用: 网站:sourceforge.net

    有内核和补丁组成

配置:环境:2.6 linux kernel ;  iptables source, i7-filter kernel;

 所需软件:iptables-1.4.6.tar.bz2 l7-protocols- linux-2.6.28.10.tar.gz netfilter-layer7-v2.22.tar.gz

iptables -A INPUT -m layer7 --l7proto ftp -j REJECT

iptables –A FORWARD –s 192.168.0.0/24 –m layer7 –l7proto qq –j REJECT

iptables –t filter –A FORWARD –s 192.168.0.0/24 –m layer7 –l7-proto qq –j REJECT

hash –r 清空命令缓存 –d name删除某个特定缓存命令

 

 

 

你可能感兴趣的:(linux,防火墙,地址转换)