1、下面是我的服务器/etc/sysconfig/iptables正常的配置,对每一行进行讲解
*filter
#该规则表示INPUT表默认策略是ACCEPT,Input: 就是接入本机地址的数据,说白了就是设置别人可以访问我的那些端口的链。举一个例子:本机开启了ftp服务,有一个客户端连接下载ftp资料,那么这个连接在Input链可以进行控制。
#该规则表示FORWARD表默认策略是ACCEPT,Forward:是转发链。如果你的机器处于网关地址,那么你可以代理内部网络的机器上Internet的参数就在这里设置。
#该规则表示OUTPUT表默认策略是ACCEPT,Output:就是从本机出去的数据,就是允许本机出去的端口。例如我可以在Output链设置我可以访问那些地址和那些端口。
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
#对于已经建立连接的数据,是允许访问的
-A INPUT -p icmp -j ACCEPT
#允许icmp协议的访问,主要就是ping
-A INPUT -i lo -j ACCEPT
#接受本地的所有请求
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
#允许22端口被外部访问
-A INPUT -j REJECT --reject-with icmp-host-prohibited
# 上面两条的意思是在INPUT表和FORWARD表中拒绝所有其他不符合上述任何一条规则的数据包。并且发送一条host prohibited的消息给被拒绝的主机。
COMMIT
2、iptables -A 规则链 -i 网络接口 -j 对数据的操作
-A:指定需要添加规则的规则链
-i:指定数据包流入的网络接口
-p:数据包的协议 -j:对数据包的处理。ACCEPT/DROP
-s:指定作为源地址匹配,这里不能指定主机名称,必须是IP
而且地址可以取反,加一个“!”表示除了哪个IP之外
例如:在INPUT链中添加规则,允许eth0接口中来自192.168.1.0/24的所有数据包
#iptables -A INPUT -i eht0 -s 192.168.1.0/24 -j ACCEPT
3、-m:附加模块
按包状态匹配(state)
按来源MAC 匹配(mac)
按包速率匹配(limit) 多端口匹配(multiport)
state状态:
-m state --state 状态
状态:NEW、RELATED、ESTABLISHED、INVALID
NEW:有别于tcp 的syn
ESTABLISHED:连接态
RELATED:衍生态,与conntrack 关联(FTP)
INVALID:不能被识别属于哪个连接或没有任何状态 指定要匹配包的的状态,当前有4种状态可用:INVALID,ESTABLISHED,NEW和RELATED。 INVALID意味着这个包没有已知的流或连接与之关联,也可能是它包含的数据或包头有问题。ESTABLISHED意思是包是完全有效的,而且属于一个已建立的连接,这个连接的两端都已经有数据发送。NEW表示包将要或已经开始建立一个新的连接,或者是这个包和一个还没有在两端都有数据发送的连接有关。RELATED说明包正在建立一个新的连接,这个连接是和一个已建立的连接相关的。比如,FTP data transfer,ICMP error 和一个TCP或UDP连接相关。注意NEW状态并不在试图建立新连接的TCP包里寻找SYN标记,因此它不应该不加修改地用在只有一个防火墙或在不同的防火墙之间没有启用负载平衡的地方。
4、允许21137端口被访问:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21137 -j ACCEPT
问:-m tcp代表什么?
答:你在使用 -p tcp 的时候,需要告诉内核需要载入 tcp 模块
就好比你使用 --state 参数需要载入 state 模块一个道理
只不过 netfilter 和 iptables 已经把 tcp、udp、icmp 这些模块集成进去了,所以不用单独指定,但为了严谨 iptables-save 的时候还是会显示出来
-p tcp是指按照tcp协议操作
-m tcp是指装入tcp的协议
5、通过iptables限制9889端口的访问(只允许192.168.1.201、192.168.1.202、192.168.1.203),其他ip都禁止访问
iptables -I INPUT -p tcp --dport 9889 -j DROP #对9889的所有端口的访问进行拒绝
iptables -I INPUT -s 192.168.1.201 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -s 192.168.1.202 -p tcp --dport 9889 -j ACCEPT
iptables -I INPUT -s 192.168.1.203 -p tcp --dport 9889 -j ACCEPT
参考: http://bbs.chinaunix.net/thread-1990048-1-1.html
http://sinykk.iteye.com/blog/1217094
http://sunnylocus.iteye.com/blog/327363