第一部分、安装配置
[[email protected]~]# systemctl stop firewalld
[[email protected]~]# systemctl disable firewalld
yum install iptables-services
systemctl start iptables
systemctl enable iptables
第二部分、防火墙:iptables设置
规则写好了,不次于硬件级防火墙
作用:包过滤技术,类似于ACL
当linux服务器作为路由转发设备时,可以过滤来往数据包
作为独立服务器时,可以对进出数据包进行安全过滤。
开启路由转发功能(与多个网络相关的路由功能开启都需要):
方法:echo 1 > /proc/sys/net/ipv4/ip_forward
vi /etc/sysctl.conf
cd /usr/lib/sysctl.d
vi 00-system.conf
net.ipv4.ip_forward = 1
iptables有四个表table和五个链chain:
iptables的四个表:四个功能方向
raw
Mangle:QOS网络服务品质
nat:网络地址转换
filter:过滤规则的主要表
五个链:主要写入规则,数据流方向
如:filter: INPUT FORWARD OUTPUT
INPUT:处理所有访问我的请求
OUTPUT: 出站规则
FORWARD:处理转发规则
PREROUTING:路由前
POSTROUTING:路由后
开启防火墙:setup或service iptables start
2.查看防火墙规则列表:
iptables -nL 或者iptables -L -n
- iptables -F 清空所有规则策略
4.命令语法
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
****注释:
控制类型:
ACCEPT 放行
DROP 丢弃,不回应
REJECT 拒绝,并回应
LOG 做拒绝也不放行,记录日志
选项 :
-I 插入规则,默认插入到第1条
-A 追加规则,默认在最后追加
-P 修改默认的规则(ACCEPT DROP)
iptables -P INPUT/OUTPUT/FORWARD ACCEPT/DROP
-F 清空所有规则
-D 删除一条规则
-nvL --line-numbers 查看所有规则链的详细信息
watch -n1 iptables -nvL --line-numbers 每一秒观察数据包状态
注意事项:
1)不指定表名,默认就是filter表,所以我们主要以filter为主,后续不再加表名。
2)不指定链名,默认指所有链。如:iptables -F 并观察iptables -nL,检查默认动作
3)设置默认动作:如iptables -P INPUT DROP
4)选项、链名、控制类型必须大写,其他为小写
5)除-P -F -D外,必须写条件
6.尝试编写:
iptables -A INPUT -p tcp --dport 80 -j REJECT/DROP
iptables -A INPUT -p tcp --dport 2200 -j ACCEPT
iptables -I INPUT -p udp --dport 67 -j DROP
iptables -I INPUT 2 -p tcp --dport 2200 -j ACCEPT
iptables -D INPUT 2
7.条件编写:
1)通用匹配:
特点:独立使用,不依赖与其他条件
-p 协议名,icmp、tcp、udp: dns 53,QQ 8000,DHCP 67
-s 源IP
-d 目标IP 192.168.1.0/24 -j ACCEPT
-i eth0 从哪个网卡进来
-o eth1 从哪个网卡出去
注意!的用法
[[email protected] [local~]# iptables -I INPUT -p icmp -j DROP
[[email protected] [local~]# iptables -I INPUT -s 10.20.30.0/24 -j DROP
[[email protected] [local~]# iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
[[email protected] [local~]# iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
[[email protected] [local~]# iptables -A INPUT -i eth1 -s 172.16.0.0/16 -j DROP
2)隐含匹配:
端口匹配:--sport 源端口、--dport 目的端口
TCP标记匹配:--tcp-flags 检查范围 被设置的标记 SYN/FIN
iptables -I INPUT -s 172.18.11.87 -p tcp --dport 22 --tcp-flags SYN,RST,ACK,FIN RST -j DROP
ICMP类型匹配:--icmp-type ICMP类型8/0/3
如:
[[email protected] [local~]# iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
[[email protected] [local~]# iptables -A INPUT -p icmp --icmp-type 8 -j DROP
[[email protected] [local~]# iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
[[email protected] [local~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT
[[email protected] [local~]# iptables -A INPUT -p icmp -j DROP
3)显式匹配条件
多端口匹配:-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
IP范围匹配:-m iprange --src-range IP范围
MAC地址匹配:-m mac --mac-source MAC地址
[[email protected] [local~]# iptables -P INPUT DROP
[[email protected] [local~]# iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
[[email protected] [local~]# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143:200 -j ACCEPT
[[email protected] [local~]# iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f -j DROP - iptables-save > 文件 导出当前规则
iptables-restore < 文件 导入规则
service iptables restart 后加载/etc/sysconfig/iptables配置文件恢复了默认值
/etc/init.d/iptables save 将当前规则设定为默认规则
service iptables restart 验证 - iptables nat 上网
首先开启内核路由转发的模块。
echo 1 > /porc/sys/net/ipv4/ip_forward #这是个暂时的做法,重启后就会失效,好的做法是:
vi /etc/sysctl.conf
修改其中的net.ipv4.ip_forward = 1
然后要让它立即生效,需要执行命令:
sysctl -p
DNS的配置在/etc/resolv.conf中添加DNS的IP即可
至此第一步搞定。
第二步添加NAT:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to 外网IP
或-j MASQUERADE(使用ASDL动态IP用此选项)
如:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to 172.18.11.92
#这条命令里的 eth0代表外网接口,-s 192.168.10.0/24代表内网段
原文地址:http://blog.51cto.com/jxwpx/2317654