运维之道 | 25个企业常用的防火墙规则

在这里插入图片描述

iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型] 参数

2小时玩转iptables - pdf – 密码:e9d4
常用命令:
-P :设置默认策略:				iptables -P INPUT (DROP|ACCEPT)
-F :清空规则链					iptables -F  / iptables --flush
-L :查看规则链					iptables -L
-A :在规则链的末尾加入新规则		iptables -A INPUT -s 192.168.1.1
-I num:在规则链的头部加入新规则	iptables -I INPUT 1 --dport 80 -j ACCEPT     	插入一条规则,原本位置上的规则将会往后移动一个顺位
-D num:删除某一条规则   			iptables -D INPUT 1(编号)
-R:修改规则						iptables -R INPUT 1 -s 192.168.12.0 -j DROP 	取代现行规则,顺序不变(1是位置)
-N:新的规则						iptables -N allowed 定义新的规则
通用参数:
-s :匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。		iptables -A INPUT -s 192.168.1.1
-d :匹配目标地址,去往xxxxIP							iptables -A INPUT -d 192.168.12.1
-i :网卡名称 匹配从这块网卡流入的数据					iptables -A INPUT -i ens33
-o :网卡名称 匹配从这块网卡流出的数据					iptables -A FORWARD -o ens33
-p :匹配协议,如tcp,udp,icmp							iptables -A INPUT -p tcp
-j :指定要进行的处理动作  ---  DROP:丢弃   REJECT:明示拒绝   ACCEPT:接受
-m :使用扩展模块来进行数据包的匹配 (multiport/tcp/state/addrtype)	iptables -m state ESTABLISHED
-t :表名(raw、mangle、nat、filter)					iptables -t nat
--dport num :匹配目标端口号							iptables -A INPUT -p tcp --dport 22
--sport num :匹配来源端口号							iptables -A INPUT -p tcp --sport 22
常用的ACTION:
-j :指定要进行的处理动作
DROP:丢弃
REJECT:明示拒绝
ACCEPT:接受
SNAT基于原地址的转换
source--指定原地址
TCP状态转移要点:
LISTENING状态:		FTP服务启动后首先处于侦听(LISTENING)状态。
ESTABLISHED状态:	ESTABLISHED的意思是建立连接,表示两台机器正在通信。
CLOSE_WAIT:		对方主动关闭连接或者网络异常导致连接中断,这时我方的状态会变成CLOSE_WAIT 此时我方要调用close()来使得连接正确关闭
TIME_WAIT我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT
匹配都在iptable的命令行中指定:
--source 				匹配源ip地址或网络
--destination (-d)		匹配目标ip地址或网络
--protocol (-p)			匹配ip值
--in-interface (-i)		流入接口(例如,eth0)
--out-interface (-o)	流出接口
--state					匹配一组连接状态
--string				匹配应用层数据字节序列
--comment				在内核内存中为一个规则关联多达256个字节的注释数据

-p udp:UDP协议的扩展
    --dport	 :destination port 目的端口
    --sport  :source port      来源端口
-p icmp:icmp数据报文的扩展
    --icmp-type:
    echo-request(请求回显),一般用 8 来表示
    所以 --icmp-type 8 匹配请求回显数据包
    echo-reply (响应的数据包)一般用 0 来表示

一、常用规则案例

1、删除已有规则

在开始创建 iptables 规则之前,可清除系统自带已有规则

iptables -F				///命令一
iptables --flush		///命令二

2、设置链的默认策略

链的默认政策设置为"ACCEPT"(接受),可将 INPUT、FORWARD、OUTPUT 链设置成"DROP"(拒绝)
在将INPUT链设置为DROP时,需要先开放22号端口,否则xshell无法连接主机:iptables -A INPUT -p tcp --dport 22 -j ACCEPT

  • 链路规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
  • 修改默认链路规则
[root@localhost ~]# iptables -P INPUT DROP

Chain INPUT (policy DROP)				///将ACCEPT链改为DROP链,需要开放什么策略,直接配置ACCEPT即可
target     prot opt source               destination         
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

3、阻止指定IP地址

