1.首先说到iptables的话先说一说Netfilter
通俗来说Netfilter就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤,NAT等,甚至可以是 用户自定义的功能)。------by 百度百科
这跟windows的hook是类似的,我先把你钩住然后根据我的规则对你进行处理
组成部分:四张表+五条链(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 源地址
更新中...