iptables防火墙介绍与配置
防火墙介绍
防火墙分类
- 数据包过滤 分析ip和端口、MAC是否符合规则
- 代理服务器
防火墙限制
- 防火墙不能有效防止病毒和木马
- 防火墙一般不设定对内部访问规则,对内网攻击防护无效
防火墙配置原则
- 拒绝所有,逐个允许(针对端口)
- 允许所有,逐个拒绝(针对ip)
Linux常见防火墙
- iptables
- ipchains
iptables介绍
iptables结构
表-链-规则 在表中保存规则链,在链中放入规则。
iptables默认表
- filter表 数据过滤表
- nat表 网络地址转化表
- mangle表 特殊数包据标记
iptables链
- PREROUTING
- INPUT(访问自己)
- FORWARD(访问其它)
- OUTPUT
- POSTROUTING
iptables配置使用
1.规则查看和清楚
iptables [-t 表名] [选项] -n
选项: -L 查看 -F 清楚所有规则 -X 清楚自定义链 -Z 清楚所有链统计
-n 以端口和ip显示
示例: 查看nat表中规则:iptables -t nat -L
执行以下三条清空所有规则: iptables -F
iptables -X
iptables -Z
2.定义默认策略
iptables -t 表名 -P 链名 ACCEPT|DROP
-P 定义默认策略
示例: 在INPUT链上拒绝所有:iptables -t filter -P INPUT DROP
注意:不要把自己踢出服务器,先设置允许策略,最后设定此策略(规则先配先生效)
3.ip和网卡接口设置
iptables [-AI 链] [-io 网卡接口] [-p 协议] [-s 源IP] [-d 目标IP] -j 动作
参数说明: -A 追加链规则 -I INPUT 2 将此规则插入到INPUT链,并作为第二条规则 -D 链 条数 删除指定链的指定条数规则,如iptables -D INPUT 2
-i eth0 指定进入接口(要在INPUT链上定义) -o eth0 指定传出接口(要在OUTPUT链上定义) -p 协议 tcp,udp,icmp,all -j 动作 ACCEPY,DROP
示例: 允许本机回环网卡通信:iptables -A INPUT -i lo -j ACCEPT
允许254进入eth0:iptables -A INPUT -i eth0 -s 192.168.1.254 -j ACCEPT
允许网段访问:iptables -A INPUT -i eth0 -s 192.168.1.0/24 -j DROP
4.设定端口访问
iptables -A INPUT -i eth0 -p all -s 源IP --sport 源端口 -d 目标IP --dport 目标端口 -j 动作
注意:端口限制协议不能用all,必须指定协议
示例: iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 22 -j DROP
iptables -A INPUT -i eth0 -p tcp -s 192.168.1.0/24 --dport 137:139 -j DROP
5.模块调用
-
加载iptables功能模块
-m 模块名称 模块选项
-m state --status ESTABLISTED,RELATED 如:iptables -A INPUT -i eth0 -m state --state ESTABLISHED,RELATED -i ACCEPT
state 状态模块常见状态:ESTABLISHED联机成功的状态,RELATED返回包的状态 -
使用mac模块限制mac地址访问
-m mac --mac-source mac地址
如:iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -j DROP
-
使用string模块匹配数据包中的字符串(大小写都要限制)
-m string --string 字符串
如:通过dns拒绝qq登陆iptables -A FORWARD -p udp --dport 53 -m string --string "tencent" --algo kmp -j DROP
--algo 选择模式匹配策略,支持KMP和BM两种字符串算法,任选一个即可。
6.简易防火墙实现
iptables -F
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
新增允许策略: 在第三条的位置插入策略:iptables -I INPUT 3 -p tcp --dport 8080 -j ACCEPT
防火墙重启所设置的策略都会消失。 为了防止重启服务策略丢失可执行:
方法一:service iptables save
方法二:防火墙脚本vi /root/iptables.rule
,然后将其加入开机启动 方法三:centos7中的iptables-services配置文件
iptables服务启动与关闭
-
Linux防火墙(iptables)重启系统生效
开启: chkconfig iptables on
关闭: chkconfig iptables off
-
Linux防火墙(iptables) 即时生效,重启后失效
开启: service iptables start
关闭: service iptables stop
centos 7中安装使用iptables-services 1. 关闭firewall: systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
2. 安装iptables防火墙 yum install iptables-services #安装
vi /etc/sysconfig/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 -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动