例:丢弃来自IP地址为x.x.x.x的包

  • 当在 log 里发现来自某ip地址的异常记录,可以通过此命令暂时阻止该地址的访问以做更深入分析
iptables -A INPUT -s x.x.x.x -j DROP

例:阻止来自IP地址x.x.x.x eth0 tcp的包

iptables -A INPUT -i ens33 -s x.x.x.x -j DROP			///拒绝由某IP经过ens33网卡流入的数据
iptables -A INPUT -i ens33 -p tcp -s x.x.x.x -j DROP	///拒绝来自IP地址 x.x.x.x tcp的数据

4、允许所有SSH的连接请求

例:允许所有来自外部的SSH连接请求,即只允许进入 ens33 接口,并且目标端口为 22 的数据包

iptables -A INPUT -i ens33 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

5、仅允许来自指定网络的SSH连接请求

例:仅允许来自于 192.168.100.0/24 域的用户的ssh连接请求

iptables -A INPUT -i ens33 -p tcp -s 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

6、允许http和https的连接请求

例:允许所有来自web - http的连接请求

iptables -A INPUT -i ens33 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

例:允许所有来自web - https的连接请求

iptables -A INPUT -i ens33 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

7、使用 multiport 将多个规则结合在一起

允许多个端口从外界连入,除了为每个端口都写一条独立的规则外,我们可以用multiport将其组合成一条规则。
例:允许所有ssh,http,https的流量访问

iptables -A INPUT -i ens33 -p tcp -m multiport --dports 22,80,443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp -m multiport --sports 22,80,443 -m state --state ESTABLISHED -j ACCEPT

8、允许从本地发起的SSH

iptables -A OUTPUT -o ens33 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

PS:这与允许ssh连入的规则略有不同。在OUTPUT链上,我们允许NEW和ESTABLISHED状态。在INPUT链上,我们只允许ESTABLISHED状态。ssh连入的规则与之相反。

扫描二维码关注公众号,回复: 8985742 查看本文章

9、仅允许从本地发起到一个指定的网络域的SSH请求

例:仅允许从内部连接到网域192.168.100.0/24

iptables -A OUTPUT -o ens33 -p tcp -d 192.168.100.0/24 --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens33 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

10、允许从本地发起的HTTPS连接请求

下面的规则允许输出安全的网络流量,如果你想允许用户访问互联网,这是非常有必要的。在服务器上,这些规则能让你使用wget从外部下载一些文件

iptables -A OUTPUT -o ens33 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -i ens33 -p tcp --sport 443 -m state --state ESTABLISHED -j ACCEPT

注:对于HTTP web流量的外联请求,只需要将上述命令中的端口从443改成80即可。

11、负载平衡传入的网络流量

使用iptables可以实现传入web流量的负载均衡,我们可以传入web流量负载平衡使用iptables防火墙规则。
例:使用iptables nth将HTTPS流量负载平衡至三个不同的ip地址

iptables -A PREROUTING -i ens33 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:443
iptables -A PREROUTING -i ens33 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 1 -j DNAT --to-destination 192.168.1.102:443
iptables -A PREROUTING -i ens33 -p tcp --dport 443 -m state --state NEW -m nth --counter 0 --every 3 --packet 2 -j DNAT --to-destination 192.168.1.103:443

12、允许外部主机ping内部主机

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

13、允许内部主机ping外部主机

iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

14、允许回环访问

例:在服务器上允许127.0.0.1回环访问

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

15、允许内部网络域外部网络的通信

防火墙服务器上的其中一个网卡连接到外部,另一个网卡连接到内部服务器,使用以下规则允许内部网络与外部网络的通信。
例:eth1连接到外部网络(互联网),eth0连接到内部网络(例如:192.168.1.x)

iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

16、允许出站的DNS连接

iptables -A OUTPUT -p udp -o eth0 --dport 53 -j ACCEPT
iptables -A INPUT -p udp -i eth0 --sport 53 -j ACCEPT

