2.11. iptables与firewalld 防火墙¶
2.11.1. iptables中的常用参数¶
-P 设置默认策略
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址 IP/MASK,加叹号“!”表示除这个 IP 外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如 TCP、UDP、ICMP
--dport num 匹配目标端口号
--sport num 匹配来源端口号
查看已有的防火墙规则链
iptables -L
iptables -F #清空已有的防火墙规则链
iptables -P INPUT DROP #把INPUT链的默认策略设置为拒绝
#添加一条允许 ICMP 流量进入的策略规则
iptables -I INPUT -p icmp -j ACCEPT
#删除INPUT链中的规则
iptables -D INPUT 1
# 设置默认策略为允许
iptables -P INPUT ACCEPT
iptables -L
iptables -L INPUT # 列出某规则链中的所有规则
iptables -X allowed # 删除某个规则链 ,不加规则链,清除所有非内建的
iptables -Z INPUT # 将封包计数器归零
iptables -N allowed # 定义新的规则链
iptables -P INPUT DROP # 定义过滤政策,将INPUT表默认设置为拒绝
iptables -A INPUT -s 192.168.0.1 -j DROP #filter表添加一条入站规则,丢弃192.168.0.1主机发给防火墙本机的所有数据包
iptables -I INPUT -s 192.168.0.22 -p icmp -j REJECT #ilter表添加一条入站规则,拒绝192.168.0.22 ping防火墙本机
iptables -A INPUT -s 192.168.1.1 # 比对封包的来源IP # ! 192.168.0.0/24 ! 反向对比
iptables -A INPUT -d 192.168.1.1 # 比对封包的目的地IP
iptables -A INPUT -i eth0 # 比对封包是从哪片网卡进入
iptables -A FORWARD -o eth0 # 比对封包要从哪片网卡送出 eth+表示所有的网卡
iptables -A INPUT -p tcp # -p ! tcp 排除tcp以外的udp、icmp。-p all所有类型
iptables -D INPUT 8 # 从某个规则链中删除一条规则
iptables -D INPUT --dport 80 -j DROP # 从某个规则链中删除一条规则
iptables -A INPUT -p tcp --dport 22 -s 192.168.1.10 -j ACCEPT #如果只允许一个固定的IP 能ssh
iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT #开通从该服务器ssh 到别的服务器
iptables -R INPUT 8 -s 192.168.0.1 -j DROP # 取代现行规则
iptables -I INPUT 8 --dport 80 -j ACCEPT # 插入一条规则
iptables -A INPUT -i eth0 -j DROP # 其它情况不允许
iptables -A INPUT -p tcp -s IP -j DROP # 禁止指定IP访问
iptables -A INPUT -p tcp -s IP --dport port -j DROP # 禁止指定IP访问端口
iptables -A INPUT -s IP -p tcp --dport port -j ACCEPT # 允许在IP访问指定端口
iptables -A INPUT -p tcp --dport 22 -j DROP # 禁止使用某端口
iptables -A INPUT -i eth0 -p icmp -m icmp --icmp-type 8 -j DROP # 禁止icmp端口
iptables -A INPUT -i eth0 -p icmp -j DROP # 禁止icmp端口
iptables -t filter -A INPUT -i eth0 -p tcp --syn -j DROP # 阻止所有没有经过你系统授权的TCP连接
iptables -A INPUT -f -m limit --limit 100/s --limit-burst 100 -j ACCEPT # IP包流量限制
iptables -A INPUT -i eth0 -s 192.168.62.1/32 -p icmp -m icmp --icmp-type 8 -j ACCEPT # 除192.168.62.1外,禁止其它人ping我的主机
iptables -A INPUT -p tcp -m tcp --dport 80 -m state --state NEW -m recent --up
--seconds 5 --hitcount 20 --rttl --name WEB --rsource -j DROP # 可防御cc攻击(未测试)
#向INPUT规则链中添加拒绝192.168.10.5主机访问本机80端口(Web服务)的策略规则:
iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT
#将INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量:
iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT
#向INPUT规则链中添加拒绝所有人访问本机12345端口的策略规则
iptables -I INPUT -p tcp --dport 12345 -j REJECT
iptables -I INPUT -p udp --dport 12345 -j REJECT
#向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则:
iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
iptables -A INPUT -p udp --dport 1000:1024 -j REJECT
#nat转换
iptables -t nat -A POSTROUTING -s 172.28.27.0/24 -o eth0 -j SNAT --to 61.187.55.36 #将所有来自172.28.27.0/24数据包的源ip转为61.187.55.36,实现内网地址转为公网地址,上网
#Ip地址映射
iptables -A POSTROUTING -i eth0 -d 61.187.55.35 -j DNAT --to 172.28.27.100
iptables -A POSTROUTING -o eth0 -s 172.28.27.100 -j SNAT --to 61.187.55.35
#因为通信是双向的,所以IPtables先将接收到的目的IP为61.187.55.35的数据包进行目的nat(dnat),然后对接收到的源IP地址为172.28.27.100 数据包
#进行源nat(snat),这样所有目的IP为61.187.55.35的数据包都将转发给172.28.27.100,而所有来自172.28.27.100的数据包都被伪装成61.187.55.35,从而实现IP地址映射
#实现对内网的www和ftp服务进行保护
iptables -f #先清除input链的所有规则
iptables -p forward drop #设置防火墙forward链的策略为drop,防火墙的默认规则是先禁止所有数据包,然后挨个放行
iptables -a forward -p tcp -d 172.28.27.100 -dport www -i eth0 -j accept #开放服务器端口80的www服务
iptables -a forward -p tcp -d 172.28.27.100 -dport ftp -i eth0 -j accept #开放服务器的FTP服务,其余的服务以此类推,因为是双向的,所以还需要设置内部数据包流出的规则
iptables -a forward -s 172.28.27.0/24 -i eth1 -j accept #接受来自整个内部网络的数据包并使之通过
2.11.2. iptables配置文件¶
iptables配置实例文件
#iptables规则配置文件/etc/sysconfig/iptables
# Generated by iptables-save v1.2.11 on Fri Feb 9 12:10:37 2007
*filter
:INPUT ACCEPT [637:58967]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [5091:1301533]
# 允许的IP或IP段访问 建议多个
-A INPUT -s 127.0.0.1 -p tcp -j ACCEPT
-A INPUT -s 192.168.0.0/255.255.0.0 -p tcp -j ACCEPT
# 开放对外开放端口
-A INPUT -p tcp --dport 80 -j ACCEPT
# 指定某端口针对IP开放
-A INPUT -s 192.168.10.37 -p tcp --dport 22 -j ACCEPT
# 拒绝所有协议(INPUT允许)
-A INPUT -p tcp -m tcp --tcp-flags FIN,SYN,RST,PSH,URG RST -j DROP
# 允许已建立的或相关连的通行
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 拒绝ping
-A INPUT -p tcp -m tcp -j REJECT --reject-with icmp-port-unreachable
COMMIT
# Completed on Fri Feb 9 12:10:37 2007