在计算机科学领域中,防火墙(Firewall)是一个架设在互联网与企业内网之间的信息安全系统,根据企业预定的策略来监控往来的传输。
防火墙可能是一台专属的网络设备或是运行于主机上来检查各个网络接口上的网络传输。它是目前最重要的一种网络防护设备,从专业角度来说,防火墙是位于两个(或多个)网络间,实行网络间访问或控制的一组组件集合之硬件或软件。
从物理层面讲,防火墙可以分为硬件防火墙和软件防火墙:
下面是几个必须要熟悉的名词:
防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
如果匹配成功规则,即明确表示是拒绝(DROP)还是接收(ACCEPT),数据包就不再向下匹配新的规则。
如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
防火墙的默认规则是所有规则都匹配完才会匹配的。
用于实现防火墙功能,屏蔽或准许端口 ip。
用于实现nat功能,如共享上网(内网服务器上外网)、端口映射和ip映射。
- m01 10.0.0.61 172.16.1.61
- web01 10.0.0.7 172.16.1.7
- web02 10.0.0.8 172.16.1.8
- yum install -y iptables-services
-
-
- [root@oldboy-m01 ~]# uname -r
- 3.10.0-862.el7.x86_64
- [root@oldboy-m01 ~]# yum install -y iptables-services
-
-
- [root@m01 ~]# rpm -ql iptables-services
- /etc/sysconfig/ip6tables
- /etc/sysconfig/iptables #防火墙的配置文件
- /usr/lib/systemd/system/ip6tables.service
- /usr/lib/systemd/system/iptables.service #防火墙服务配置文件(命令) systemctl start iptables
-
-
- [root@m01 ~]# rpm -ql iptables
- /usr/sbin/iptables #iptables 命令 添加/删除/查看 规则(4表伍链)
-
- /usr/sbin/iptables-save #iptables规则 输出(保存)
- /usr/sbin/iptables-restore # 恢复
-
- #防火墙相关模块 加载到内核中
- #写入到开机自启动.
- modprobe ip_tables
- modprobe iptable_filter
- modprobe iptable_nat
- modprobe ip_conntrack
- modprobe ip_conntrack_ftp
- modprobe ip_nat_ftp
- modprobe ipt_state
-
- #永久
- cat >>/etc/rc.local<<EOF
- modprobe ip_tables
- modprobe iptable_filter
- modprobe iptable_nat
- modprobe ip_conntrack
- modprobe ip_conntrack_ftp
- modprobe ip_nat_ftp
- modprobe ipt_state
- EOF
-
- [root@m01 ~]# lsmod |egrep 'filter|nat|ipt'
- nf_nat_ftp 12770 0
- nf_conntrack_ftp 18638 1 nf_nat_ftp
- iptable_nat 12875 0
- nf_nat_ipv4 14115 1 iptable_nat
- nf_nat 26787 2 nf_nat_ftp,nf_nat_ipv4
- nf_conntrack 133053 6 nf_nat_ftp,nf_nat,xt_state,nf_nat_ipv4,nf_conntrack_ftp,nf_conntrack_ipv4
- iptable_filter 12810 0
- ip_tables 27126 2 iptable_filter,iptable_nat
- libcrc32c 12644 3 xfs,nf_nat,nf_conntrack
-
- [root@m01 ~]# systemctl stop firewalld
- [root@m01 ~]# systemctl disable firewalld
-
- [root@m01 ~]# systemctl start iptables.service
- [root@m01 ~]# systemctl enable iptables.service
- Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
- [root@m01 ~]# systemctl status iptables.service
- ● iptables.service - IPv4 firewall with iptables
- Loaded: loaded (/usr/lib/systemd/system/iptables.service; enabled; vendor preset: disabled)
- Active: active (exited) since Fri 2021-05-28 09:59:53 CST; 5s ago
- Process: 7971 ExecStart=/usr/libexec/iptables/iptables.init start (code=exited, status=0/SUCCESS)
- Main PID: 7971 (code=exited, status=0/SUCCESS)
-
- May 28 09:59:53 m01 systemd[1]: Starting IPv4 firewall with iptables...
- May 28 09:59:53 m01 iptables.init[7971]: iptables: Applying firewall rules: [ OK ]
- May 28 09:59:53 m01 systemd[1]: Started IPv4 firewall with iptables
-
- #查看filter表中的规则 ,默认查看的是filter表
-
- [root@m01 ~]# iptables -nL
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
- ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
- ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
- ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
- REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- #查看指定表中的规则
- [root@m01 ~]# iptables -t nat -nL
- Chain PREROUTING (policy ACCEPT)
- target prot opt source destination
-
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain POSTROUTING (policy ACCEPT)
- target prot opt source destination
在正式配置前,先备份,清空规则
- [root@m01 ~]# iptables -F
- [root@m01 ~]# iptables -X
- [root@m01 ~]# iptables -Z
-
- [root@m01 ~]# iptables -nL
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- #拒绝用户访问22端口
- iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
- #查看规则并加上序号
- iptables -t filter -nL --line-number
- #删除规则
- iptables -t filter -D INPUT 1 #根据序号删除
删除规则-D
- [root@oldboy-m01 ~]# iptables -I INPUT -s 10.0.0.7 -j DROP
- [root@oldboy-m01 ~]# iptables -I INPUT -s 172.16.1.7 -j DROP
- [root@oldboy-m01 ~]#
- [root@oldboy-m01 ~]# iptables -nL
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- DROP all -- 172.16.1.7 0.0.0.0/0
- DROP all -- 10.0.0.7 0.0.0.0/0
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- [root@m01 ~]# iptables -I INPUT -s 172.16.1.0/24 -j DROP
- iptables -I INPUT -s 10.0.0.0/24 -p tcp --dport 8080 -j DROP
- [root@web01 ~]# ssh 10.0.0.61 hostname
- ^C
- [root@web01 ~]# ssh 172.16.1.61 hostname
- root@172.16.1.61's password:
- m01
- #方法1: 利用 ! 进行排除
- iptables -I INPUT ! -s 172.16.1.0/24 -j DROP
-
- #只准许 10.0.0.0/24 访问 言外之意 除了 10.0.0.0/24 都拒绝
- iptables -I INPUT ! -s 10.0.0.0/24 -j DROP
- #方法2: 修改链默认规则 修改为拒绝 添加准许
- 先配置好规则 准许规则
- 修改默认规则
-
- [root@oldboy-m01 ~]# iptables -nL
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- [root@oldboy-m01 ~]# iptables -A INPUT -s 10.0.0.0/24 -j ACCEPT
- [root@oldboy-m01 ~]# iptables -nL
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- ACCEPT all -- 10.0.0.0/24 0.0.0.0/0
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
- [root@oldboy-m01 ~]# iptables -P INPUT DROP #修改默认规则
- [root@oldboy-m01 ~]# iptables -nL
- Chain INPUT (policy DROP)
- target prot opt source destination
- ACCEPT all -- 10.0.0.0/24 0.0.0.0/0
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- #测试完成后 修改回去
-
- iptables -P INPUT ACCEPT
- [root@oldboy-m01 ~]# iptables -I INPUT -p tcp --dport 8888 -j DROP
- [root@oldboy-m01 ~]# iptables -I INPUT -p tcp --dport 9999 -j DROP
- [root@oldboy-m01 ~]# iptables -nL
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9999
- DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888
-
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
-
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
-
- #指定多个端口
- -m multiport -p tcp --dport 80,443
-
- iptables -A INPUT -m multiport -p tcp --dport 80,443 -j ACCEPT
- iptables -nL
- iptables -A INPUT -p tcp --dport 1:1024 -j ACCEPT
-
-
- #补充:
- #
- [root@m01 ~]# iptables -I INPUT -p tcp -m multiport ! --dport 80,443 -j DROP
- #如果是 连续的端口 可以不加上-m multiport 1:1024
- [root@m01 ~]# iptables -I INPUT -p tcp --dport 1024:65535 -j DROP