本文只写iptables的使用格式方法;
iptables的使用格式;
iptables -L -n -v –line-numbers 显示规则序列号,如果需要删除规则的话,只需删除编号即可
iptables -t filter -L -n 显示当前默认规则链
[root@www ~]# iptables -t filter -L -n
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
iptables[-t table ]-N chain 创建一条自定义规则链
示例;iptables -N test
说明:[-t table ] 是指表的意思,这个在创建新的规则的时候可以不用指,如果指了就表示创建的新规则链只能在 table这张表里的某些规则被引用或跳转
iptables [-t table ] -X 删除自定义的规则链
示例;iptables -X test
iptables [ -t table ] -E 旧自定义链名 新定定义链名
示例;iptables -E test newtest
iptables [ -t table ] -P chain target 为链指定默认策略,指定默认规则
示例;把系统当前默认链 Chain FORWARD (policy ACCEPT) 修改为DROP
iptables -P FORWARD DROP
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options…]
[root@www ~]# iptables -t filter -L -n -v
Chain INPUT (policy ACCEPT 774 packets, 105K bytes) 进站默认允许
pkts bytes target prot opt in out source destination
Chain FORWARD (policy DROP 0 packets, 0 bytes) 转发 默认拒绝
pkts bytes target prot opt in out source destination
Chain OUTPUT (policy ACCEPT 65 packets, 5404 bytes) 出站默认允许
pkts bytes target prot opt in out source destination
-F: 清空链中的规则
规则有编号,在链中自上而下,从1开始;
-L: list,列出表中的所有规则;
-n: 数字格式显示IP和Port
-v: 以详细格式显示
[root@www ~]#iptables -L -n -a –line-numbers
pkts bytes target prot opt in out source destination
pkts: packets, 被本规则所匹配到的报文的个数;
bytes: 被本规则所匹配到的所有报文的大小之和,会执行单位换算;
target: 目标,即处理机制;
prot: 协议,一般为{TCP|UDP|ICMP};
opt: 可选项
in: 数据包的流入接口;
out: 数据包的流出接口;
source: 源地址;
destination: 目标地址;
ptables [-t table] {-A|-D} chain rule-specification
-A: append, 附加一条规则
rule-specification
匹配条件 -j 处理机制
匹配条件:实例演示
注意:iptables是从上往依次匹配的,如果事先打开了某个端口服务,而后又想关闭的话,需要把写的关闭规则写到开启的前面
-s:匹配原地址,可以IP,也可以网络地址;可以使用!操作符取反, ! 172.16.0.0/16; -s 相当于 –src, 或 –source
d : 匹配目标地址
示例;iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.34.30 -j ACCEPT
iptables -t filter -A OUTPUT -s 172.16.34.30 -d 172.16.0.0/16 -j ACCEPT
-p : 匹配协议,通常只使用{TCP|UDP|ICMP}三者之一;
iptables -A INPUT -i eth1 -d 172.16.34.30 -p icmp -j REJECT
-i :数据报文流入的接口;通常只用于INPUT、FORWARD和PREROUTING
-o:流出的接口;通常只用于OUTPUT、FORWARD和POSTROUTING
iptables -A INPUT -i eth1 -d 172.16.100.7 -j ACCEPT
iptables -A OUTPUT -o eth1 -s 172.16.34.30 -j ACCEPT
扩展匹配;隐含扩展;使用-p{tcp|udp|icmp}指定某特定协议后,自动能够对协议进行的扩展;
-p tcp
–dport ;匹配的目标端口,可以是连续的多个端口;
–sport; 匹配的源端口,也要是是连续的多个端口;
示例;放行来自于172.16.0.0/16网络的主机对本机ssh服务的请求;下面这个示例是一对出现的;
172.16.34.30允许所有来自172.16.0.0/16网段发送ssh服务的请求
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.34.30 -p tcp –dport 22 -j ACCEPT
172.16.34.30主机的ssh服务,只允许响应给172.16.0.0/16这个网段
iptables -A OUPOUT -s 172.16.34.30 -d 172.16.0.0/16 -p tcp –sport 22 -j ACCEPT
设置默认策略,拒绝所有未知的服务,仅放行规则所匹配的服务
iptables -P INPUT DROP
iptables -P OUTPUT DROP
输入这两条件命令我的主机并没有中断,是因为上面事先写好了两条允许本机的ssh服务规则,所没有中断,但是本机的其它服务,别的主机是访问不了的。
放行本机的80端口给172.16.0.0/16的所有地址访问 (这时明确了所有地址,因此在写规则时源地址省略不写,直接写上目标地址即可)
iptables -A INPUT -d 172.16.34.30 -p tcp –dport 80 -j ACCEPT只写这一条的话,访问的报文可以进来,但是无法响应给客户,因此还有写一条响兴给客户端主机的规则
iptables -A OUTPUT -s 172.16.34.30 -p tcp –sport 80 -j ACCEPT此时的源地址是172.16.34.30是向客户端主机响应
-p icmp
–icmp-type
8: ping请求 0:ping响应
例子:放行ping其它主机
iptables -A OUTPUT -s 172.16.100.7 -p icmp –icmp-type 8 -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p icmp –icmp-type 0 -j ACCEPT
放行其它主机ping本机
iptables -A INPUT -d 172.16.100.1 -P icmp –icmp-type 8 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p icmp –icmp-type 0 -j ACCEPT
-p udp
–dport
–sport
放行本机的tftp服务:(还有两条tcp的没有写)
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p udp –dport 69 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p udp –sport 69 -j ACCEPT
放行本机dns服务:(DNS总共有八条规则,还有tcp的四条没有写)
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -p udp –dport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -d 172.16.0.0/16 -p udp –sport 53 -j ACCEPT
iptables -A OUTPUT -s 172.16.100.7 -p udp –dport 53 -j ACCEPT
iptables -A INPUT -d 172.16.100.7 -p udp –sport 53 -j ACCEPT
显示扩展
规则命令;
iptables -D INPUT 2 表示删除input链上的第二条规则 记住如果删除了第二条而原来的的第三条会自动变成第二条
iptables -I 插入规则
iptables -I INPUT 2 -i lo -j ACCEPT 表示将规则插入到第二行
iptables -R INPUT 1 -s 172.16.0.0/16 -d 172.16.34.30 -i eth0 -p tcp –dport 22 -j ACCEPT 完整替换第一条规则
明确规定172.16网段连接目标地址的22号服务必须从eth0网卡进来
iptables -S INPUT 显示指定的链的规则
显示扩展;必须明确指定的扩展模块;
-m 扩展模块名称 –专用选项1 –专用选项2
multiport;多端口匹配,一次指定多个(15个以内)离散端口
–source-ports, 源端口
–destinatil-ports 目标端口
–ports
示例;开放本机的22,80两个端口;(由于这里一次性开放多个端口所有这里得使用-m选项)
iptables -I INPUT -d 172.16.34.30 -p tcp -m multiport –dports 22,80 -j ACCEPT 这里只是input让用户可能发送请求而目标主机 没有得到响应,所有写上一条output出站规则,已此来响应给客户端口。(写上这两条规则前面写的那两条单独写的规则则可以删除(这条规则用了 “-I” 选项插入规则 ),这样也达到了规则优化的效果)
iptables -I OUTPUT -s 172.16.34.30 -p tcp -m multiport –sports 22,80 -j ACCEPT
iptables -A INPUT -i eth0 -m multiport -p tcp –dports 53,113,135,137,139,445 -j DROP 本机通过这个eth0网卡进来的端口都被拒绝
iptables -A INPUT -i eth0 -m multiport -p udp –dports 53,113,135,137,139,445 -j DROP
iptables -A INPUT -i eth0 -p udp –dport 1026 -j DROPiptables -A INPUT -i eth0 -m multiport -p tcp –dports 3389,4899 -j DROP
示例;允许本机的telnet服务给指定的主机ip
iptables -A INPUT -d 172.16.34.30 -p tcp –dport 23 -m iprange –src-range 172.16.34.10-172.16.34.20 -j ACCEPT
iptables -A OUTPUT -s 172.16.34.30 -p tcp –sport 23 -m iprange –dst-range 172.16.34.10-172.16.34.20 -j ACCEPT
time;匹配指定时间范围 结束时间大于起始时间 结束日期于于起始日期
–datestart 起始日期 YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–datestop 结束日期 YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
–timestart hh:mm[:ss] 起始时间
–timestop hh:mm[:ss] 结束时间
–weekdays day [Mon, Tue, Wed, Thu, Fri, Sat, Sun ]也可以是1-7 以周为日期格式做规则
示例;限制本机901端口只允许在工作时间内(周一至周五)的08点到18点才可访问;
iptables -A INPUT -d 172.16.34.30 -p tcp –dport 901 -m time –weekdays Mon,Tue,Wed,Thu,Fri –timestart 08:00:00 -timestop 18:00:00 -j ACCEPT
由于做了限制客户的进站访问规则,因此客户只有规定的工作日才能访问,因此下面这条规则就可以简写。
(服务器可以随时放行用户的请求,但是客户不是随时可以访问的。)
iptables -A OUTPUT -s 172.16.34.30 -p tcp –sport 901 -j ACCEPT
string;对字符串匹配
–algo {bm|kmp}; 字符匹配查找时使用的算法
–string “STRING”; 要查找的字符串
示例;如果客户端口访问的网页当中有规则里定义的字符串则不显示给客户
安装httpd服务,新建两个首页文件,写上不一样的内容,其中一个首页文件里的内容须有你需要匹配的字符串如“hello”.测试这个web服务的两个首页在没有写规则前都可以正常访问。对其中一个web网页做字符串匹配。
1 |
|
写完这个匹配字符串的规则后再次访问时显示是无法打开被匹配到的网页