Linux包过滤防火墙
RHEL7默认使用firewalld作为防火墙,但firewalld底层还是调用包过滤防火墙iptables
]# systemctl stop firewalld.service
]# which iptables
]# systemctl disable firewalld.service
]# yum -y install iptables-services.x86_64
]# systemctl start iptables.service
包过滤匹配流程
----规则链内的匹配顺序,匹配即停止(LOG除外)
----若无任何匹配,则按该链的默认策略处理
1.2 iptables 用法解析
Iptables基本用法
管理程序位置:/sbin/iptables
指令组成: iptables 【-t 表名】 选项 【链名】【条件】【-j 目标操作】
列: 主机 192.168.4.51
]# iptables -t filter -I INPUT -p icmp -j REJECT //主机修改规则拒绝其他人访问
]# ping 192.168.4.51 //客户端尝试ping51失败
注意事项/整体规律
—可以不指定表,默认为filter表
—可以不指定链,默认为对应表的所有链
—如果没有匹配的规则,则使用防火墙默认规则
–选项/链名/目标操作作用大写字母,其余都小写
################################################
基本的目标操作
ACCEPT 允许通过/放行
DROP 直接丢弃,必要时会给出提示
REJECT 拒绝通过,必要时会给出提示
LOG 记录日志,然后传给下一条规则 (匹配即停止,log列外)
]# iptables -L
]# iptables -t filter -L //查看filter表规则
]# iptables -t filter -nL
]# iptables -t filter -nL --line-number
]# iptables -t mangle -nL --line-number
]# iptables -t nat -nL --line-number
]# iptables -t raw -nL --line-number
]# iptables -t raw -nL OUTPUT --line-number
]# iptables -t filter -nL OUTPUT --line-number
]# iptables -t nat -nL OUTPUT --line-number
]# iptables -t filter -nL INPUT --line-numbers
]# iptables -t filter -nL INPUT --line-numbers
]# iptables -t filter -F
]# iptables -t filter -L
]# iptables -t nat -L
]# iptables -t nat -F
]# iptables -t mangle -F
]# iptables -t mangle -L
常用的管理选项:*
添加规则 -A 在链的末尾追加一条规则
-I 在链的开头(或指定序号)插入一条规则
-L 列出所有的规则条目
查看规则 -n 以数字形式显示地址,端口等信息
–line-numbers 查看规则时,显示规则的序号
删除规则 -D 删除链内指定序号(或内容)的一条记录
-F 清空所有的规则
默认策略 -P 为指定的链设置默认规则
管理基本規則示列 :
添加新的規則 -A 追加 -I 插入
添加新的規則 -A 追加 -I 插入 -p 协议名或协议号
]# iptables -t filter -A INPUT -p tcp -j ACCEPT
]# iptables -I INPUT -p udp -j ACCEPT
]# iptables -I INPUT 2 -p icmp -j ACCEPT
查看规则列表 -L查看
]# iptables -nL //显示所有规则
]# iptables -nL INPUT
]# iptables -nL INPUT --line-numbers
删除,清空规则 -D删除, -F清空
]# iptables -D INPUT 3
]# iptables -nL INPUT
二 Filter表控制 主机防火墙(使用防火墙服务保护本机)
三.匹配条件*
3.1基本的匹配条件
-p --drop --sport -i -o -s -d
3.2扩展匹配
四.Nat表典型应用
在主机51A上操作
]# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
]# iptables -t filter -P INPUT DROP
]# iptables -t filter -I INPUT -s 192.168.4.50 -p tcp --dport 22 -j DROP
]# iptables -t filter -nL //查看設置好的所有規則
]# iptables-save > /etc/sysconfig/iptables //永久保存防火墙规则
安装提供网站服务的httpd
]# systemctl stop iptables
]# rpm -q httpd
]#yum -y install httpd
]# echo "web51" > /var/www/html/test.html
]#systemctl restart httpd
]#systemctl start httpd
]# netstat -nutlp | grep httpd
]# systemctl start iptables
]# iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT
]# curl http://192.168.4.57/test.html
web51
允许51本机ping其他主机,禁止其他主机ping本机
]# iptables -t filter -A INPUT -p imp --icmp-type echo-reply -j ACCEPT
]# iptables-save > /etc/sysconfig/iptables
扩展匹配条件
]# iptables -t filter -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
]# iptables -t filter -nL INPUT --line-numbers
]# iptables -t filter -D INPUT 3
]# iptables -t filter -D INPUT 2
]# iptables -t filter -nL INPUT --line-numbers
]# iptables -t filter -A INPUT -m iprange --src-range 192.168.4.250-192.168.4.254 -p icmp --icmp-type echo-request -j ACCEPT
]# iptables -t filter -nL --line-numbers
]# iptables -t filter -I INPUT 4 -p icmp --icmp-type echo-request -m mac --mac-source \
52:54:00:37:78:11 -j DROP
]# iptables -t filter -nL --line-numbers
C主机 模拟私有网络的pc
Eth1 192.168.2.54
c ~]# systemctl stop NetworkManager
c ~]# route add default gw 192.168.2.58 //添加命令
c ~]# route del default gw 192.168.2.52 //删除命令
c ~]# route -n 查看命令
b主机 防火墙服务器
Eth0 192.168.4.52 模拟公网地址
Eth1 192.168.2.52 模拟私网地址
运行
开启内核的路由转发功能 :
]# echo 1 > /proc/sys/net/ipv4/ip_forward
]# vim /etc/rc.local
echo 1 > /proc/sys/net/ipv4/ip_forward
:wq
]# chmod +x /etc/rc.local
或
]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
:wq
]# sysctl -p
A 模拟公网的网站服务器
eth0 192.168.4.51
]# systemctl stop iptables
]# echo abc > /var/www/html/test2.html
B 在防火墙服务器上写规则 ,具体如下
]# iptables -t nat -A POSTROUTING \
-s 192.168.2.0/24 -p tcp --dport 80 -j SNAT --to-source 192.168.4.52
或
]#iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
]# iptables-save > /etc/sysconfig/iptables
]# iptables -t nat -nL POSTROUTING
C 在内网机器访问 A 主机的网站服务
]# curl http://192.168.4.51/test.html
A 主机查看日志
]# tail -f /etc/httpd/logs/access_log
192.168.4.52 - - [31/May/2019:10:03:56 +0800] "GET /test2.html HTTP/1.1" 200 4 "-" "curl/7.29.0"
运行防火墙服务
]#systemctl stop firewalld
]#systemctl disable firewalld
]#yum -y install iptables-services
]#systemctl status iptables
]#systemctl start iptables