iptables学习笔记之---搭建一套强大的安全防护盾

来源:互联网 发布:iface702考勤软件 编辑:程序博客网 时间:2024/06/05 05:48

1.首先说到iptables的话先说一说Netfilter

通俗来说Netfilter就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤,NAT等,甚至可以是 用户自定义的功能)。------by 百度百科

这跟windows的hook是类似的,我先把你钩住然后根据我的规则对你进行处理

IP层有五个HOOK点
[1]:NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验
和等检测), 目的地址转换在此点进行;
[2]:NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT包过滤在此点进行;
[3]:NF_IP_FORWARD:要转发的包通过此检测点,FORWARD包过滤在此点进行;
[4]:NF_IP_POST_ROUTING:所有马上便要通过网络设备出去的包通过此检测点,内置的源地址转换功能(包括地址伪装)在此点进行;
[5]:NF_IP_LOCAL_OUT:本机进程发出的包通过此检测点,OUTPUT包过滤在此点进行。
介绍完netfilter,那么netfilter与iptables的具体的关系是什么呢?请看下图

所以,iptables实际上是调用了Netfilter,从iptables到内核到ip_talbes内核模块再到Netfilter,最后用hook模块进行处理
2.iptables规则组成

组成部分:四张表+五条链(HOOK point)+规则

四张表:filter表,nat表,mangle表,raw表

filter表:访问控制,规则匹配

net表:地址转发

mangle表:修改数据包,改变包头内容(TTL,TOS,MARK)

raw表:免除 连接跟踪与NOTRACK目标相结合( for configuring exemptions from connection tracking in combination with the NOTRACK  target.

五条链:INPUT OUTPUT FORWARD PREROUTING POSTROUTING


规则组成:

数据包访问控制:ACCEPT,DROP,REJECTDROP:丢弃,不会返回客户端REJECT:会返回客户端

数据包改写:SNAT,DNAT//s:source(源地址 ) d:destination(目的地址)

信息记录:LOG



先看看一些简单命令

iptables -v //查看iptables版本

iptables -L //列出之前设置的规则(List the rules in a chain or all chains)

iptables -F //--flush清除之前设置的规则(Delete all rules in  chain or all chains)

一些使用

Usage: iptables -[ACD] chain rule-specification [options]       iptables -I chain [rulenum] rule-specification [options] // -I:插入       iptables -R chain rulenum rule-specification [options]       iptables -D chain rulenum [options]       iptables -[LS] [chain [rulenum]] [options]       iptables -[FZ] [chain] [options]       iptables -[NX] chain       iptables -E old-chain-name new-chain-name       iptables -P chain target [options]       iptables -h (print this help information)


场景一:

规则1:对所有的地址开放本机的tcp(80,22,10-21)端口的访问

iptables -I INPUT -p tcp --dport 80 -j ACCEPT iptables -I INPUT -p tcp --dport 22 -j ACCEPT iptables -I INPUT -p tcp --dport 10:21 -j ACCEPT
-I INPUT:插入INPUT链

-p tcp:--protocol tcp协议

 --dport:目标端口

-j ACCEPT:即--jump target,满足条件就按什么目标操作(what to do if the packet matches it.)


规则2:对所有的地址开放本机的基于ICMP协议的数据包的访问    

iptables -I INPUT -p icmp -j ACCEPT


规则3:其他未允许的端口则禁止访问

iptables -A INPUT -j REJECT
-A:--append  添加到链中,这里是从后面添加哦(Append to chain)

A是添加在规则的最后,这I和A参数跟vi的有点像,另外防火墙是从第一条规则检测,一旦满足,后面的规则就不检测了



先看一下本机开放的端口


下面用nmap扫描本机测试一下


可以看到5000+和9000+的端口都没扫出来


但是上面的设置是存在问题的:

1.本机无法访问本机

2.本机无法访问其他主机(因前面设置的都是本机端口的规则,所以访问外网的话最终会匹配到最后一条规则)


对于第一点:

iptables -I INPUT -i lo -j ACCEPT

-i, --in-interface name,从这个接口收到的都ACCEPT(Name  of  an  interface via which a packet was received)

设置完就可以telnet本机22了


对于第二点:

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-m:匹配,这里是匹配状态(match)

--state:指定是什么状态


补充:如果设置80端口只允许某ip访问

iptables -I INPUT -p tcp -s 10.10.10.1 --dport 80 -j ACCEPT
-s:source 源地址

设置前记得清除前面设置的



0 0
原创粉丝点击