防火墙iptables

Firewall:
  组件,工作网络边缘(主机边缘),对进出本网络数据包基于一定的规则进行检查,并在匹配某规则时由规则定义的处理机制进行处理的。

  网络层:包过滤,透明
  状态检测包过滤型
  应用层:代理层网关

5个链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING。

tcp/ip,内核中
选择5个位置,hook function
 PREROUTING  数据包进入路由表之前
 INPUT  通过路由表后目的地为本机
 OUTPUT  由本机产生,向外转发
 FORWARD  通过路由表后,目的地不为本机
 POSTROUTING  发送到网卡接口之前

iptables-->netfilter

4个表:filter,nat,mangle,raw,默认表是filter(没有指定表的时候就是filter表)。表的处理优先级:raw>mangle>nat>filter。

iptables规则:
iptables [-t table] command CHAIN [NUM] match criteria -j TARGET

-t table
  过滤(filter):INPUT OUTPUT FOWARD  一般的过滤功能
  NAT: PREROUTING OUTPUT POSTROUTING  用于nat功能(端口映射,地址映射等)
  Mangle:PREROUTING OUTPUT POSTROUTING INPUT FOWARD  用于对特定数据包的修改
  RAW:PREROUTING OUTPUT  优先级最高,设置raw时一般是为了不再让iptables做数据包的链接跟踪处理,提高性能

命令:


  -N:new
  -X: delete 空链
  -F:flush 清空
  -Z: zero 重新计数
  -P: policy(策略) 默认

规则
  -A:append 添加
  -I:insert, -I CHAIN NUM
  -R:replace, -R CHAIN NUM
  -D:delete, -D CHAIN NUM

列表
  -L:list 列出规则
     -n,numeric 以数字方式显示
     -v,verbose -vv -vvv 显示详细信息
     -x, 不要做单位换算
     --line-numbers

匹配规则:

基本匹配
 -s, --src, --source 匹配数据包源地址
 -d, --dst, --destination 匹配数据包目标地址
 -i, 流入接口
 -o, 流出接口
 -p, portocol {tcp|udp|icmp} 协议匹配

扩展匹配
隐含扩展
-p tcp
 --sport
 --dport
 --tcp-fags {SYN,ACK,FIN,PSH,URG,RST,ALL,NONE}
 --syn
-p udp
 --sport
 --dport
-p icmp
 --icmp-type echo-request 8,发出请求 echo-reply 0允许进来

显式扩展
 -m state 状态检测
   NEW,ESTABLISHED,RELATED,INVALID

State(状态)        Explanation(注释)
NEW        NEW说明这个包是我们看到的第一个 包。意思就是,这是conntrack模块看到的某个连接第一个包,它即将被匹配了。比如,我们看到一个SYN 包,是我们所留意的连接的第一个包,就要匹配它。第一个包也可能不是SYN包,但它仍会被认为是NEW状态。这样做有时会导致一些问题,但对某些情况是有非常大的帮助的。例如,在 我们想恢复某条从其他的防火墙丢失的连接时,或者某个连接已经超时,但实际上并未关闭时。
ESTABLISHED        ESTABLISHED已经注意到两个方向上 的数据传输,而且会继续匹配这个连接的包。处于ESTABLISHED状态的连接是非常容 易理解的。只要发送并接到应答,连接就是ESTABLISHED的了。一个连接要从NEW变 为ESTABLISHED,只需要接到应答包即可,不管这个包是发往防火墙的,还是要由防 火墙转发的。ICMP的错误和重定向等信息包也被看作是ESTABLISHED,只要它们是我 们所发出的信息的应答。
RELATED        RELATED是个比较麻烦的状态。当一 个连接和某个已处于ESTABLISHED状态的连接有关系时,就被认为是RELATED的了。换句话说,一个连接要想 是RELATED的,首先要有一个ESTABLISHED的连接。这个ESTABLISHED连接再产生一个主连接之外的连接,这 个新的连接就是RELATED的了,当然前提是conntrack模块要能理解RELATED。ftp是个很好的例子,FTP-data 连接就是和FTP-control有RELATED的。还有其他的例子,比如,通过IRC的DCC连接。有了这个状态,ICMP应 答、FTP传输、DCC等才能穿过防火墙正常工作。注意,大部分还有一些UDP协议都依赖这个机制。这些协议 是很复杂的,它们把连接信息放在数据包里,并且要求这些信息能被正确理解。
INVALID        INVALID说明数据包不能被识别属于 哪个连接或没有任何状态。有几个原因可以产生这种情况,比如,内存溢出,收到不知属于哪个连接的ICMP 错误信息。一般地,我们DROP这个状态的任何东西。

 -m multiport 多端口匹配
   --sports
   --dprots 20,21,443,80
   --ports
 -m connlimit 连接数匹配
   ! --connlimit-above 5
 -m string 字符串匹配
   --lago {kmp|bm}
   --string pattern
 -m time 时间限制
   --timestart 07:10
   --timestop 23:59:59 stop时间大于start时间

-j TARGET
  ACCEPT
  DROP
  REJECT
  SNAT
  DNAT
  REDIRECT
  LOG

NAT:
 route add default gw 192.168.0.254 -->添加默认网关
 route add -net 192.168.0.0/24 gw 192.168.0.254 -->添加路由条目

查看路由功能是否打开:
 cat /proc/sys/net/ipv4/ip_forward

 SNAT,MASQUERADE(地址伪装)

ssh,tcp,22,来自于192.168.0.0/24,目标地址此机器的地址,允许通过

 iptables -t filter -A INPUT -s 192.168.0.0/24 -d 192.168.0.11 -p tcp --dport 22 -j ACCEPT
 iptables -t filter -A OUTPUT -s 192.168.0.11 -d 192.168.0.0/24 -p tcp --sport 22 -j ACCEPT

关闭默认:
 iptables -t filter -P INPUT DROP
 iptables -t filter -P OUTPUT DROP

允许本机ping 任何主机:
 iptables -A OUTPUT -s 192.168.0.75 -p icmp --icmp-type 8 -j ACCEPT
 iptables -A INPUT -d 192.168.0.75 -p icmp --icmp-type 0 -j ACCEPT

iptables-save > /etc/sysconfig/iptables
iptables-restore < /etc/sysconfig/iptables

/etc/rc.d/rc.local 开机自动运行

常用规则小记:

/etc/rc.d/forward

/sbin/iptables -F

/sbin/iptables -F -t nat

/sbin/iptables -A -i eth0 -j ACCEPT

/sbin/iptables -A -s 192.168.0.1 -p tcp --dprot 22 -j ACCEPT

/sbin/iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

/sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

/sbin/iptables -A INPUT -m state --state NEW -m udp -p udp --dport 9000:10000 -j ACCEPT

/sbin/iptables -A -p icmp -s 192.168.0.1 -j ACCEPT

/sbin/iptables -P INPUT DROP

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

iptables -t nat -A PREROUTING -p tcp -d 10.10.10.1 --dport 80 -j DNAT --to-destination 192.168.1.1-192.168.1.10:80-100

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

iptables -t nat -A POSTROUTING -p tcp -o eth0 -j SNAT --to-source 192.168.1.1-192.168.1.10:80-100

例:对连接到本机的SSH连接进行限制,每个IP每小时只限连接5次

-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --set -j ACCEPT

-A INPUT -p tcp --dport 22 -m state --state NEW -m recent --name SSHPOOL --rcheck --seconds 3600 --hitcount 5 -j DROP

你可能感兴趣的:(防火墙,filter,iptables,NAT)