防火墙的相关知识

 

防火墙:位于网络之间的,根据所定义的规则对进出网络数据包经行匹配,并匹配到包用指定的处理机制进行处理的硬件、软件或者二者的结合

 

包过滤防火墙:工作于网络层

  有状态检测

  简单包过滤

  

网关代理型防火墙:工作于应用层,效率低,安全性高

 

  Hook function5个钩子

  INPUT

  OUTPUT

  RORWARK

  PREROUTING

  POSTRONTING

  

filter:过滤 在INPUTOUTPUTRORWARK

natPREROUTINGdnatPOSTRONTING(snat) OUTPUT

mangle:对数据包的封装格式重新进行修改,在5个钩子里都可以

rawPREROUTINGOUTPUT

 

当每个钩子拥有不同的表时,其检测顺序是mangle,在nat,最后filter

 

防火墙规则的查看:

# iptables -t table -L -n -v

  -t 默认是filter

  -L 列出目前的table的规则

  -n 不进行IPhostname反查,使显示信息更快

  -v 显示详细信息

  --line-numbers 显示的时候带行号

 

防火墙规则的清除

# iptables -t table [-FXZ]

     -F flush):清空所有的已定规则

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

 -Z ():清空计数器(每一条规则都有两个计数器,一个用于记录被本条规则所匹配到的包的个数,另一个用户记录所有匹配到包的体积之和)

 

定义防火墙的默认策略

# iptables  -P  chain ACCEPT|DROP) REJECT

# iptables  -P  INPUT  DROP

 

配置防火墙

#iptables  [-t table]  sub_command  CHAIN  [num]  [cretiria]   [ -j ACCTION] 

    sub_command

       Rule

         -A append):追加

     -I insert):插入,

     -D delete):删除 -D OUTPUT 

     -R replace):替换, -R FORWARD 6

    chain:链

     -N new):新建

     -E 重命名一条链 

 通用匹配:

      -s ! IP/NETWORK 源地址

      -d ! IP/NETWORK 目标地址

      -p tcp|udp|icmp)指定协议

      -i interface 一般不用于outputpostrouting

      -o interface 一般不用在inputprerouting

  

  

 扩展匹配:

   隐式扩展:一般指对-p选项中指定的协议进行的扩展

       -p tcp

         --sport

     --dport

     --tcpflags 要检查的标记,必须为1的标记(剩余位必须为0

     --syn 

      -p udp

         --sport

     --dport 53 DNS 端口

      -p icmp

         --icmp-type

     echo-request8

     echo-reply0

  

    显示扩展:一般指必须使用-m选项明确指定要加载扩展

 

       -m state:连接状态 

          --state state

          NEW:想要新建立的数据包

  # iptables -A OUTPUT -o eth1 -m state --state NEW -j DROP

          ESTABLISHED:已建立状态的请求数据包

  # iptables -P OUTPUT DROP

  # iptables -A OUTPUT -s 172.16.100.1 -m state --state ESTABLISHED -j ACCEPT

          RELATED:相关联的数据包

          INVALID:无效的数据包

  

       -m mport|multiport)第一个可能不能用,所有尽量用第二个

            --source-ports 8023

            --destination-ports

            --ports 

  # iptables -A INPUT -d 172.16.19.1 -p tcp -m multiport --source-ports 80,23 -j ACCEPT

 

       -m iprange 

            --src-range ip-ip

            --dst-range ip-ip

  # iptables -A INPUT -m iprange --src-range 172.16.19.10-172.16.19.100 -p tcp --dport 80 -j ACCEPT

 

      -m connlimit

            --connlimit-above n 限制某个连接请求上并发请求的个数

 

      -m limit

            --limit rate 平均单位时间是几个

            --limit-burst number 突发限制的数量

# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m limit --limit 1/second --limit-burst 30 -j ACCEPT

 

      -m time 

            --timestart value

            --timestop

            --days listofdays

            --datestart date

            --datestop date

# iptables -A INPUT -d 172.16.100.1 -p tcp --dport 80 -m time --datestart 2012:02:18 --datestop 2012:02:26 --timestart 08:30:00 --timestop 14:30:00 -j ACCEPT

 

      -m string

            --algo bm|kmp

            --string pattern

# iptables -A OUTPUT -s 172.16.100.1 -p tcp --dport 80 -m string --algo bm --string “wed” -j DROP 

 

 

21 FTP 22 ssh  23 telent

 

 

 

  

练习192.168.1.0/24狼窝,在要求为172.16.x.1写规则,满足以下要求:

1filter表所有链接的默认规则为DROP

2lo接口上进出的所有数据包均放行;

3Webssh开放给非狼窝的主机;

1)ssh仅允许在工作时间(每周一至周五的900-1800)被访问,但172.16.0.0/16网络中的主机可在任意时段访问;

2)web服务全时段可被访问,但每秒种接收的新请求的个数不能超过100个;

4、发往本机的ping请求,每秒只各应两个数据包,且最高每秒只响应3个;拒绝来自狼窝ping请求;本机可向任意主机发送Ping请求;

5、本机出口仅将已经建立的连接放行

# iptables -P INPUT DROP

# iptables -P OUTPUT DROP

# iptables -P FORWARK DROP

# iptables -A INPUT -i lo -j ACCEPT

# iptables -A OUTPUT -o lo -j ACCEPT

# iptables -A INPUT -s 192.168.1.0/24 -p tcp -m --multiport --source-ports 80,22 -j DROP

# iptables -A INPUT -s 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT

# iptables -A INPUT -m --timestart 09:00:00 --timestop 18:00:00 --weekdays Mon,Tue,Web,Thu,Fri -p tcp --dport 22 -j ACCEPT

# iptables -A INPUT -p tcp --syn -m limit --limit-burst 100 -j ACCEPT

# iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type 8 -j DROP

# iptables -A INPUT -d 172.16.19.1 -p icmp --icmp-type 8 -m limit --limit 2/second --limit-burst 3 -j ACCEPT

# iptables -A OUTPUT -s 172.16.19.1 -p icmp --icmp-type 8 -j ACCEPT 

# iptables -A OUTPUT -m state --state ESTABLISHED -j ACCEPT