17、允许NIS连接

  • 如果你使用NIS管理用户帐户,你需要允许NIS连接。
  • 如果你不允许NIS相关的ypbind连接请求,即使SSH连接请求已被允许,用户仍然无法登录。
  • NIS的端口是动态的,先使用命令rpcinfo –p来知道端口号,此例中为853和850端口。
  • rpcinfo -p | grep ypbind 例:允许来自111端口以及ypbind使用端口的连接请求。
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 853 -j ACCEPT
iptables -A INPUT -p udp --dport 853 -j ACCEPT
iptables -A INPUT -p tcp --dport 850 -j ACCEPT
iptables -A INPUT -p udp --dport 850 -j ACCEPT

注:当你重启ypbind之后端口将不同,上述命令将无效。
有两种解决方案:1)使用你NIS的静态IP 2)编写shell脚本通过“rpcinfo - p”命令自动获取动态端口号,并在上述iptables规则中使用。

18、允许来自指定网络的rsync连接请求

例:允许来自网络192.168.101.0/24的rsync连接请求

iptables -A INPUT -i ens33 -p tcp -s 192.168.101.0/24 --dport 873 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 873 -m state --state ESTABLISHED -j ACCEPT

19、允许来自指定网络的MySQL连接请求

很多情况下,MySQL数据库与web服务跑在同一台服务器上。
有时候我们仅希望DBA和开发人员从内部网络(192.168.100.0/24)直接登录数据库,可尝试以下命令:

iptables -A INPUT -i ens33 -p tcp -s 192.168.100.0/24 --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

20、允许Sendmail,Postfix邮件服务

Sendmail和postfix都使用了25端口,因此我们只需要允许来自25端口的连接请求即可

iptables -A INPUT -i ens33 -p tcp --dport 25 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 25 -m state --state ESTABLISHED -j ACCEPT

21、允许IMAP和IMAPS

例:允许IMAP/IMAP2流量,端口为143

iptables -A INPUT -i ens33 -p tcp --dport 143 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 143 -m state --state ESTABLISHED -j ACCEPT

例:允许IMAPS流量,端口为993

iptables -A INPUT -i ens33 -p tcp --dport 993 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 993 -m state --state ESTABLISHED -j ACCEPT

22、允许POP3和POP3S

例:允许POP3访问

iptables -A INPUT -i ens33 -p tcp --dport 110 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 110 -m state --state ESTABLISHED -j ACCEPT

例:允许POP3S访问

iptables -A INPUT -i ens33 -p tcp --dport 995 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o ens33 -p tcp --sport 995 -m state --state ESTABLISHED -j ACCEPT

23、防止DoS攻击

iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT

上述例子中:

  • -m limit: 启用limit扩展
  • –limit 25/minute: 允许最多每分钟25个连接(根据需求更改)。
  • –limit-burst 100: 只有当连接达到limit-burst水平(此例为100)时才启用上述limit/minute限制。

24、端口转发

例:将来自422端口的流量全部转到22端口
这意味着我们既能通过422端口又能通过22端口进行ssh连接,启用DNAT转发。

iptables -t nat -A PREROUTING -p tcp -d 192.168.102.37 --dport 422 -j DNAT --to 192.168.102.37:22

除此之外,还需要允许连接到422端口的请求

iptables -A INPUT -i eth0 -p tcp --dport 422 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -o eth0 -p tcp --sport 422 -m state --state ESTABLISHED -j ACCEPT

25、记录丢弃的数据表

第一步:新建名为LOGGING的链

iptables -N LOGGING

第二步:将所有来自INPUT链中的数据包跳转到LOGGING链中

iptables -A INPUT -j LOGGING

第三步:为这些包自定义个前缀,命名为"IPTables Packet Dropped"

iptables -A LOGGING -m limit --limit 2/min -j LOG --log-prefix "IPTables Packet Dropped: " --log-level 7

第四步:丢弃这些数据包

iptables -A LOGGING -j DROP

26、防火墙 导入导出

iptables-save  导出防火墙规则 

iptables-save >>/iptables.txt

iptables-restore 导入防火墙规则

iptables-restore iptables.txt

2小时玩转iptables pdf
https://blog.csdn.net/weixin_42123737/article/details/80542910

发布了118 篇原创文章 · 获赞 13 · 访问量 9415

猜你喜欢

转载自blog.csdn.net/VillianTsang/article/details/104201531
今日推荐