首页 > 代码库 > Iptables用法
Iptables用法
[root@localhost ~]# iptables -F #清除默认表filter中所有链的规则 [root@localhost ~]# iptables -X #清除自定义链的规则 [root@localhost ~]# iptables -L -nv --line-numbers #编号显示链规则 [root@localhost ~]# iptables -N #新建一条自定义的链 [root@localhost ~]# iptables -A INPUT -i eth0 #指定包进入的本地网络接口 [root@localhost ~]# iptables -t filter -P INPUT DROP #设置链规则拒绝 [root@localhost ~]# service iptables save #保存iptables配置 [root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT #插入链规则开放22端口 [root@localhost ~]# iptables -A INPUT -p tcp -m multiport --sport 22,53,80,110,443 -j ACCEPT #多端口匹配,最多指定15个端口 [root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.3.100 -p tcp --dport 8080 -j REDIRECT --to-port 80 #本地端口转发 [root@localhost ~]# iptables -t nat -A PREROUTING -d 110.110.110.110/28 -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.1:80 #目标NAT [root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j LOG --log-level 5 --log-prefix "SSH iptables" #设置日志 [root@localhost ~]# iptables -A INPUT -d 192.168.3.100/32 -p tcp -m tcp --dport 22 -m state --state NEW,ESTABLISHED -m time --timestart 11:50:00 --timestop 12:10:00 --weekdays Mon,Tue,Wed,Thu,Fri -j DROP #基于时间和状态控制 [root@localhost ~]# iptables -R INPUT 2 -p tcp --dport 25 -j ACCEPT #替换原链规则2
Iptables-m
Options[-m]
-mstate--stateNEW,RELATED,ESTABLISHED,INVALID指定要匹配包的状态
-mstate--owner--uid-owner500--gid-owner 0--pid-owner 78--sid-owner 100 按生成包的用户ID、组ID、PID和SID来匹配外出的包,只能用于OUTPUT链
-m
这些状态可以一起使用,以便匹配数据包。这可以使我们的防火墙非常强壮和有效。以前,我们经常打开1024以上的所有端口来放行应答的数据。现在,有了状态机制,就不需再这样了。因为我们可以只开放那 些有应答数据的端口,其他的都可以关闭。这样就安全多了
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这个状态的任何东西。 |