Linux防火墙

防火墙:

钩子函数:
priouting
input
output
forward
postrouting

规则链:
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING

filter(过滤):表
INPUT
OUTPUT
FORWARD

nat(地址转换):表
PREROUTING
OUTPUT
POSTROUTING

mangle(拆开,修改,封装):表
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING


raw():
PREROUTING
OUTPUT


能否使用自定义链?
可以使用自定义链,但只在被调用时才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制;
用可以删除自定义的空链
默认链无法删除

每个规则都有两个内置的计数器
被匹配的报文个数
被匹配的报文大小之和

规则:匹配标准,处理动作

iptables[-t TABLE] COMMAND CHAIN [num] 匹配标准 -j 处理方法


匹配标准:
 通用匹配
 -s,--src:指定源地址
 -d,--dst:指定目标地址
 -p {tcp|udp|icmp}:指定协议
 -i INTERFACE:指定数据报文流入的接口
   可用于定义标准的链:PREROUTING,INPUT,FORWARD
 -o INTERFACE:指定数据报文流出的接口
   可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
 扩展匹配
  隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p {tcp|udp|icmp}
   -p tcp
    --sport PORT[-PORT]:源端口(可以指定连续端口)
    --dport PORT[-PORT]:目标端口(可以指定连续端口)
    --tcp-flags mask comp:只检查mask指定的标志位,是逗号分隔的标志位列表;comp:次列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
    如:--tcp-flags SYN,FIN,ACK,RST SYN=--syn
    --syn
    
    
   -p icmp
    --icmp-type
     0:echo-reply
     8:echo-request
     
   -p udp
    --sport PORT[-PORT]:源端口(可以指定连续端口)
    --dport PORT[-PORT]:目标端口(可以指定连
    
 iptables -A OUTPUT -s 172.16.100.7 -p icmp --imcp-type 8 -j ACCEPT
 iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 0 -j ACCEPT
    
    
例子:172.16.100.7,sshd:22/tcp
iptables -t filter -A INPUT -s 172.16.100.7 -p tcp --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p tcp --sport 22 -j ACCEPT
  显示扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能(使用额外的匹配机制)
   -m EXETSTION --spe-opt
   state:状态扩展
   /proc/net/ip_conntrack:查看追踪状态文件
   或者:iptstate [-t]   命令
   卸载:modprobe -r ip_conntrack
   安装:modprobe ip_conntrack
    结合ip_conntrack追踪会话的状态
     NEW:新连接请求
     ESTABLISHED:已建立的连接
     INVALID:非法连接
     RELATED:相关联的
  -m state --state NEW,ESTABLISHED -j ACCEPT
        multiport:多端口扩展(离散端口逗号隔开,连续端口冒号隔开)
    --source-ports
    --destination-ports
    --ports
   iprange:
    --src-range
    --dst-range
   单个地址和单个网段:可以用-s(源端口),-d(目标端口):-s IP 或-s NET 如:172.16.0.0/16或172.16.100.3-172.16.100.100
   iptables -A INPUT -p tcp -m iprange !(这里!表示取反) --src-range 172.16.100.3-172.16.100.100 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
  
   可以条件取反:!:-s ! 172.16.100.7(除172.16.100.7的任意端口)
   例子:
      iptables -I INPUT 2 -d 172.16.100.7 -p tcp -m multiport --destination-ports 21,22,80 -m state --state NEW -j ACCEPT
  
  -m  connlimit:连接数限制
     --connlimit-above N
  每个客户端同时最多发起2个(如web服务,只能同时打开两个浏览器请求页面)
  iptables -A INPUT -d 172.16.100.7 -p tcp --dport 80 -m connlimit ! --connlimit-above 2 -j ACCEPT
  
iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -m state --state NEW,ESTAVLISHED -j ACCEPT
lsmod | grep ip

iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT 
iptables -P INPUT DROP
iptables -P OUTPUT DROP

iptables -L -n
开放80: 
  iptables -A INPUT -d 172.16.100.7 -p tcp --dport 80 -m state --state NEW,ESTAVLISHED -j ACCEPT
  iptables -A OUTPUT -s 172.16.100.7 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT 
iptstate(查看连接状态)
放行别人ping自己:
iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -s 172.16.100.7 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
iptables -L -n --line-numbers

对于ftp服务
要装载:ip_nat_ftp,ip_conntrack_ftp模块(在/etc/sysconfig/iptables-config 加入:
IPTABLES_MODULES="ip_nat_ftp ip_conntrack_ftp"
1.放行21端口
2.iptables -A INPUT -d 172.16.100.7 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
  iptables -A OUTPUT -s 172.16.100.7 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT

 

 

 

ip_conntrack监控条目过多,对于后来的请求直接丢弃
修改条目:sysctl -w net.ipv4.ip_conntrack_max=65536(不是永久有效)
永久有效:/etc/sysctl.conf(添加到此文件)
ls /proc/sys/net/ipv4/netfilter/(查看ip_conntrack配置的文件)

 

 
  
  
  
  
保存规则:
 service iptables save
  /etc/sysconfig/iptables(默认保存文件)
 iptables-save > /etc/sysconfig/iptables.2013041801(自定义保存文件)
 iptables-restore < /etc/sysconfig/iptables.2013041801(重定向启用上面自定义的文件)
 
service iptables save (规则保存,注意:可以修改/etc/sysconfig/iptables文件,保存后,service iptables reload)
service iptables reload
service iptables status
service iptables stop
service iptables start  
  
  
-j TARGET
   ACCEPT
   DROP
   REJECT


如:iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -j DROP

 

iptables不是服务,但有服务脚本,服务脚本的主要作用在于管理保存的规则
 装载及移除iptables/netfilter相关的内核模块;
 iptables_nat,iptables_filter,iptables_mangle,iptables_raw,ip_nat,ip_conntrack


命令:
 管理规则:
  -A:附加一条规则,添加在链的尾部
  -I:CHAIN[num]:插入一条规则,插入为对应CHAIN上的第num条;
  -D:CHAIN[num]:删除指定链中的第num条规则;
  -R:CHAIN[num]:替换指定的规则;
  
 管理链:
  -F:[CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
  -P CHAIN:设定指定链的默认策略;
 iptables -P INPUT DROP 修改默认策略为DROP
  -N:自定义一个新的空链
  -X:删除一个自定义的空链
  -Z:置零指定链中所有规则的计数器;
  -E:重命名自定义的链;
 查看类:
  -L:显示指定表中的规则;
   -n:以数字格式显示主机地址和端口号;
   -v:显示链及规则的详细信息
   -vv:显示链及规则的更详细信息
   -x:显示计数器的精确值
   --line-numbers:显示规则号码
  如:iptables -L -n
  

动作(target):
 ACCEPT:放行
 DROP:丢弃
 REJECT:拒绝
 DNAT:目标地址转换
 SNAT:源地址转换
 REDIRECT:端口重定向
 MASQUERADE:地址伪装
 LOG:日志
 MARK:打标记

 
 
 
iptables -I INPUT -d xxxx -p tcp --dport 80 -j ACCEPT
iptables -I OUTPUT -s xxxx -p tcp --sport 80 -j ACCEPT


icmp:
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -i lo -j ACCEPT(lo是网卡,即接口)
iptables -A OUTPUT -s 127.0.0.1 -d 127.0.0.1 -o lo -j ACCEPT

posted @ 2016-04-05 20:45  Runny_Hao  阅读(82)  评论(0)    收藏  举报