一:安装iptables
安装命令:
iptables:yum install -y iptables-services
二:启动iptables
启动命令:
systemctl start iptables
三:查看当前iptables状态
运行iptables启动命令后,可以查看下iptables是否启动成功,确保iptables启动成功
查看状态:systemctl status iptables
如果提示绿色的“active (exited)”,则iptables已经启动成功。
四:查看iptables默认规则
查看默认规则命令:
iptables -L
安装iptables后,可以查看下当前系统下的iptables规则,熟悉一下。
五:备份iptables规则
安全起见,可以先备份下当前的iptables规则,然后再修改/添加规则
备份命令:cp -a /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
六:添加或修改规则(放行或禁用端口)
放行80号端口为例:
1、添加以下规则可以放行80端口命令:
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT
2、查看规则是否生效,命令:
iptables -L
3、生效后保存添加的规则,命令:
iptables-save > /etc/sysconfig/iptables
4、设置iptables开启启动,命令:
systemctl enable iptables.service
七、iptables命令选项
iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]
7.1、命令选项
-A 在指定链的末尾添加(append)一条新的规则
-D 删除(delete)指定链中的某一条规则,可以按规则序号和内容删除
-I 在指定链中插入(insert)一条新的规则,默认在第一行添加
-R 修改、替换(replace)指定链中的某一条规则,可以按规则序号和内容替换
-L 列出(list)指定链中所有的规则进行查看
-E 重命名用户定义的链,不改变链本身
-F 清空(flush)
-N 新建(new-chain)一条用户自己定义的规则链
-X 删除指定表中用户自定义的规则链(delete-chain)
-P 设置指定链的默认策略(policy)
-Z 将所有表的所有链的字节和数据包计数器清零
-n 使用数字形式(numeric)显示输出结果
-v 查看规则表详细信息(verbose)的信息
-V 查看版本(version)
-h 获取帮助(help)
7.2、常用指令说明
-A
:指定链名
-p
:指定协议类型
-d
:指定目标地址
–dport
:指定目标端口(destination port 目的端口)
–sport
:指定源端口(source port 源端口)
-j
:指定动作类型
-m
:指定要使用的匹配项,即测试特定属性的扩展模块
7.3、目标动作
防火墙处理数据包的四种方式
ACCEPT
允许数据包通过
DROP
直接丢弃数据包,不给任何回应信息
REJECT
拒绝数据包通过,必要时会给数据发送端一个响应的信息。
LOG
在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则
7.4 创建iptables文件
初始操作系统没有iptables文件,可以通过vim /etc/sysconfig/iptables
的方式创建iptables
文件,然后调用重启指令使其生效。 指令和相关配置文件:
- 启动指令:
service iptables start
- 重启指令:
service iptables restart
- 关闭指令:
service iptables stop
不想通过修改文件,可以直接打命令;例如我给SSH加放行的语句: - 添加input记录:
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
- 添加output记录:
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
- 最后注意需要再执行一下
/etc/init.d/iptables save
这样这两条语句就保存到刚才那个/etc/sysconfig/iptables
文件中了;
7.5 具体开放端口
以下是centos 6.9原始的iptables文件内容:
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
#针对某IP进行单独开放端口配置-开放mysql端口,应该如下配置:
iptables -A INPUT -s 192.168.2.6 -p tcp -m tcp --dport 3306 -j ACCEPT
iptables -A OUTPUT -s 192.168.2.6 -p tcp -m tcp --sport 3306 -j ACCEPT
#彻底禁止某IP访问:屏蔽单个IP的命令
iptables -I INPUT -s 123.45.6.7 -j DROP
#封整个段即从123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP
#封IP段即从123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP
#封IP段即从123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP
指令I是insert指令 但是该指令会insert在正确位置并不像A指令看你自己的排序位置,因此用屏蔽因为必须在一开始就要加载屏蔽IP,所以必须使用I命令加载,然后注意执行/etc/rc.d/init.d/iptables save进行保存后重启服务即可;