一、 iptables命令
- 启用停止防火墙:service iptables start/stop/restart
- 列出防火墙相关规则:iptables [-t tables] [-L] [-nv] [--line-numbers]
-t :后面接 table ,例如 nat 或 filter ,若省略此项目,则使用默认的 filter
-L :列出目前的 table 的规则
-n :不进行 IP 与 HOSTNAME 的反查,显示讯息的速度会快很多!
-v :列出更多的信息,包括通过该规则的封包总位数、相关的网络接口等
--line-numbers:是否显示行数
实例解释:
- Chain INPUT (policy ACCEPT):policy ACCEPT代表这条chain链默认是放行
- target:代表进行的动作, ACCEPT 是放行,而 REJECT 则是拒绝,此外,尚有 DROP (丢弃) 的项目!
- prot:代表使用的封包协议,主要有 tcp, udp 及 icmp 三种封包格式;
- opt:额外的选项说明
- source :代表此规则是针对哪个『来源 IP』进行限制?
- destination :代表此规则是针对哪个『目标 IP』进行限制?
想要查看详细的规则定义,参考命令:iptables-save
- 查看规则的详细定义:iptables-save [-t table],此命令内容跟防火墙配置文件/etc/sysconfig/iptables类似
-t :可以仅针对某些表格来输出,例如仅针对 nat 或 filter 等等,默认为filter表
实例解释,查看filter表即可:
- *filter:星号开头的指的是表格,这里为 filter
- :INPUT ACCEPT [0:0]:冒号开头的指的是链,三条内建的链,三条内建链的政策都是 ACCEPT 啰!
- -A INPUT -p icmp -j ACCEPT:开启ping功能
- -A INPUT -i lo -j ACCEPT:本机任何端口都开放,-i lo指的就是由lo适配卡进来的封包!
- -A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT:开启ssh功能
- 删除防火墙所有规则:iptables [-t tables] [-FXZ]
-F :清除所有的已订定的规则
-X :杀掉所有使用者 "自定义" 的 chain (应该说的是 tables )啰
-Z :将所有的 chain 的计数与流量统计都归零
由于这三个指令会将本机防火墙的所有规则都清除,但却不会改变预设政策 (policy) , 所以如果你不是在本机下达这三行指令时,很可能你会被自己挡在家门外 (若 INPUT 设定为 DROP 时),所以一定要小心! - 定义chain链的默认规则:iptables [-t nat] -P [INPUT,OUTPUT,FORWARD] [ACCEPT,DROP]
-P:定义政策( Policy )。注意,这个 P 为大写啊!
ACCEPT:该封包可接受
DROP:该封包直接丢弃,不会让 client 端知道为何被丢弃。 - 配置具体的防火墙规则:iptables [-AI 链名] [-io 网络接口] [-p 协议] [-s 来源IP/网域] [-d 目标IP/网域] -j [ACCEPT|DROP|REJECT|LOG]
-AI 链名:针对某的链进行规则的 "插入" 或 "累加"
-A:新增加一条规则,该规则增加在原本规则的最后面。例如原本已经有四条规则,使用 -A 就可以加上第五条规则!
-I:插入一条规则。如果没有指定此规则的顺序,默认是插入变成第一条规则。例如原本有四条规则,使用 -I 则该规则变成第一条,而原本四条变成 2~5 号
链:有 INPUT, OUTPUT, FORWARD 等,此链名称又与 -io 有关,请看底下。
-io 网络接口:设定封包进出的接口规范
-i:封包所进入的那个网络接口,例如 eth0, lo 等接口。需与 INPUT 链配合;
-o:封包所传出的那个网络接口,需与 OUTPUT 链配合;
-p 协定:设定此规则适用于哪种封包格式主要的封包格式有: tcp, udp, icmp 及 all 。
-s 来源 IP/网域:设定此规则之封包的来源项目,可指定单纯的 IP 或包括网域,例如:IP:192.168.0.100,网域:192.168.0.0/24, 192.168.0.0/255.255.255.0 均可。若规范为"不许"时,则加上 ! 即可,例如:-s ! 192.168.100.0/24 表示不许 192.168.100.0/24 之封包来源;
-d 目标 IP/网域:同 -s ,只不过这里指的是目标的 IP 或网域。
-j :后面接动作,主要的动作有接受(ACCEPT)、丢弃(DROP)、拒绝(REJECT)及记录(LOG)
参考鸟哥的linux:规则 防火墙 iptables input accept
二、配置防护墙步骤
防火墙配置,除了使用命令配置外,还可以直接去配置/etc/sysconfig/iptables文件,但是修改文件时,要严格按照格式来,不能有多于的空格。使用命令配置防火墙如下:
#设置防火墙的默认规则为accept,防止第一步就把自己挡在外面
iptables -t filter -P INPUT ACCEPT
iptables -t filter -P OUTPUT ACCEPT
iptables -t filter -P FORWARD ACCEPT
#删除所有防护墙规则
iptables -t filter -F
iptables -t filter -X
iptables -t filter -Z
#已经建立连接的连接,不在验证
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#开放ping功能
iptables -A INPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
#开放本机对本机的访问
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
#开放22端口,用于ssh
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
#开放80端口,用于web访问
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
#开放某个ip的所有访问权限,只能配ip不能陪hostname
iptables -A INPUT -s 192.168.1.10 -j ACCEPT
iptables -A OUTPUT -d 192.168.1.10 -j ACCEPT
#允许DNS服务端口
iptables -A INPUT -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --sport 53 -j ACCEPT
iptables -A INPUT -p udp -m udp --sport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --sport 53 -j ACCEPT
iptables -A OUTPUT -p udp -m udp --sport 53 -j ACCEPT
#设置防火墙的默认规则为DROP
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
iptables -t filter -P FORWARD DROP
#执行完成后,最后保存配置
service iptables save