iptables学习笔记
2016-12-29
参考链接:http://blog.chinaunix.net/uid-26495963-id-3279216.html
防火墙,用于实现访问控制,分为硬件防火墙和软件防火墙,防火墙工作在主机边缘:对于进出本网络或者本主机的数据报文,根据事先设定好的规则对其检查,对形迹可疑的报文一律按照事先定义好的处理机制做出相应处理。
对linux而言tcp/ip协议栈是在内核当中,意味着报文的处理是在内核中处理的,也就是说防火墙必须在工作在内核中,防火墙必须在内核中完成tcp/ip报文所流进的位置,用规则去检查,才真正能工作起来。
iptables用来衡量tcp/ip报文的属性:源ip、目标ip、源端口、目标端口;
tcp标志位: syn、syn+ack、ack、 fin、urg、psh、rst ;
网络层防火墙(三层):对源地址和目标地址进行检测。
七层防火墙(代理层网关):不管你源端口或者目标端口,源地址或者目标地址是什么,都将对你所有的东西进行检查。七层防火墙更加安全,但效率低。
所以市面上通常的防火墙方案,都是两者结合的。而又由于我们都需要从防火墙所控制的这个口来访问,所以防火墙的工作效率就成了用户能够访问数据多少的一个最重要的控制,配置的不好甚至有可能成为流量的瓶颈。
NetFilter规定的五个规则链,任何一个数据包,只要经过本机,必将经过这五个链中的其中一个链:
1.PREROUTING (路由前)
2.INPUT(数据包流入口)
3.FORWARD (转发管卡)
4.OUTPUT(数据包出口)
5.POSTROUTING(路由后)
防火墙策略一般分为两种:
通策略:默认门是关着的,必须要定义谁能进。
堵策略:大门是洞开的,但是你必须有身份认证,否则不能进。
查看防火墙: iptables -vnL |grep ":80"
无返回内容,则说明该端口被防火墙限制
查看端口: netstat -tunlp |grep 65001
增加规则: iptables –A …
重启iptables:
service iptables save && service iptables restart
通过下面的命令可以开启允许对外访问的网络端口:
/sbin/iptables -I INPUT -p tcp --dport 8011 -jACCEPT #开启8011端口
查看端口是否已经开放
/etc/init.d/iptables status
规则配置:
iptables –t tabletype <action direction><packet pattern> -j <what to do>
tabletype:
filter:设置过滤包规则(默认值)
nat:配置网络地址转换
mangle:更改包标题
<action direction>:
-A(append):在链结尾增加一条规则
-D(delete):从链中删除一条规则,通过编号或包模式指定规则
-L(list):列出链中当前配置的规则
-F(flush):刷新当前iptables链中的所有规则
-A/-D要指定方向:
INPUT:依据链中的规则检查所有流入的包
OUTPUT: 依据链中的规则检查所有流出的包
FORWARD: 依据链中的规则检查要发送到其它计算机的所有包
<packet pattern>包模式,举例
-s ip_address:指定源ip地址检查所有包
-d ip_address: 指定目的ip地址检查所有包
-p tcp/udp/icmp:指定协议
-dport 80:指定目的端口
<what to do>如何处理包
DROP:丢包,不向请求的计算机发送消息
REJECT:丢包,向请求的计算机发送一条错误消息
ACCEPT:允许包继续传输
iptables –L #查看当前配置
#增加规则,允许输入tcp协议、目标端口为22的数据包通过
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#增加规则,允许tcp协议、源端口为22的输出数据包通过
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
#增加规则,拒绝所有来自192.168.75.0子网的通信
iptables –A INPUT –s 192.168.75.0/24 –j REJECT
#增加规则,禁止指定ip对该网络进行ping命令
iptables –A INPUT –s 192.168.25.100 –p icmp –j DROP
#增加规则,除了指定ip之外的网络,拒绝所有tcp连接的输入数据包
iptables –A INPUT –s !192.168.1.0/24 –p tcp -j DROP
#删除规则
iptables –D INPUT –s 192.168.25.200 –p icmp –j DROP
#停止转发包
iptables –A FORWARD -j DROP