防火墙
iptables
firewalld
过滤数据包
默认策略:拒绝所有数据包从入口方向进入
内核态
netfilter
用户态
iptables
firewalld
centos7:
yum -y install iptables iptables-services iptables-devel
清空防火墙规则
iptables -F
清空规则计数
iptables -Z
删除自定义链:不能有关联 不能有规则
iptables -X 自定义链名
语法
iptables -t 表名 动作 链名 匹配条件 -j 目标动作
(默认不指定表名的情况下是filter表)
四表五链
表名:
raw 数据包跟踪
mangle 标记数据包
nat 网络地址转换
filter 数据包过滤
读表顺序:按上面的顺序从上到下
链名:
PREROUTING 路由之前
INPUT 数据包流入
FORWARD 数据包经过
OUTPUT 数据包流出
POSTROUTING 路由之后
raw:
PREROUTING 路由之前
INPUT 数据包流出
mangle:
PREROUTING 路由之前
INPUT 数据包流入
FORWARD 数据包经过
OUTPUT 数据包流出
POSTROUTING 路由之后
filter:
INPUT 数据包流入
FORWARD 数据包经过
OUTPUT 数据包流出
实例:
-A 追加规则 (在最后加入)
iptables -t filter -A INPUT -p icmp -j REJECT
-L 列出规则
-n 以数字的形式显示协议和主机
--line 显示规则行号 --line-numbers的另外一种写法
-t 可以跟不同的表
-v verbose 重点是数据包的统计(计数)信息
#iptables -nL --line-numbers -t nat -v
#iptables -nL INPUT 1 -v
-R 修改规则
#iptables -R INPUT 1 -p tcp -j REJECT //链后面必须跟上数字,指定修改第几个规则
-D 删除规则
#iptables -D INPUT 1 //链后面必须跟上数字,指定删除第几个规则
-I 插入规则
# iptables -I INPUT -p tcp --dport 23 -j DROP //--dport指定目标端口
# iptables -I INPUT 2 -p tcp --dport 23 -j DROP
创建自定义链
iptables -N 链名 (链名自定义)
#iptables -N wing
修改自定义链名称
iptables -E 旧链名 新链名
iptables -E wing WING
添加规则到自定义链
iptables -A 链名 动作
#iptables -A WING -p icmp -j DROP //DROP同REJECT
关联自定义链
iptables -A 自带链名 -j 自定义链名
#iptables -A INPUT -j WING
删除自定义链:不能有关联和规则 //如果有关联和规则,先清空
企业环境:
我们内网 互联网
高安全区域 防火墙 低安全区域
进来的数据包默认全部拒绝,只放行你想接收的包
修改默认策略:只能写DROP或者ACCEPT
iptables -P 链名 策略
#iptables -P INPUT DROP
查看规则:显示形式与-L不同
#iptables -S INPUT
#iptables -A INPUT -p tcp --dport 80 -j ACCEPT
#iptables -A INPUT -p tcp --sport 80 -j ACCEPT
#iptables -A INPUT -p tcp --dport 22 -j ACCEPT
匹配条件
协议:
-p tcp
-p udp
-p icmp
端口:必须和协议一起写
--dport 目标端口
--sport 源端口
#iptables -A INPUT -p tcp --dport 80 -j DROP
端口范围匹配:
--sport 源端口1:源端口2
--dport 目标端口1:目标端口2
多端口匹配:
-m multiport --dports 23,80,3306
-m multiport --sports 23,80,3306
#iptables -A INPUT -p tcp -m multiport --dports 23,80,3306 -j DROP
IP
-s 源ip1,源ip2,...
-d 目标ip
ip地址范围:
-m iprange --src-range 192.168.1.8-192.168.1.29
-m iprange --dst-range 192.168.1.8-192.168.1.29
//范围自己指定
#iptables -A INPUT -p tcp --dport 80 -m iprange --src-range 192.168.1.8-192.168.1.29 -j DROP
mac
#iptables -A INPUT -p tcp -m mac --mac-source 00:0c:29:22:eb:ff -j DROP
测试forward
1.8------------->1.2--路由--3.2-------->3.8
echo 1 > /proc/sys/net/ipv4/ip_forward //开启路由转发
目标动作:
DROP
REJECT
ACCEPT
LOG
网关10.0.1.3 10.0.2.2
10.0.1.2 ---->10.0.1.3/10.0.2.2------->10.0.2.3
SNAT
修改源ip地址
#iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to 202.106.18.8
DNAT
修改目标ip地址
#iptables -t nat -A PREROUTING -d 202.168.18.8 -j DNAT to 192.168.1.8
注:
因为外网ip可能是随机分配,所有无法固定外网ip,此时我们应该修改源ip为:
# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
注意:私有IP和共有IP不能直接通信